相信进行过微信公众号支付的同学对于微信小程序支付的开发上手很快,如下是微信官方对三种接入方式的对比
注意坑一:发起支付必须是HTTPS
流程
然后我们整理下发起订单的思路。如下是官方给的流程图,发起支付已经做了标注。
由此可见,服务器端发起订单需要以下五小步,我们来各个击破。
第一步:获取openid
第二步:生成商户订单
第三步:调用支付统一下单API
第四步:获取预支付会话标识 prepayId
第五步:将组合数据签名并返回
第一步:获取openId(跳过)
获取openId不做赘述,自行百度。
第二步:生成商户订单
这里由我们系统内部生成。官方API如下(官方建议用当前系统时间加随机序列来生成订单号):
生成商户订单号代码如下(仅供参考)
public static String getRandomOrderId() {
Random random = new Random(System.currentTimeMillis());
int value = random.nextInt();
while (value < 0) {
value = random.nextInt();
}
return value + "";
}
第三步:调用统一下单支付API
下面进行第三步调用支付统一下单API(将必传参数整理成xml格式,发送给下单url):
注意坑二:参数名按照字典序排序、参数值为空不参与签名、区分大小写、sign参数不参与签名!
注意坑三:在结尾拼接要key、进行签名运算后的sign要转化成大写!详见官方“签名算法说明”
官方API说明:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
签名算法说明:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
整理的格式如下,然后发送到下单url。代码如下
<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>支付测试</attach>
<body>JSAPI支付测试</body>
<mch_id>10000100</mch_id>