集成微信支付的时候会遇到很多问题,此文章只介绍处理【能调启微信为何调启不了微信支付】问题。
1、微信能调启来,说明你的集成已经成功。但还是注意商户的微信id是否统一,因为在调启支付接口的时候需要注册微信id。
2、调启不了微信支付/调启微信支付闪退并跳转到回调页进行提示失败问题,这个问题的多半是签名的问题!!!
签名问题的由来:
这个签名问题出在哪里,需要去定位。因为官方的开发文档并没有说的那么清楚(或许我的理解能力差),导致了签名错误的问题。通过官方文档的APP端开发步骤和调启支付API这两处来说明调启App支付的参数和签名,我个人读了很久,没有明白意思,如图划线部分
当我看了签名生成算法的时候(一个生成签名的规则),才有点明白了。下图画红线部分
但是现在最大的疑惑,我该怎么用这个签名
看到这里基本上也就大概明白了,但是怎么去使用,看个人的理解能力和对官方文档的阅读能力,本人表示能力差点,还是没读懂。不过我在浏览的一些前车之鉴的博客中找到了方法。
实现步骤:
- 首先调用IWXMsg.registerApp将应用注册到微信;
- 获取后台传送过来的预订单信息;
- 根据信息生成预支付订单签名;
- 进行调启微信App支付
注意:统一下订单后,微信返回数据中的签名,并不是调启微信支付的签名!!!
重点:生成调启微信支付API所使用的签名,生成方式如下(我个人使用的硬拼接方式)
// 签名生成
// 当前顺序为微信提供的顺序(参数以ASCII码排序),最后添加商户的key(密钥)
// 生成签名后,按照调启微信App支付参数一一对应,sign为按微信顺序+key生成的新签名
// 进行调启支付 api.sendReq(req);
String signStr = "appid=" + appid
+ "&noncestr=" + nonceStr
+ "&package=Sign=WXPay"
+ "&partnerid=" + partnerId
+ "&prepayid=" + prepayId
+ "×tamp=" + timeStamp
+ "&key=" + "YUAN2018YUAN2018YUAN2018YUAN2018";
//进行MD5加密,并转为大写
String packageSign = MD5.getMessageDigest(signStr.getBytes());
LogUtil.i(TAG, "signStr = " + signStr);
LogUtil.i(TAG, "packageSign = " + packageSign.toUpperCase());
调启微信支付API的签名,推荐服务生成的签名(生成签名这一步,用到了商户的key(密钥),所以,将生成新签名的这一步让后台实现)。
PayReq req = new PayReq();
req.appId = appid;
req.partnerId = partnerId;
req.prepayId = prepayId;
req.nonceStr = nonceStr;
req.timeStamp = timeStamp;
req.packageValue = packageValue;
req.sign = sign; // 服务生成的签名(生成签名这一步,用到了商户的私钥,所以,将生成新签名的这一步让后台实现)
Toast.makeText(PayActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
根据官方给的demo来调启微信支付。我只用了demo里的回调页,配置好就可以了。
注意事项:
- 首先需要在微信开放平台申请开发应用,微信开放平台会生成APP的唯一标识APPID。此处需要填写应用包名和应用签名。此处这个应用签名需要使用微信平台提供的app获取。
- 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
- 调启微信支付API的签名,是根据微信返回的预订单的数据,按照ASCII顺序从小到大排序拼接,最后加上商户的key(密钥)制作而成的。
参考文献:
《微信支付官方开发文档》····································································微信
《Android微信支付集成流程及其常见错误》·····························葫芦娃优快云博客
《微信支付集成简介》··························································陆羽_ 优快云博客
《Android集成支付----微信支付总结与封装》····································chaohx简书