1. 程式人生 > >Android整合支付——微信支付,能調啟微信為何調啟不了微信支付問題

Android整合支付——微信支付,能調啟微信為何調啟不了微信支付問題

整合微信支付的時候會遇到很多問題,此文章只介紹處理【能調啟微信為何調啟不了微信支付】問題。

1、微信能調啟來,說明你的整合已經成功。但還是注意商戶的微信id是否統一,因為在調啟支付介面的時候需要註冊微信id。

2、調啟不了微信支付/調啟微信支付閃退並跳轉到回撥頁進行提示失敗問題,這個問題的多半是簽名的問題!!!

簽名問題的由來:

這個簽名問題出在哪裡,需要去定位。因為官方的開發文件並沒有說的那麼清楚(或許我的理解能力差),導致了簽名錯誤的問題。通過官方文件的APP端開發步驟調啟支付API這兩處來說明調啟App支付的引數和簽名,我個人讀了很久,沒有明白意思,如圖劃線部分

 當我看了簽名生成演算法的時候(一個生成簽名的規則),才有點明白了。下圖畫紅線部分

但是現在最大的疑惑,我該怎麼用這個簽名

 看到這裡基本上也就大概明白了,但是怎麼去使用,看個人的理解能力和對官方文件的閱讀能力,本人表示能力差點,還是沒讀懂。不過我在瀏覽的一些前車之鑑的部落格中找到了方法。

實現步驟:

  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
                + "&timestamp=" + 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部落格