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;
- }
- }
|