开发日记 —— 快速对接微信支付
目录
最近准备开拓国内的安卓市场,由于安卓厂商不同于苹果,每个厂商都有自己的一套钱包体系同时也为被广大用户所熟知,所以对接微信支付就成为了最通用的选择。
对接微信支付的条件比较苛刻,其中最大的坎是需要企业资质,包括现在很多广告商也是。
我见过有些开发者由于没有企业资质,使用支付宝或微信转账。在客户端做一个兑换码的窗口。用户转账后会获得兑换码,使用兑换码在APP中兑换商品。虽然体验不好但确实也解决了这个问题。
说下具体需要的条件。进入微信开放平台(https://open.weixin.qq.com/),在账号中心填写企业相关信息并进行认证。另外还需要开通 微信开发者资质 认证,这两个认证都需要时间进行审核,建议提前完成。
之后我们在管理中心创建一个与你的APP对应的移动应用,这里需要填写应用的官网地址,如果没有开发APP官网的需要开发一个,Docusaurus 是不错的选择。完成创建后同样需要等待审核。
接下来在移动应用的能力专区中开启微信支付,需要注册一个微信支付的商户号通用需要审核时间,对接微信支付的代码会用到此商户号。
完成上述的准备工作后就可以开始对接微信支付了,先看下微信支付的流程图及接口文档:
微信支付APP接入官方文档:
- https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_app.shtml
- https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_0.shtml
这里关键是设置APIv3密钥及申请API证书,有了这些资源就可以进行对接了,我使用的是Flutter,所以这里只介绍Flutter的对接方式。
我在客户端使用 fluwx 插件,使用此插件可以非常方便的接入微信支付。 服务端我是用golang写的 go-pay 库。
地址如下:
其实流程比较简单,但是这两个库的文档没有进行描述,可能因为微信支付是挺常规的功能吧。但是对于新手来说,还是需要花点时间。 流程可以参考下图:
简单说,就是先通过服务端进行预下单 通过 你的商户配置 以及 go-pay 按照加密规则 生成一些参数返回客户端,然后客户端使用这些参数 调用 fluwx 的方法,可以让APP跳转到微信支付页进行付款。
之后通过服务端的支付通知接口回调,进行订单支付验证。最后客户端付款成功后,通过接口向服务端获取商品数据。
APP下单API: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml
支付通知API: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_5.shtml
微信付款和支付接口调用是异步的,所以我们需要做到接口加密,否则受到中间人攻击劫持就损害利益了。 我采用对请求参数返回结果进行 AES 加密,这样数据即使被劫持也无法进行修改。
总结 #
本文主要讨论了微信支付的整体流程,有些细节并没有进行描述。比如:下单的时需要传用户标识商品标识,周期性商品如何校验等等。这些同样也比较重要,需要开发者根据具体情况进行开发与配置。