微信支付那些特别的坑

场景

最近新的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()方法,然后调用微信支付。

猜你喜欢

转载自blog.csdn.net/nsacer/article/details/78014811