游戏技术文章

浅析微信支付:支付结果通知

时间:2021-3-8 7:15:29  作者:棋牌资源网  来源:棋牌资源网 www.pahuai.com  查看:6457  评论:0
内容摘要:前面一章已经讲了如何调用统一下单接口和调起微信支付窗口,在调用下单接口时,我们会传入 异步接收微信支付结果通知的回调地址,顾名思义这个地址作用就是用来接收支付结果通知,当用户在前端支付成功后,微信服务器会自动调用此地址,然后商户再进行处理。1、支付结果通知以下为接口官方...
前面一章已经讲了如何调用统一下单接口和调起微信支付窗口,在调用下单接口时,我们会传入 异步接收微信支付结果通知的回调地址,顾名思义这个地址作用就是用来接收支付结果通知,当用户在前端支付成功后,微信服务器会自动调用此地址,然后商户再进行处理。

1、支付结果通知

以下为接口官方解释:


  1. 支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

  2.  

  3. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

  4.  

  5. 注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。

  6. 推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

  7.  

  8. 特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

  9. 技术人员可登进微信商户后台扫描加入接口报警群。

支付结果通知接口文档地址:


  1. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7&index=8

需要注意的事项有以下几点:


  1. 1. 该链接是通过【统一下单API】中提交的参数notify_url设置,如果链接无法访问,商户将无法接收到微信通知。

  2. 2. 通知url必须为直接可访问的url,不能携带参数,也就是必须使用外网接口地址,不能使用本地调试地址

  3. 3. 商户需要接收处理,并返回应答。如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。

  4. 4. 通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒

  5. 5. 同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。

  6. 6. 特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

PS:推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

关于具体的签名和接收通知代码

验证是否本商户返回的正确通知:


  1. // xml转换为map

  2. Map<String, String> resultMap = WXPayUtil.xmlToMap(result);

  3.  

  4. // 判断签名是否正确,必须包含sign字段,否则返回false。使用MD5签名。

  5. WXPayUtil.isSignatureValid(resultMap, WXPayConstants.API_KEY);

从以上代码可以得知,微信是以流的方式来调用支付结果通知,流中数据格式为xml,所以需要先对流进行解析,然后再将xml转换为map,上面方法已经实现这个过程,有现成的代码可供参考,无需再重新编写代码。

需要注意的是,不论成功或者失败,必须向微信返回对应的返回值,如上方代码中的 resSuccessXml、 resFailXml,否则会引起重复调用的问题,在代码中我们应该规避风险。

2、对于支付单的处理

在收到支付结果后,我们会对系统中的支付单进行状态修改等操作,此时需要注意,如果微信返回失败,接口直接返回失败即可;
 

如果微信通知付款成功,返回时有一个 out_trade_no 参数,此参数为调用 统一下单接口 时传入微信的支付单号,可根据此参数取得对应的支付单,然后进行修改操作,若操作时出现异常,一定要向微信返回错误的xml代码,用微信的重试机制来二次回调,否则就需要记录通知信息,在本系统自动重试来解决。

在处理微信验证数据时,还需要注意微信最终返回的结果中是否使用了代金券,如果使用了代金券,还需要另行处理,此处先不详细描述,后面章节会详细解释代金券的操作。

结语

以上为 微信支付结果通知接口 的接收方式,它是一个微信服务自身控制的异步调用方法,在自身商户系统中需要处理很多异常,如网络抖动和服务异常等问题,所以尽量在商户系统中保存微信结果通知数据和增加失败重试机制,保证数据的正确性。

 

标签:微信支付结果通知 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2024 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved