简书 即墨灯火,转载请注明原创出处,谢谢
在公众号网页中加入微信支付,首先需要有一个通过微信认证的服务号
主要包括以下环节
- 申请支付
- 商户平台
- 后端加入
统一下单
- 前端加入
调起支付
- 支付结果通知
申请支付
这个环节很简单。将会需要你选择你的身份、你的支付场景。对资格的审核并不严格。提交申请后,数日即会有相应,商户平台账户、密码以及相关事宜均会通过这里填写的邮箱送达。
商户平台
根据上一个环节中的邮件,可以顺利登入商户平台、绑定微信。此后只能使用微信扫码登陆,不能再使用账号密码登陆。
在这个环节中,需要进入账户中心-账户设置-API安全,进行API的设置。这个API将用于后续的签名。进行API设置前需要先行安装安全证书,遵循提示即可完成。
后端开发
在公众号中发起支付前,有一个预下单的环节。必须要进行预下单,取回其中prepay_id参数用于后续的在公众号内H5调起支付
对应的接口参见:统一下单
比较挫的是,参数仍然使用陈旧的XML格式。可以考虑使用dom4j,或者自行解析拼装。关于如何获取用户真实IP,可以从前端获取,作为参数传递到后端,如果希望后端自行获取,可以参考我的博客在Spring中获取客户端IP.
只需要遵循上述文档,完成这个环节同样也比较容易
前端开发
在完成预下单后,后端将取得prepay_id值。通过发起一个微信支付请求来发起支付请求。
请不要参照微信商户平台中的微信内H5调起支付
一节。其文档没有更新。
需要注意的是,发起微信支付请求的签名,上述文档指出
最后参与签名的参数有appId, timeStamp, nonceStr, package, signType
但是,完整的签名还需要加入key={api}进行签名。否则将报签名错误。
至此,即可完成支付
支付结果通知
待补充。
附1. 关于签名
SPA应用,需要注意微信中安卓与iOS的当前网页概念不同,安卓端为当前页面路径,而iOS为进入这个SPA的路径
附2. wx.config
wx.config作为前置条件。但是其时间戳、随机字符串无需与微信支付的时间戳、随机字符串相同
附3. 支付结果
官方文档指出,必须要以支付结果通知为准。但是,前端的支付结果为SUCCESS后,即可视为订单已支付
附4. 关于JS SDK
这里认为读者熟悉微信网页开发相关知识。可以参考微信网页开发