| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 | <?php// +—————————————————————————————————————————————————————————————————————// | Created by Yunbao// +—————————————————————————————————————————————————————————————————————// | Copyright (c) 2013~2022 http://www.yunbaokj.com All rights reserved.// +—————————————————————————————————————————————————————————————————————// | Author: https://gitee.com/yunbaokeji// +—————————————————————————————————————————————————————————————————————// | Date: 2022-02-17// +—————————————————————————————————————————————————————————————————————/** * 充值 */class Api_Charge extends PhalApi_Api {	public function getRules() {		return array(			'getAliOrder' => array(				'uid' => array('name' => 'uid', 'type' => 'int', 'min' => 1, 'require' => true, 'desc' => '用户ID'),				'token' => array('name' => 'token', 'type' => 'string',  'require' => true, 'desc' => '用户Token'),				'changeid' => array('name' => 'changeid', 'type' => 'int',  'require' => true, 'desc' => '充值规则ID'),				'coin' => array('name' => 'coin', 'type' => 'string',  'require' => true, 'desc' => '钻石'),				'money' => array('name' => 'money', 'type' => 'string', 'require' => true, 'desc' => '充值金额'),			),			'getWxOrder' => array( 				'uid' => array('name' => 'uid', 'type' => 'int', 'min' => 1, 'require' => true, 'desc' => '用户ID'),				'token' => array('name' => 'token', 'type' => 'string',  'require' => true, 'desc' => '用户Token'),				'changeid' => array('name' => 'changeid', 'type' => 'string',  'require' => true, 'desc' => '充值规则ID'),				'coin' => array('name' => 'coin', 'type' => 'string',  'require' => true, 'desc' => '钻石'),				'money' => array('name' => 'money', 'type' => 'string', 'require' => true, 'desc' => '充值金额'),			),				);	}		/* 获取订单号 */	protected function getOrderid($uid){		$orderid=$uid.'_'.date('YmdHis').rand(100,999);		return $orderid;	}	/**	 * 微信支付获取订单号	 * @desc 用于 微信支付获取订单号	 * @return int code 操作码,0表示成功	 * @return array info 	 * @return string info[0] 支付信息	 * @return string msg 提示信息	 */	public function getWxOrder() {		$rs = array('code' => 0, 'msg' => '', 'info' => array());				$uid=checkNull($this->uid);		$token=checkNull($this->token);		$changeid=checkNull($this->changeid);		$coin=checkNull($this->coin);		$money=checkNull($this->money);		$checkToken=checkToken($uid,$token);		if($checkToken==700){			$rs['code'] = $checkToken;			$rs['msg'] = '您的登陆状态失效,请重新登陆!';			return $rs;		}		$orderid=$this->getOrderid($uid);		$type=2;				if($coin==0){			$rs['code']=1002;			$rs['msg']='信息错误';					return $rs;								}									$configpri = getConfigPri(); 		$configpub = getConfigPub(); 		 //配置参数检测							if($configpri['wx_appid']== "" || $configpri['wx_mchid']== "" || $configpri['wx_key']== ""){			$rs['code'] = 1002;			$rs['msg'] = '微信未配置';			return $rs;					 		}				$orderinfo=array(			"uid"=>$uid,			"touid"=>$uid,			"money"=>$money,			"coin"=>$coin,			"orderno"=>$orderid,			"type"=>$type,			"status"=>0,			"addtime"=>time()		);				$domain = new Domain_Charge();		$info = $domain->getOrderId($changeid,$orderinfo);		if($info==1003){			$rs['code']=1003;			$rs['msg']='订单信息有误,请重新提交';            return $rs;			}else if(!$info){			$rs['code']=1001;			$rs['msg']='订单生成失败';            return $rs;			}			 		$noceStr = md5(rand(100,1000).time());//获取随机字符串		$time = time();					$paramarr = array(			"appid"       =>   $configpri['wx_appid'],			"body"        =>    "充值{$coin}虚拟币",			"mch_id"      =>    $configpri['wx_mchid'],			"nonce_str"   =>    $noceStr,			"notify_url"  =>    $configpub['site'].'/Appapi/pay/notify_wx',			"out_trade_no"=>    $orderid,			"total_fee"   =>    $money*100, 			"trade_type"  =>    "APP"		);				$sign = $this -> sign($paramarr,$configpri['wx_key']);//生成签名		$paramarr['sign'] = $sign;		$paramXml = "<xml>";		foreach($paramarr as $k => $v){			$paramXml .= "<" . $k . ">" . $v . "</" . $k . ">";		}		$paramXml .= "</xml>";			 		$ch = curl_init ();		@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  		@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在  		@curl_setopt($ch, CURLOPT_URL, "https://api.mch.weixin.qq.com/pay/unifiedorder");		@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);		@curl_setopt($ch, CURLOPT_POST, 1);		@curl_setopt($ch, CURLOPT_POSTFIELDS, $paramXml);		@$resultXmlStr = curl_exec($ch);		if(curl_errno($ch)){			//print curl_error($ch);			file_put_contents('./wxpay.txt',date('y-m-d H:i:s').' 提交参数信息 ch:'.json_encode(curl_error($ch))."\r\n",FILE_APPEND);		}		curl_close($ch);		$result2 = $this->xmlToArray($resultXmlStr);                if($result2['return_code']=='FAIL'){            $rs['code']=1005;			$rs['msg']=$result2['return_msg'];            return $rs;	        }		$time2 = time();		$prepayid = $result2['prepay_id'];		$sign = "";		$noceStr = md5(rand(100,1000).time());//获取随机字符串		$paramarr2 = array(			"appid"     =>  $configpri['wx_appid'],			"noncestr"  =>  $noceStr,			"package"   =>  "Sign=WXPay",			"partnerid" =>  $configpri['wx_mchid'],			"prepayid"  =>  $prepayid,			"timestamp" =>  $time2		);		$paramarr2["sign"] = $this -> sign($paramarr2,$configpri['wx_key']);//生成签名				$rs['info'][0]=$paramarr2;		return $rs;				}				/**	* sign拼装获取	*/	protected function sign($param,$key){		$sign = "";		ksort($param);		foreach($param as $k => $v){			$sign .= $k."=".$v."&";		}		$sign .= "key=".$key;		$sign = strtoupper(md5($sign));		return $sign;		}	/**	* xml转为数组	*/	protected function xmlToArray($xmlStr){		$msg = array(); 		$postStr = $xmlStr; 		$msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 		return $msg;	}				/**	 * 支付宝支付获取订单号	 * @desc 用于支付宝支付获取订单号	 * @return int code 操作码,0表示成功	 * @return array info 	 * @return string info[0].orderid 订单号	 * @return string msg 提示信息	 */	public function getAliOrder() {		$rs = array('code' => 0, 'msg' => '', 'info' => array());				$uid=checkNull($this->uid);		$token=checkNull($this->token);		$changeid=checkNull($this->changeid);		$coin=checkNull($this->coin);		$money=checkNull($this->money);		$checkToken=checkToken($uid,$token);		if($checkToken==700){			$rs['code'] = $checkToken;			$rs['msg'] = '您的登陆状态失效,请重新登陆!';			return $rs;		}		$configpri=getConfigPri();        if(!$configpri['aliapp_partner']||!$configpri['aliapp_seller_id']||!$configpri['aliapp_key_android']||!$configpri['aliapp_key_ios']){            $rs['code']=1001;            $rs['msg']='支付宝未配置';            return $rs;        }				$orderid=$this->getOrderid($uid);		$type=1;				if($coin==0){			$rs['code']=1002;			$rs['msg']='信息错误';					return $rs;								}					$orderinfo=array(			"uid"=>$uid,			"touid"=>$uid,			"money"=>$money,			"coin"=>$coin,			"orderno"=>$orderid,			"type"=>$type,			"status"=>0,			"addtime"=>time()		);				$domain = new Domain_Charge();		$info = $domain->getOrderId($changeid,$orderinfo);		if($info==1003){			$rs['code']=1003;			$rs['msg']='订单信息有误,请重新提交';		}else if(!$info){			$rs['code']=1001;			$rs['msg']='订单生成失败';		}				$rs['info'][0]['orderid']=$orderid;		return $rs;	}		}
 |