微信支付那些特别的坑

场景

最近新的App要集成微信支付,因为知道微信支付的坑比较 多,虽然之前的App集成过微信支付,但是挪过照搬过来的时候还是小心翼翼的,可结果还是不尽如人意啊,偏偏遇到了ios提示签名错误,Android 调用微信白屏并且errCode=-1的结果,根据微信官方对该code的解释,我们Android、ios两端和后台来来回回核对了好几遍签名APPID和后台订单参数的处理,仍然没有任何的头绪,经过一天多的各种查找测试,后台同事一声大骂,发现了拷贝的微信官方java文件WXPAY.java里关于sign加密类型处理的判断才是根源所在。,代码如下:
if (useSandbox) {

    this.signType = SignType.MD5; 

} else {

    //第一次调用统一下单接口虽然用HMACSHA256也可以成功,但是二次签名返给手机端后,手机端调微信会报签名错误
    this.signType = SignType.HMACSHA256;

}
其他博文普遍提到的微信支付的坑
  1. APPID是否和微信开放平台申请的一致。
  2. 后台设置的签名是商户平台设置的密钥。
  3. WXPayEntryActivity.java和wxapi包拷贝到项目的文件夹的位置是否正确。
  4. 在Manifest中是否声明了WXPayEntryActivity类,如代码:
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

客户端调用微信的判断

关于客户端调用微信的方法,微信官方文档也没有说明,大多数的博文也是一笔带过,如下代码:
final String APPID = "wxd930ea5d5a258f4f";
IWXAPI msgApi = WXAPIFactory.createWXAPI(context, APPID, false);
msgApi.registerApp(APPID);

if (!msgApi.isWXAppInstalled()) {

    Toast.makeText(this, "未安装微信",Toast.LENGTH_SHORT).show();

} else if (!msgApi.isWXAppSupportAPI()) {

    Toast.makeText(this, "当前微信版本不支持支付",Toast.LENGTH_SHORT).show();

} else {

    //调用微信支付
}
在测试支付的时候发现,在不是最新版本的微信上,虽然API的isWXAppSupportAPI()判断提示当前微信版本不支持支付,但是实际却可以调用起来微信进行支付,因此我只采用了isWXAppInstalled()方法判断,如果安装了则直接调用微信进行支付。
在IOS上,多数厂商的App采用的是先调用API的openWXApp()方法,然后调用微信支付。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值