集成微信支付的時候會遇到很多問題,此文章只介紹處理【能調啓微信爲何調啓不了微信支付】問題。
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微信支付集成流程及其常見錯誤》·····························葫蘆娃CSDN博客
《微信支付集成簡介》··························································陸羽_ CSDN博客
《Android集成支付----微信支付總結與封裝》····································chaohx簡書