微信支付那些特別的坑

場景

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章