微信公众号中使用微信支付
在项目中需要在微信公众号H5中嵌入微信支付,需要先申请开通微信支付,注册商户信息。关键性信息需要如下:
- 已经备案域名
- 微信公众号开发id(appid)
- 微信公众号开发密钥(secret)
- 微信商户号(mch_id)
- 微信商户支付密钥(apy.key)
1. 微信公众号平台配置
1.1 在微信支付中配置授权目录
该授权目录指,在该目录下才可以调用起微信支付。
调用支付页面为 http://www.xxx.com/wxpay/js_api_call 那么配置为 http://www.xxx.com/wxpay/
调用支付页面为 http://www.xxx.com/recharge/index?package=1 那么配置为 http://www.xxx.com/recharge/
1.2 配置授权域名
在设置 -> 公众号设置 -> 功能设置中,配置js接口安全域名,网页授权域名,配置这里域名时,需要下载一个txt文件到域名所在服务器根目录下。详细请参考页面详细提示。
2. 开发步骤
2.1 在支付前提前获取用户标示openid
参考文档 获取openid 每个用户对于每个公众号是唯一的。
2.2 用户支付
在用户支付页面,用户点击支付后,请求后台服务器,由后台服务器访问微信统一下单接口
参考文档 统一下单 ,需要注意签名生成算法,避免调用失败。返回appId、timeStamp、nonceStr、package、signType、paySign信息,用于下一步操作。
注:有个商户订单号out_trade_no,在调用统一下单接口时,微信接口成功,但后续用户支付失败,或者用户取消未支付,单用户重新进入该订单支付时,使用同一订单号调用统一接口会失败。解决办法可以为在用户订单号后,加随机数,保存数据库,后调用统一下单接口,待支付成功后还原。或者在数据库添加一个新字段。
2.3 H5页面通过js调用微信支付
在调用微信统一下单接口成功后,通过微信浏览器中,内置WeixinJSBridge对象调用微信支付。参考H5调用支付。这时调用支付需要参数使用之前调用统一下单接口返回的参数。
2.4 后续操作
用户退款,查询等操作,可以直接参考微信API接口。依据业务使用相关接口API接口
3. 本地调试
因为微信支付需要指定域名,在本地调试十分不便。个人开发使用到的工具有:
- 微信开发工具,用于调试微信公众号h5页面
- 修改本地host为配置的支付域名为本地IP
- 因为微信支付不支持端口,开启nginx配置80端口转发开发环境端口
- H5页面js调用,使用手机与电脑在同一局域网,PC端开启fiddler,配置手机代理为PC。调用支付直接转跳到PC调试