C# 微信支付接口V2版本回调开发实践
关于微信支付接口V2版本
使用微信支付接口V2版本开发微信支付,这里我们以JSAPI为例,其将使用APIv2密钥,该密钥是指调用微信支付API时,要按照指定规则对请求数据进行签名。服务器收到调用请求后会进行签名验证,需用APIv2密钥生成签名,从而界定商户的身份并防止他人恶意篡改数据。签名的计算规则中,使用到的key就是APIv2密钥。
如何配置APIv2密钥
登录微信支付商家平台:
进入平台后,如下图选择帐户中心、API安全,如果没有申请API证书请申请(退款时需要使用证书),下面就是配置APIv2密钥,我们可以选择创建或修改,配置过程需要提供操作员的密码和手机认证短信。
配置Native支付回调链接
进入产品中心、开发配置。
滚动界面至支付配置、Native支付回调链接,如下图所示:
点击添加或修改链接,强烈建议选择 HTTPS://,后面则填写我们处理回调的程序 URL 地址,配置过程需要提供操作员的密码和手机认证短信。
微信返回的数据
V2版本在微信支付成功后,POST返回给回调地址的数据格式为XML,其样例如下:
因此我们需要根据返回的数据进行后续业务处理,包括签名验证。
回调业务实现
获取微信返回的数据
GetPostContent方法用于微信支付成功后,接收微信POST过来的回调数据,示例代码如下:
反馈微信服务器
处理程序的最终结果需要反馈给微信服务器,反馈以下XML数据则表示通知微信服务器处理成功:
除以上信息外的任何反馈,微信服务器则会定时轮询处理。以下代码为反馈程序,该程序指定了PostResult方法:
业务程序处理
设计流程基本思路如下:
1、获取微信POST过来的XML,判断return_code是否为SUCCESS
2、解析XML,根据字段进行签名字串的拼接
3、使用APIv2密钥对签名字串继续拼接并生成大写的MD5字符串,与POST的XML中的sign字段值进行比较以验证
4、验证成功则处理自己的业务程序,并反馈给微信服务器数据
核心代码如下:
小结
1、拼接的字符串格式如下示例:
我们在开发调试中务必遵循关键字及值的拼接顺序
2、示例代码中的 dal类实现了对数据库的操作,是自研发的组件,我们需要根据实际的业务进行自行定义与开发。
3、后台通知反馈微信服务器时,如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止,通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m),但微信不保证通知最终一定能成功。
4、为完善系统功能,建议进一步开发查询订单对帐功能,并成功更新确认订单状态。
以上是本人的一些体会与实践,再次感谢您的阅读,欢迎讨论、指教!
- 点赞
- 收藏
- 关注作者
评论(0)