本文针对的是 微信支付V3
一、准备工作
首先得有一个已认证的服务号。还要去申请开通微信支付(当然如果只是想玩玩可以申请测试公众号)。记录各种 key 和 secret。配置好 JS SDK 的域名、授权域名(OAuth2)、支付测试目录、支付目录,如果是有第三方托管的还要对接服务器。具体自行 搜索。
二、库引入
下载官方的 DEMO ,整合到自己的项目中。我用的是 thinkphp 框架,一般把微信支付 SDK放到Vendor中。(也可以放项目根目录)。
三、微信支付发起
业务逻辑挺简单的,后台引入 SDK和配置文件。统一下单等等。这些 DEMO 里都有。不累赘了。
四、支付那些坑
有三种方式查询支付状态,1、异步通知:每次支付成功后会有通知返回,只有成功处理通知,微信才会停止发送,但不确保一定成功回调。这里的坑就是接受通知的地址一定要直接访问到。举个例子:开发过程中,我尝试把处理通知的文件放在 thinkphp 的控制器中,发现就是收不到通知,后来放到根目录,就行了。我不知道是不是一定要放在根目录,但我知道放在根目录一定可以。但如果开发过程需要带上其他参数,比如我这次的流程是先根据输入查询用户数据,接着微信支付,支付完需要加上之前查询到参数,一起发给充值平台。在一开始我一直想用 SESSION 和数据库存储充值参数,但由于支付完成后是一个异步操作,用 SESSION 会造成 SESSION 无效;用数据库存储会有很大开销或者有数据原子性的问题出现,所以就要好好研究统一下单时的那些参数,你会发现一个 attach 这个参数,先把参数发给微信,微信在支付通知返回时一起带回来,就避免上述的问题。
2、前端 JS 返回:在每次支付时或支付完成后,前端会有一个