微信公众号支付v3总结
时间: 2016年8月11日
说明: 文档主要描述微信公众号支付开发过程中处理流程和一些遇到的问题。
1 准备工作
- 微信公众号申请,类型选择服务号或企业号,订阅号不支持微信支付功能
- 微信商户帐号申请(需要审核)
- 选择对应版本的 SDK 文件准备开发
2 支付原理
3 通知(同步、异步)
3.1 同步通知
商户根据微信支付后返回的结果来处理自己的业务。
3.2 异步通知
微信支付完成后,会通过在下单时候设置的 notify_url 通知商户支付结果,商户通过返回的结果来处理内部订单然后给微信返回处理结果,如果返回成功则说明商户校验信息正常通知微信不需要再次通知,否则微信会在一定时间内重复发通知给商户。通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒。
4 开发流程
官方文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
4.1 统一下单 unifiedorder
4.1.1 方法中需要参数都填写,注意参数名大小写和长度
4.1.2 统一下单时签名问题
4.1.3 微信用户 openid 获取
4.1.4 加强下单时参数验证
|
|
4.2 微信支付JSAPI
4.2.1 统一下单成功后返回数据
4.2.2 签名验证
|
|
4.3 微信公众号内置支付功能
|
|
将 微信支付 JSAPI 生成的数据作为微信内置函数 WeixinJSBridge.invoke() 发起 getBrandWCPayRequest 请求时的参数,如果参数正确当点击支付时候可以在微信公众号中调用微信客户端支付功能。
4.4 同步通知流程处理
商户根据微信内置函数调用支付结果来处理业务,例如:当支付返回 get_brand_wcpay_request:ok
说明支付成功,get_brand_wcpay_request:fail
或 get_brand_wcpay_request:cancle
说明支付失败,但是 返回数据不一定可靠。
4.5 异步通知处理
微信会通过统一下单时设置的 notify_url 向商户发送支付结果通知,商户应该根据返回的数据对订单信息和商户信息等重要信息验证
避免订单错误导致资金错误,然后更新内部订单状态,最后将处理后的结果返回给微信,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
|
|
5 常见问题
5.1 统一下单时签名问题
5.2 支付时签名验证失败
5.3 异步通知未响应
Q&A: 签名错误
|
|
Q&A: 异步通知未响应
|
|
6 总结
|
|