Android支付寶 微信支付 簡單集成

最近項目需求 改版了支付方式,支付寶  微信都切換了 海外版,還集成了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 頁面,按着常規的處理 有時候會閃黑屏 然後跳轉到 發起支付頁面 很不舒服,不知道別的大佬是怎麼處理的,廣播的話  就很好的解決的了這個問題,

EventBUS 的話,網上有很多介紹的,這裏貼個鏈接 可以學習一下 https://www.jianshu.com/p/f9ae5691e1bb

大神源碼解讀:http://a.codekk.com/detail/Android/Trinea/EventBus%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90

sweetdialog 是一個很不錯的 彈窗  GitHub鏈接 https://github.com/pedant/sweet-alert-dialog



@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();
        }

    }

}


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