Android集成支付——微信支付,能调启微信为何调启不了微信支付问题

集成微信支付的时候会遇到很多问题,此文章只介绍处理【能调启微信为何调启不了微信支付】问题。

1、微信能调启来,说明你的集成已经成功。但还是注意商户的微信id是否统一,因为在调启支付接口的时候需要注册微信id。

2、调启不了微信支付/调启微信支付闪退并跳转到回调页进行提示失败问题,这个问题的多半是签名的问题!!!

签名问题的由来:

这个签名问题出在哪里,需要去定位。因为官方的开发文档并没有说的那么清楚(或许我的理解能力差),导致了签名错误的问题。通过官方文档的APP端开发步骤和调启支付API这两处来说明调启App支付的参数和签名,我个人读了很久,没有明白意思,如图划线部分

Android集成支付——微信支付,能调启微信为何调启不了微信支付问题_第1张图片

Android集成支付——微信支付,能调启微信为何调启不了微信支付问题_第2张图片

 当我看了签名生成算法的时候(一个生成签名的规则),才有点明白了。下图画红线部分

Android集成支付——微信支付,能调启微信为何调启不了微信支付问题_第3张图片

但是现在最大的疑惑,我该怎么用这个签名

 看到这里基本上也就大概明白了,但是怎么去使用,看个人的理解能力和对官方文档的阅读能力,本人表示能力差点,还是没读懂。不过我在浏览的一些前车之鉴的博客中找到了方法。

实现步骤:

  1. 首先调用IWXMsg.registerApp将应用注册到微信;
  2. 获取后台传送过来的预订单信息;
  3. 根据信息生成预支付订单签名;
  4. 进行调启微信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里的回调页,配置好就可以了。

注意事项:

  1. 首先需要在微信开放平台申请开发应用,微信开放平台会生成APP的唯一标识APPID。此处需要填写应用包名和应用签名。此处这个应用签名需要使用微信平台提供的app获取。
  2. 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
  3. 调启微信支付API的签名,是根据微信返回的预订单的数据,按照ASCII顺序从小到大排序拼接,最后加上商户的key(密钥)制作而成的。

 

参考文献:

《微信支付官方开发文档》····································································微信

《Android微信支付集成流程及其常见错误》·····························葫芦娃CSDN博客

《微信支付集成简介》··························································陆羽_ CSDN博客

《Android集成支付----微信支付总结与封装》····································chaohx简书

 

你可能感兴趣的:(Android,微信支付,Android集成,调启微信调不启微信支付)