验证是否本商户返回的正确通知:
// xml转换为map Map<String, String> resultMap = WXPayUtil.xmlToMap(result); // 判断签名是否正确,必须包含sign字段,否则返回false。使用MD5签名。 WXPayUtil.isSignatureValid(resultMap, WXPayConstants.API_KEY);从以上代码可以得知,微信是以流的方式来调用支付结果通知,流中数据格式为xml,所以需要先对流进行解析,然后再将xml转换为map,上面方法已经实现这个过程,有现成的代码可供参考,无需再重新编写代码。
需要注意的是,不论成功或者失败,必须向微信返回对应的返回值,如上方代码中的resSuccessXml、resFailXml,否则会引起重复调用的问题,在代码中我们应该规避风险。
2、对于支付单的处理在收到支付结果后,我们会对系统中的支付单进行状态修改等操作,此时需要注意,如果微信返回失败,接口直接返回失败即可;
如果微信通知付款成功,返回时有一个 out_trade_no 参数,此参数为调用 统一下单接口 时传入微信的支付单号,可根据此参数取得对应的支付单,然后进行修改操作,若操作时出现异常,一定要向微信返回错误的xml代码,用微信的重试机制来二次回调,否则就需要记录通知信息,在本系统自动重试来解决。
在处理微信验证数据时,还需要注意微信最终返回的结果中是否使用了代金券,如果使用了代金券,还需要另行处理,此处先不详细描述,后面章节会详细解释代金券的操作。
结语以上为 微信支付结果通知接口 的接收方式,它是一个微信服务自身控制的异步调用方法,在自身商户系统中需要处理很多异常,如网络抖动和服务异常等问题,所以尽量在商户系统中保存微信结果通知数据和增加失败重试机制,保证数据的正确性。
预告:下一篇文章 查询订单和关闭订单,敬请期待!!!
如果想要提前一览源码的小伙伴,可以先看看我的 github,地址如下: https://github.com/YClimb/wxpay-sdk/blob/master/README.md
加作者私人微信,作者微信号如下 yclimb,标明 微信支付 可拉入微信支付讨论群与小伙伴一起探讨哦,一定要标明 微信支付 哦~
到此本文就结束了,关注公众号查看更多推送!!!