微信小程序> 小程序的支付的完整代码(php)

小程序的支付的完整代码(php)

浏览量:582 时间: 来源:小猫哥

小程序的支付的完整代码(php)

下面为后台代码

 function pay(){         $openid = "用户的openid"           $money ="需要支付的金额" ;  //         (!$lawyer_id) &&  $this-response(500,"参数错误");        (!$money)  &&  $this-response(500,"选择金额错误!");        $orderCode = date("YmdHis");   //  订单号//        随机字符串        $str="QWERTYUIPADGHJKLZXCVNM1234567890";        $nonce = str_shuffle($str);        $appid = '你的小程序appid';          $key = "你的商户秘钥";          $mch_id = "你的商户号";          $pay['appid'] = $appid;        $pay['body'] = 'test';               //商品描述        $pay['mch_id'] = $mch_id;            //商户号        $pay['nonce_str'] = $nonce;        //随机字符串        $pay['notify_url'] = '异步接收微信支付结果通知的回调地址';        $pay['openid'] = $openid;        $pay['out_trade_no'] = $orderCode;       //订单号        $pay['spbill_create_ip'] = $_SERVER['SERVER_ADDR']; // 终端IP        $pay['total_fee'] = 100*$money; //支付金额        $pay['trade_type'] = 'JSAPI';    //交易类型//        组建签名(不可换行 空格  否则哭吧)        $stringA="appid=".$pay['appid']."&body=".$pay['body']."&mch_id=".$pay['mch_id']."&nonce_str=".$pay['nonce_str']."&notify_url=".$pay['notify_url']."&openid=". $pay['openid']."&out_trade_no=".$pay['out_trade_no']."&spbill_create_ip=". $pay['spbill_create_ip']."&total_fee=".$pay['total_fee']."&trade_type=".$pay['trade_type'];        $stringSignTemp=$stringA."&key=".$key; //注:key为商户平台设置的密钥key(这个还需要再确认一下)        $sign= strtoupper(md5($stringSignTemp)); //注:MD5签名方式        $pay['sign'] = $sign;              //签名//        统一下单请求        $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";        $data = $this-arrayToXml($pay);//        return $data;        $res = $this-wxpost($url,$data);//        return $res;  //返回统一下单结果//        对 统一下单返回得参数进行处理        $pay_arr = $this-xmlToArray($res);  //这里是数组        if ($pay_arr['return_code'] == 'FAIL' || $pay_arr['result_code'] == 'FAIL')        {            echo  json_encode($res);exit;//            return $res;        }//        调起支付数据签名字段        $timeStamp = time();        $nonce_pay = str_shuffle($str);        $package = $pay_arr['prepay_id'];        $signType = "MD5";        $stringPay = "appId=".$appid."&nonceStr=".$nonce_pay."&package=prepay_id=".$package."&signType=".$signType."&timeStamp=".$timeStamp."&key=".$key;        $paySign = strtoupper(md5($stringPay));        $rpay['timeStamp'] = (string)$timeStamp;        $rpay['nonceStr'] = $nonce_pay;        $rpay['package'] = "prepay_id=".$package;        $rpay['signType'] = $signType;        $rpay['paySign'] = $paySign;        $rpay['orders'] =  $orderCode ;  //订单流水号id    $order        echo   json_encode($rpay);    }

异步处理函数

 function notify_url(){        $receipt = $_REQUEST;        if($receipt==null){            $receipt = file_get_contents("php://input");        }        if($receipt == null){            $receipt = $GLOBALS['HTTP_RAW_POST_DATA'];        }        $post_data = $this-xmlToArray($receipt);        $postSign = $post_data['sign'];        unset($post_data['sign']);        ksort($post_data);// 对数据进行排序        $str =  $params = http_build_query($post_data);//对数组数据拼接成key=value字符串        $user_sign = strtoupper(md5($str."&key=您的商户密钥"));   //再次生成签名,与$postSign比较        $ordernumber = $post_data['out_trade_no'];// 订单可以查看一下数据库是否有这个订单        if($post_data['return_code']=='SUCCESS'&& $postSign == $user_sign){            // 查询订单是否已经支付(通过订单号调取微信的查询订单的接口)            //如果已经支付 更改数据库中的 支付状态 并写入日志表            file_put_contents('wxPaylog.txt',$res);            if($result['data']){                // 进行更改支付成功状态            }else{                echo '微信支付失败,数据未存在该订单。';            }        }else{             // 写个日志记录             file_put_contents('wxPaylog.txt',$post_data['return_code'].PHP_EOL, FILE_APPEND);             echo '微信支付失败';             echo  "success";         }    }

post 请求

     function wxpost($url,$post)    {        //初始化        $curl = curl_init();        $header[] = "Content-type: text/xml";//定义content-type为xml        //设置抓取的url        curl_setopt($curl, CURLOPT_URL, $url);        //设置头文件的信息作为数据流输出//        curl_setopt($curl, CURLOPT_HEADER, 1);        //定义请求类型        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);        //设置获取的信息以文件流的形式返回,而不是直接输出。        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);        //设置post方式提交        curl_setopt($curl, CURLOPT_POST, 1);        //设置post数据        $post_data = $post;        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);        //执行命令        $data = curl_exec($curl);        //关闭URL请求        //显示获得的数据//        print_r($data);        if ($data)        {            curl_close($curl);            return $data;        }else{            $res = curl_error($curl);            curl_close($curl);            return $res;        }    }

将数组转化为xml数据格式

     function arrayToXml($arr){        $xml = "xml";        foreach ($arr as $key=$val){            if(is_array($val)){                $xml.="".$key."".$this-arrayToXml($val)."/".$key."";            }else{                $xml.="".$key."".$val."/".$key."";            }        }        $xml.="/xml";        return $xml;    }

将XML转化为json/数组

     function xmlToArray($xml,$type='')    {        //禁止引用外部xml实体        libxml_disable_entity_loader(true);        //simplexml_load_string()解析读取xml数据,然后转成json格式        $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);        if ($type == "json") {            $json = json_encode($xmlstring);            return $json;        }        $arr = json_decode(json_encode($xmlstring), true);        return $arr;    }

小程序代码

 wx.request({      url: '请求参数的地址获得下面调用支付时需要的参数',      data: {'需要传入后台的参数'},      success: function (res) {        var rest = res.data;        console.log(rest)        // 调用支付接口开始        wx.requestPayment({          timeStamp: rest.timeStamp,          nonceStr: rest.nonceStr,          package: rest.package,          signType: rest.signType,          paySign: rest.paySign,          success: function(res) {            console.log(res)          },          fail: function(res) {            console.log(res)          },          complete: function(res) {            console.log(res)          },        })      }    })

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎