Android微信支付接入集成步驟

這兩天,公司APP需要做商城,所以需要接入支付功能。看了一下微信的官方文檔,大概知道了流程。首先由服務端集成。集成完之後,客戶端這邊請求接口,會返回相應的字段,然後客戶端拿着這些字段調起微信支付,完成支付。
首先添加微信的依賴
compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'
然後,把demo裏的payactivity拷貝過來。下面解釋一下payactivity裏的代碼。

//把APP註冊到微信
api= WXAPIFactory.createWXAPI(this,"APPID");
api.registerApp("APPID");
private voidpay() {
String url ="your servlet";
Button payBtn = (Button) findViewById(R.id.appay_btn);
payBtn.setEnabled(false);
Toast.makeText(PayActivity.this,"獲取訂單中...", Toast.LENGTH_SHORT).show();
try{
byte[] buf = Util.httpGet(url);
if(buf !=null&& buf.length>0) {
String content =newString(buf);
Log.e("get server pay params:",content);
JSONObject json =newJSONObject(content);
if(null!= json && !json.has("retcode") ){
PayReq req =newPayReq();
//req.appId = "wxf8b4f85f3a794e77";  // 測試用appId
req.appId= json.getString("appid");
req.partnerId= json.getString("partnerid");
req.prepayId= json.getString("prepayid");
req.nonceStr= json.getString("noncestr");
req.timeStamp= json.getString("timestamp");
req.packageValue= json.getString("package");
req.sign= json.getString("sign");
req.extData="app data";// optional
Toast.makeText(PayActivity.this,"正常調起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果應用沒有註冊到微信,應該先調用IWXMsg.registerApp將應用註冊到微信
booleanb =api.sendReq(req);
}else{
Toast.makeText(PayActivity.this,"返回錯誤"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(PayActivity.this,"服務器請求錯誤", Toast.LENGTH_SHORT).show();
}
}catch(Exception e){
Toast.makeText(PayActivity.this,"異常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
}
payBtn.setEnabled(true);
}

這個方法就是微信Demo裏,payactivity裏主要的代碼了。這裏解釋一下代碼,url就是服務端集成完之後,給客戶端調用的接口地址。會返回appId,parpayId.....拿到這些值給PayReq賦值,然後調用api.sendReq()調起支付。解釋完代碼,說一下可能遇到的問題。這些返回的參數,服務端是需要進行MD5加密的,如果沒有加密,那麼客戶端拿到這些參數就需要進行加密。,
成功調起微信支付後,會跳轉到一個界面,這個界面是必須有的,而且必須在wxapi包下。相信做過微信分享的朋友都清楚。

7567917-e3914ff5365a2d2a.png
@Override
public voidonResp(BaseResp resp) {
if(resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder =newAlertDialog.Builder(this);
builder.setTitle(R.string.app_tip);
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
}
}
7567917-c52ff27fa681a1f9.png

WXPayEntryActivity裏代碼比較簡單,最重要的就是onResp方法了。resp.errCode是返回的錯誤碼,微信給的描述比較模糊。-1的給的是可能的原因,讓人摸不着頭腦。我在集成的過程中,遇到兩次-1。一次是,在清單文件中,WXpayEntryActivity沒有加filter。一次是,簽名的問題。在微信後臺,我們會填寫應用簽名,相應的在調起微信支付,也需要用簽名一致,而我們在開發的過程中,很可能用的debug的簽名,所以也會報-1。
然後就是在調起微信支付的時候,還會有個一個附加的參數extdata。我們在這個界面可以用getIntent().getStringExtra("_wxapi_payresp_extdata");獲取在那裏傳的值。

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