微信支付JSAPI支付成功后res未返回或无法判断支付成功的解决办法

99次阅读

共计 3060 个字符,预计需要花费 8 分钟才能阅读完成。

首先,我们要明确 JSAPI 支付成功后,res 到底返回了什么。

通过将 res 写后端日志,可以看到如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[ info ] [ HEADER ] array (
  ‘cookie’ => ‘PHPSESSID=vegi7372n5hr1h7r8trdtm90u9’,
  ‘accept-language’ => ‘zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7’,
  ‘accept-encoding’ => ‘gzip, deflate’,
  ‘referer’ => ‘https://school.lanluo.cn/index/user/order/id/13’,
  ‘sec-fetch-dest’ => ’empty’,
  ‘sec-fetch-mode’ => ‘cors’,
  ‘sec-fetch-site’ => ‘same-origin’,
  ‘origin’ => ‘https://school.lanluo.cn’,
  ‘content-type’ => ‘application/x-www-form-urlencoded; charset=UTF-8’,
  ‘user-agent’ => ‘Mozilla/5.0 (Linux; Android 12; M2011K2C Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4313 MMWEBSDK/20220805 Mobile Safari/537.36 MMWEBID/576 MicroMessenger/8.0.27.2220(0x28001B3F) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64’,
  ‘x-requested-with’ => ‘XMLHttpRequest’,
  ‘accept’ => ‘application/json, text/javascript, */*; q=0.01’,
  ‘content-length’ => ’23’,
  ‘host’ => ‘school.lanluo.cn’,
)
[ info ] [ PARAM ] array (
  ‘errMsg’ => ‘chooseWXPay:ok’,
)
[ info ] [ RUN ] appindexcontrollerUser->order_res[ /www/wwwroot/school.lanluo.cn/application/index/controller/User.php ]
[ notice ] array (
  ‘errMsg’ => ‘chooseWXPay:ok’,
)

在最后,明确了 res 的内容是:’errMsg’ => ‘chooseWXPay:ok’

官方文档

在公众号的说明是这样的:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58

1
2
3
4
5
6
7
8
9
10
wx.chooseWXPay({
  timestamp: 0, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符
  nonceStr: , // 支付签名随机串,不长于 32 位
  package: , // 统一支付接口返回的 prepay_id 参数值,提交格式如:prepay_id=***)
  signType: , // 微信支付 V3 的传入 RSA , 微信支付 V2 的传入格式与 V2 统一下单的签名格式保持一致
  paySign: , // 支付签名
  success: function (res) {
    // 支付成功后的回调函数
  }
});

写的很简单,只是告知了支付发起成功后会有 res 返回,但是没有说这个返回是什么,所以我们要看 微信支付 的文档。

回到最开始,只需要对返回内容进行判断即可。

这里是比较坑的地方,还请注意,返回判断不成功通常有两个

正文完
 0