本文讲给大家分享laravel下微信小程序支付API 配置开发
在业务流程里我们可以看到几个基础的步骤。
- 首先要获取到用户的 openid
- 调用微信的统一下单 API 来生成订单
- 服务器再次进行签名
- 接收支付通知
- 查询支付结果
我在开发过程中碰到的主要问题就是服务器进行再次签名,这里主要是微信的文档写着比较模糊。导致在这里浪费了比较多的精力。
服务器端代码
首先引入 composer 包。当然引入 overtrue/wechat 也是可以的。基础的配置文件就不说了。按照说明配置好就可以了。
获取小程序用户的 openid
在小程序中调用 wx.login() 会返回一个 code,将 code 参数传给我们的 API 中进行处理就可以得到 openid 了。 示例代码如下
$mini = \EasyWeChat::miniProgram(); $result = $mini->auth->session($code); // $code 为wx.login里的code // 如果code正确的话,那么此时$result 里就会包含openid, session_key等信息。 // 此时可以将openid存储到自己需要的数据库中 // $result['openid'] = 'your-openid';
统一下单 && 二次签名
通过使用安正超大大封装的包,我们可以很方便的进行统一下单,不过与 easywechat 里的文档示例不太一样的是我们要传的参数要多一些。以及配置文件里的 'notify_url' 一定要配置正确。 具体代码如下
use function EasyWeChat\Kernel\Support\generate_sign; $payment = \EasyWeChat::payment(); // 微信支付 $result = $payment->order->unify([ 'body' => '你自己想写的名称', 'out_trade_no' => '你自己定义的订单号', 'trade_type' => 'JSAPI', // 必须为JSAPI 'openid' => '在上一步中获取到的openid', // 这里的openid为付款人的openid 'total_fee' => 1, // 总价 ]); // 如果成功生成统一下单的订单,那么进行二次签名 if ($result['return_code'] === 'SUCCESS') { // 二次签名的参数必须与下面相同 $params = [ 'appId' => '你的小程序的appid', 'timeStamp' => time(), 'nonceStr' => $result['nonce_str'], 'package' => 'prepay_id=' . $result['prepay_id'], 'signType' => 'MD5', ]; // config('wechat.payment.default.key')为商户的key $params['paySign'] = generate_sign($params, config('wechat.payment.default.key')); return $params; } else { return $result; } // 如果成功二次签名,返回的结果与下面的类似 // $params = { // "appId": "wxedsadwvsager343df5", // "timeStamp": 1520515252, // "nonceStr": "wGs9JOpqKQcJYf7m", // "package": "prepay_id=wx201803cdsqa2ae1e202110689669353", // "signType": "MD5", // "paySign": "398729A0461F5A825DA169CA29721038" // }
在小程序支付文档中可能对二次签名加密说了很多的步骤,不过我在翻阅了 overtrue/wechat 包之后,发现已经将二次签名方法封装了,所以直接引入
use function EasyWeChat\Kernel\Support\generate_sign; 后进行调用即可。
最后付款 API 返回上面的 $params 供小程序端调用即可,当然,还有回调里的 notify_url 需要进行处理,可以参照 这里 进行处理。
小程序端代码实现
// 首先使用wx.request来调用上面的Laravel API 返回 data。 // 然后将获取到的参数传入到付款API里面就可以了。 // 如果一切顺利的话,微信小程序支付就成功的跑通了? wepy.requestPayment({ timeStamp: data.timeStamp.toString(), nonceStr: data.nonceStr, package: data.package, signType: data.signType, paySign: data.paySign, success: function(res) { console.log('付款成功') console.log(res) }, fail: function(res) { console.log('付款失败') console.log(res) } })以上就是“laravel下微信小程序支付API 配置开发”的详细内容,想要获取更多laravel教程欢迎关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/8329/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料