微信支付那些特別的坑
阿新 • • 發佈:2019-02-01
場景
最近新的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;
}
其他博文普遍提到的微信支付的坑
- APPID是否和微信開放平臺申請的一致。
- 後臺設定的簽名是商戶平臺設定的金鑰。
- WXPayEntryActivity.java和wxapi包拷貝到專案的資料夾的位置是否正確。
- 在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 {
//呼叫微信支付
}