1. 程式人生 > >微信支付那些特別的坑

微信支付那些特別的坑

場景

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