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簽名信息與微信平臺註冊時不同,將簽名文件重新生成一下。
- 後臺獲取訂單信息後再次簽名參數時嚴格區分參數大小寫問題(開發中後臺返回沒有按微信平臺要求,導致我花了大半天時間查詢問題所在,感受如何你們懂得。。。。。。)