使用的是nodejs框架。
根据微信支付api规范返回数据,试过直接返回字符串或者xml文件。
也尝试过网上大家说的数据格式:
官方:ctx.body = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
网友:ctx.body = "<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>"
使用postman调试接口,返回的数据都能与预期的结果一样,但是微信真机测试还是一直回调,实在找不到解决方案了,来这里请求大神的协助。
请提供420或者其它数字开头的的微信支付订单号,或者商户号+商户订单号+时间,后台帮您核实一下
商户号:1604026341
订单号:4200000783202101248030030098
时间:2021-01-24 00:25:43
微信小程序支付业务,支付成功后回调业务的跳坑经历:
1,微信回调业务接口请求方式是post还是get呢?我现在也不确定,因为两种请求方式我都给做上了。
2,回调业务接口应该返回都数据:<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>,应该是字符串还是一个文件呢?有人说一定要是xml文件,我直接返回字符串好像业务也运行都妥妥的。
3,一开始担心签名的校验会很麻烦,随便在网上找一个同学写的方法复制下来,基本上都是能够校验通过的,反而是最简单的环节。
4,微信回调业务接口传过来的xml数据获取和解析,我是通过下面的方式解决的。
ctx.req.on('data', chunk => {
data += chunk;
})
ctx.req.on('end', () => {
xml2js(data, { explicitArray: false }, (err, json) => {
if (!err && json && json.xml.return_code == 'SUCCESS') {
resolve(json.xml) // json.xml 就是微信支付传给我们的数据
} else {
reject('数据异常')
}
});
});
项目写的非常仓促,所以目标就是为了实现业务功能,没有仔细研究有没有更好的方法,听同事说有专业的工具库可以很方便的解决微信支付的业务,我只是在这里抛砖引玉,希望别误导了大家。
• 同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
• 如果在所有通知频率(15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m)后没有收到微信侧回调,商户应调用查询订单接口确认订单状态。