Android支付寶 微信支付 簡單整合
阿新 • • 發佈:2019-01-01
最近專案需求 改版了支付方式,支付寶 微信都切換了 海外版,還集成了paypal,前幾天隨手記錄了一下paypal的整合,
今天 整理一下 支付寶 和微信的,
支付寶 微信 賬戶申請 應用建立就不說了,截圖太麻煩,這裡只貼 一些 關鍵程式碼片段,
假設 支付寶 微信 賬號申請 應用建立 ,後臺介面都OK了,接下來:
1,自家後臺 介面 獲取 支付寶 拼接好的 orderInfo 引數 ,和 調起 微信支付需要的 七個 引數;
然後 傳參 發起支付
/** * 支付寶 支付 */ public void goAliPay(final String orderInfo) {Runnable payRunnable= new Runnable() { @Override public void run() { //呼叫支付寶 PayTask payTask = new PayTask(ConfirmOrderAvtivity.this); String result = payTask.pay(orderInfo, true); Message msg = new Message(); msg.what = ALIPAY; msg.obj = result; mHandler.sendMessage(msg); } }; // 必須非同步呼叫 Thread payThread = new Thread(payRunnable); payThread.start(); }
/** * 微信支付 */ public void goWeiXinPay(String appid, String partnerid, String prepayid, String noncestr, String timestamp, String packageNmae, String sign) { //註冊 微信APPID api = WXAPIFactory.createWXAPI(ConfirmOrderAvtivity.this, Constant.WX_APP_ID, true); api= WXAPIFactory.createWXAPI(ConfirmOrderAvtivity.this, null); api.registerApp(appid); PayReq req = new PayReq(); req.appId = appid; req.partnerId = partnerid; req.prepayId = prepayid; req.nonceStr = noncestr; req.timeStamp = timestamp; req.packageValue = packageNmae; req.sign = sign; // 在支付之前,如果應用沒有註冊到微信,應該先呼叫IWXMsg.registerApp將應用註冊到微信 api.sendReq(req); // 返回的是調取 成功 失敗 }
然後 等待 回撥結果,我這裡 是做的統一處理,就是根據 回撥結果,支付失敗 統一彈窗提示,支付成功 跳轉支付結果頁面,
微信的支付回撥 我是 用的eventbus 處理的,收到支付回撥,然後傳送訊息 告訴發起支付頁面 支付結果,然後做處理,
因為WXPayEntryActivity 是個activity 頁面,按著常規的處理 有時候會閃黑屏 然後跳轉到 發起支付頁面 很不舒服,不知道別的大佬是怎麼處理的,廣播的話 就很好的解決的了這個問題,
@SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case ALIPAY: { PayResult payResult = new PayResult((String) msg.obj); String resultInfo = payResult.getResult();// 同步返回需要驗證的資訊 String resultStatus = payResult.getResultStatus(); if (TextUtils.equals(resultStatus, "9000")) { showMyDialog("1"); } else { // "8000"代表支付結果因為支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服<span style="white-space:pre"> </span>務端非同步通知為準(小概率狀態) if (TextUtils.equals(resultStatus, "8000")) { showMyDialog("支付結果確認中..."); } else if (TextUtils.equals(resultStatus, "6001")) { showMyDialog("支付取消"); } else if (TextUtils.equals(resultStatus, "6002")) { showMyDialog("支付失敗"); } else if (TextUtils.equals(resultStatus, "5000")) { } else { showMyDialog("支付失敗"); // 其他值就可以判斷為支付失敗 } } break; } } } };
public void showMyDialog(String msg) { if (msg.equals("1")) { intent = new Intent(ConfirmOrderAvtivity.this, PayResultActivity.class); intent.putExtra("from", "ConfirmOrderAvtivity"); startActivity(intent); } else { new SweetAlertDialog(ConfirmOrderAvtivity.this, SweetAlertDialog.WARNING_TYPE) .setTitleText(msg) .setContentText(msg + "!") .show(); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onMoonEvent(MessageEvent messageEvent) { if (messageEvent.getMessage().equals("支付成功")) { showMyDialog("1"); } else if (messageEvent.getMessage().equals("支付失敗")) { showMyDialog(messageEvent.getMessage()); } else if (messageEvent.getMessage().equals("支付取消")) { showMyDialog(messageEvent.getMessage()); } }
WXPayEntryActivity :
public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler { private IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.wxpay_bg_layout); ActivityManagerUtils.getInstance().addActivity(this); api = WXAPIFactory.createWXAPI(WXPayEntryActivity.this, Constant.WX_APP_ID); api.handleIntent(getIntent(), WXPayEntryActivity.this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, WXPayEntryActivity.this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { int code = resp.errCode; if (code == 0) { //顯示充值成功的頁面和需要的操作 EventBus.getDefault().post(new MessageEvent("支付成功")); } if (code == -1) { EventBus.getDefault().post(new MessageEvent("支付失敗")); //支付失敗 } if (code == -2) { EventBus.getDefault().post(new MessageEvent("支付取消")); //使用者取消 } finish(); } } }