商户系统和微信支付系统主要交互:
1、小程序内调用登录接口,获取到用户的openid,api参见公共api
2、商户server调用支付统一下单,api参见公共api
3、商户server调用再次签名,api参见公共api
4、商户server接收支付通知,api参见公共api
5、商户server查询支付结果,api参见公共api
根据文档进行的开发,目前在开发环境中,付款也能走通,成功。
但是以上的第4步,商户server接收支付通知,在付款成功后,商户server接收不到支付的通知,
目前用的是 wx.requestPayment 的回调,进行的支付的确认,为了更高的可靠性,想用
notiry_url做二次确认。
在 第2步,商户server调用支付统一下单的时候,设置了
notify_url: https://1bzmr3y9.qcloud.la/weapp/pay_notify
这个url上,对get和post请求,均做了 console.log() 打印,自己用工具测试,均有打印结果 但是支付完成后,无法收到,微信支付服务器的 回调,请问如何排查此问题
调用wx.requestPayment(OBJECT)发起微信支付,成功返回
{errMsg: "requestPayment:ok"}
附上部分代码
payNotify.js
```js
async function get(ctx, next) {
ctx.state.data = 'this is pay notify get'
console.log('payNotify get ,ctx = ', ctx)
}
async function post(ctx, next) {
ctx.state.data = 'this is pay notify post'
console.log('payNotify post ,ctx = ', ctx)
}
module.exports = {
get,
post
}
```
routes/index.js
```js
// --- 微信支付服务器 回调 商户服务器 ---
router.get('/pay_notify', controllers.payNotify.get)
router.post('/pay_notify', controllers.payNotify.post)
```
统一下单 xml
```xml
<xml>
<appid>wxxxxxxxxxxxxxxxx</appid>
<body>微信支付</body>
<mch_id>133xxxxxxxxxxx</mch_id>
<nonce_str>xxxxxxxxxxxxxxxxxxxxxxxxx</nonce_str>
<notify_url>https://1bzmr3y9.qcloud.la/weapp/pay_notify</notify_url>
<openid>xxxxxxxxxxxxxxxxxxxxxxxx</openid>
<out_trade_no>20180706000033</out_trade_no>
<spbill_create_ip>193.112.197.110</spbill_create_ip>
<time_start>20180706171407</time_start>
<total_fee>1</total_fee>
<trade_type>JSAPI</trade_type>
<sign>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</sign>
</xml>
```
调试截图
get 请求
post 请求
服务器console
老哥们解决了吗? 我后台用的egg.js, 小程序支付也是收不到回调但是,H5支付就可以!
遇到类似问题,另外一项目正常。但新的项目就出现了支付成功,但无回调的情况,http https都尝试过,url也是外网可访问的url ,但回调并没有执行。求解
今天,又调了一次代码,http,https都试了,还是不行。。。
改成http就可以了 我之前用https也不行用http就可以不知道为什么
楼主,这个问题解决了么,,这个意思是小程序支付后主动通知后台?想想好像是可以的,不过没有看到别人用过,会不会有问题
还没解决,目前在赶项目进度,网上大多是php的例子,nodejs的少,用的官方小程序开发环境,不知道是不是开发服务器的关系,这个问题,应该具有普遍性,@官方大神
在https://1bzmr3y9.qcloud.la/weapp/pay_notify这个接口的一开始就写入一些日志,看看有没有东西
如果有,证明微信回调执行过,接下来再做排查
整理了一下截图回复,都放到主贴里去了。
主贴在哪
接口根本没有接到微信的回调。微信这个回调太不可靠的。
我的做法是单独写个 queryOrder 的接口,让客户端支付成功后呼叫,然后服务器去跟微信支付查询此订单的支付结果,再自己更新数据库的订单支付信息。