Android第三方支付——微信支付

Android第三方支付——微信支付

目錄

之前一直說要堅持寫一個技術博客,但是人都有惰性,說是那麼說了,就是不見行動。今天終於覺悟了,痛改前非,於是產生了這篇文章。

1.微信平臺註冊應用

詳細見開發文檔

應用包名:是在APP項目配置文件AndroidManifest.xml中聲明的package值。
應用簽名:根據項目的應用包名和編譯使用的keystore,可由簽名工具生成一個32位的md5串,在調試的手機上安裝簽名工具後,運行可生成應用簽名串。簽名工具下載地址,註冊應用必須使用應用包名和正式應用簽名,其正確性必須由開發者保證。

2.支付流程圖

支付流程圖

3.註冊appId

APP引入微信JAR包,調用API前,需要先向微信註冊自己APP的appid,代碼如下:

IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 將該app註冊到微信
msgApi.registerApp("自己應用的appId");

4.調起支付

後臺生成支付訂單,先調用統一下單API生成預付單,獲取到prepay_id後將參數再次簽名傳輸給APP發起支付。以下是調起微信支付的關鍵代碼:

IWXAPI api;
if(!api.isWXAppInstalled()) {
    Toast.makeText(context,"請安裝微信客戶端",Toast.LENGTH_SHORT).show();
}
public void pay() {
    IWXAPI api;
    // 去後臺請求訂單信息payInfo 
    WXPayInfo payInfo = new WXPayInfo();
    PayReq request = new PayReq();
    request.appId = payInfo.getAppId();
    request.partnerId = payInfo.getPartnerId();
    request.prepayId= payInfo.getPartnerId();
    request.packageValue = payInfo.getPackageValue();
    request.nonceStr= payInfo.getNonceStr();
    request.timeStamp= payInfo.getTimeStamp();
    request.sign= payInfo.getSign();
    api.sendReq(req);
}

5.支付結果回調

publicvoidonResp(BaseRespresp){
    if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
        Log.d(TAG,"onPayFinish,errCode="+resp.errCode); 
        swich(resp.errCode) {
            case 0:
                //支付成功
                break;
            case -1:
                //支付失敗
                break;
            case -2:
                //支付取消
                break;
        }           
    }
}

微信支付回調WXPayEntryActivity類必須寫在項目名下一級目錄wxapi包中,其中支付回調-1(支付失敗)結果可能出現的原因如下:

  • 簽名錯誤
  • 未註冊appid到微信平臺
  • 項目中設置的appid錯誤
  • 註冊的appid與設置的appid不同

6.注意事項

  • 支付失敗大多數是簽名錯誤導致。
  • 回調的WXPayEntryActivity的位置未寫正確,或者未註冊該activity。
  • 如果微信支付是在library中實現的,WXPayEntryActivity的位置還必須是項目名一級目錄下wxapi包中,否則回調不到。
  • 打包的apk簽名信息與微信平臺註冊時不同,將簽名文件重新生成一下。
  • 後臺獲取訂單信息後再次簽名參數時嚴格區分參數大小寫問題(開發中後臺返回沒有按微信平臺要求,導致我花了大半天時間查詢問題所在,感受如何你們懂得。。。。。。)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章