您好,欢迎访问一九零五行业门户网

PHP实现微信小程序支付代码分享

php的功能是很强大的,本文我们主要和大家分享php后端实现微信小程序支付代码,前端:比较简单,在对应的支付事件上进行网络请求就好:
微信小程序支付 后端php(二)
  view_moneysure:function(){     var code = this.data.code;     console.log('code是' +code)     wx.request({       url: 'https://...com/pay.php',//这个链接是后端写的       header: {         'content-type': 'application/x-www-form-urlencoded'       },       data: {         code: code,       },       method: 'post',        success: function (response) {         console.log( response.data);         // 发起支付         wx.requestpayment({           'appid': response.data.appid,           'timestamp': response.data.timestamp,           'noncestr': response.data.noncestr,           'package': response.data.package,           'signtype': 'md5',           'paysign': response.data.paysign,           'success': function (res) {             wx.showtoast({                 title: '支付成功'             });             console.log(res);           },           'fail': function (res) {             console.log(res)           }         });       },       fail: function (res) {         console.log(res)       }     })   },
后端代码:
1. pay.php //小程序请求的后端地址
e16c3c8897157dbebcecebd11889006esetbody(testceshi);         //         订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳         $input->setout_trade_no(time().'');         //         费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱         $input->settotal_fee(1);         $input->setnotify_url(https://...com/notify.php);//需要自己写的notify.php         $input->settrade_type(jsapi);         //         由小程序端传给后端或者后端自己获取,写自己获取到的,         $input->setopenid('udhncondjcnkjnjknkcssdcabckn');         //$input->setopenid($this->getsession()->openid);         //         向微信统一下单,并返回order,它是一个array数组         $order = wxpayapi::unifiedorder($input);         //         json化返回给小程序端         header(content-type: application/json);         echo $this->getjsapiparameters($order);     }     private function getjsapiparameters($unifiedorderresult)     {    //判断是否统一下单返回了prepay_id         if(!array_key_exists(appid, $unifiedorderresult)             || !array_key_exists(prepay_id, $unifiedorderresult)             || $unifiedorderresult['prepay_id'] == )         {             throw new wxpayexception(参数错误);         }         $jsapi = new wxpayjsapipay();         $jsapi->setappid($unifiedorderresult[appid]);         $timestamp = time();         $jsapi->settimestamp($timestamp);         $jsapi->setnoncestr(wxpayapi::getnoncestr());         $jsapi->setpackage(prepay_id= . $unifiedorderresult['prepay_id']);         $jsapi->setsigntype(md5);         $jsapi->setpaysign($jsapi->makesign());         $parameters = json_encode($jsapi->getvalues());         return $parameters;     } //这里是服务器端获取openid的函数 //    private function getsession() { //        $code = $this->input->post('code'); //        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.wxpayconfig::appid.'&secret='.wxpayconfig::appsecret.'&js_code='.$code.'&grant_type=authorization_code'; //        $response = json_decode(file_get_contents($url)); //        return $response; //    } } $wxpay = new wxpay(); $wxpay->index();
2.  微信sdk 下载链接:https://pay.weixin.qq.com/wiki/doc/api/download/wxpayapi_php_v3.zip
 解压在lib文件夹下可以看到:
放到服务端可访问的目录下。
在wxpayconfig.php里面配置账号信息:
class wxpayconfig { //=======【基本信息设置】===================================== // /**  * todo: 修改这里配置为您自己申请的商户信息  * 微信公众号信息配置  *   * appid:绑定支付的appid(必须配置,开户邮件中可查看)  *   * mchid:商户号(必须配置,开户邮件中可查看)  *   * key:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)  * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert  *   * appsecret:公众帐号secert(仅jsapi支付的时候需要配置, 登录公众平台,进入开发者中心可设置),  * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_cn  * @var string  */ const appid = 'wx123456789...';//这里填上自己的对应信息 const mchid = '14151666888'; const key = '11223344556677889900'; const appsecret = '828bfsdibfsiubfikdbfik'; const notify_url='https://...com/notify.php';
注:
期间遇到一个签名错误,一直不好,使用微信支付接口签名校验工具校验也没有错,像网上说的漏写错写参数都查了,就是一直返回
<return_code><![cdata[fail]]></return_code>
<return_msg><![cdata[签名错误]]></return_msg>
这样的信息,最后解决办法是:重置了key (商户支付密钥),重置的和之前的一模一样,但竟然就可以了...
问题主要都是报签名错误,仔细检查就好,比如xml格式不对,md5加密后的位数,字典排序没排好,缺少参数等...
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1
3.最后附上notify.php
<?php /** * created by phpstorm. * user: ufo * date: 17/7/13 * time: 下午6:42 */ require_once ('wxpay.api.php'); require_once ('wxpay.notify.php'); class paynotifycallback extends wxpaynotify { //查询订单 public function queryorder($transaction_id) { $input = new wxpayorderquery(); $input->settransaction_id($transaction_id); $result = wxpayapi::orderquery($input); if(array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "success" && $result["result_code"] == "success") { return true; } return false; } //重写回调处理函数 public function notifyprocess($data, &$msg) { $notfiyoutput = array(); if(!array_key_exists("transaction_id", $data)){ $msg = "输入参数不正确"; return false; } //查询订单,判断订单真实性 if(!$this->queryorder($data["transaction_id"])){ $msg = "订单查询失败"; return false; } return true; } } $notify = new paynotifycallback(); $notify->handle(false);
欢迎留言交流指正!
相关推荐:
php实现app唤起支付宝支付代码
php银联在线支付接口的开发实例
实现微信扫码支付php代码分享
以上就是php实现微信小程序支付代码分享的详细内容。
其它类似信息

推荐信息