近期做项目应用到了微信公众号支付功能。这里记录遇到的各种坑,希望对你们有帮助。
一、完整开发及业务流程
①登录微信公众平台进行相关配置(网上找到的一个比较好的说明:https://blog.csdn.net/towtotow/article/details/79718482)
准备工作:appId、appSecret、mch_id(微信支付分配的商户号)、key(商户平台设置的密钥key)
②微信H5页面提交订单到本系统后端
③后端接收到订单信息,进行如下处理
-
微信支付步骤:
-
1、将所有非空参数值的参数按照参数名ASCII码从小到大排序,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
-
2、在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue
-
注:key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
-
3、将所有提交的参数(包括sign)封装到实体,并转换成xml,调用微信统一下单接口请求订单,接收返回值
-
4、将返回的xml数据解析成map
-
5、判断return_code是否为成功
-
6、生成JSAPI页面调用的支付参数并签名,返回给前端页面
-
7、前端调用JSAPI接口,进行支付输密码操作,提交成功后,后台等待微信支付通知回调
-
8、接收到通知,判断支付结果是否成功,修改订单表状态,并插入微信支付表,支付结束
④前端接收到后台返回的数据串,调用微信jdk接口,WeixinJSBridge.getBrandWCPayRequest,将相关数据传入,即可调起微信支付。
⑤支付成功后,微信会调用回调接口,接口内进行验签,判断状态是否成功,且金额与系统金额是否相同,通过验证后,进行业务操作,支付流程结束。
二、详细步骤说明
1.设置支付目录
请确保实际支付时的请求目录与后台配置的目录一致,否则将无法成功唤起微信支付。
在微信商户平台(pay.weixin.qq.com)设置您的公众号支付支付目录,设置路径:商户平台-->产品中心-->开发配置,如图7.7所示。公众号支付在请求支付的时候会校验请求来源是否有在商户平台做了配置,所以必须确保支付目录已经正确的被配置,否则将验证失败,请求支付不成功。
2.设置授权域名
开发公众号支付时,在统一下单接口中要求必传用户openid,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败。具体界面如图7.8所示:
三、业务流程时序图
后续会更新代码部分详解,以及过程中需要注意到的问题,敬请期待!!