编程学习网 > PHP技术 > laravel > laravel下微信小程序支付API 配置开发
2021
07-21

laravel下微信小程序支付API 配置开发

本文讲给大家分享laravel下微信小程序支付API 配置开发

在业务流程里我们可以看到几个基础的步骤。


  1. 首先要获取到用户的 openid
  2. 调用微信的统一下单 API 来生成订单
  3. 服务器再次进行签名
  4. 接收支付通知
  5. 查询支付结果


我在开发过程中碰到的主要问题就是服务器进行再次签名,这里主要是微信的文档写着比较模糊。导致在这里浪费了比较多的精力。


服务器端代码

首先引入 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教程欢迎关注编程学习网


扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取