国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android集成支付寶支付功能示例

2019-12-12 02:33:24
字體:
供稿:網(wǎng)友

公司項目中需要支付功能,現(xiàn)在支付寶、微信支付很方便,也很多人使用,因此,他們是首選。在此記錄一下支付寶集成過程,下期為微信支付,敬請期待

首先去支付寶官網(wǎng)下載其最新的Android的SDK集成Dmeo

支付寶

選擇SDK&Dmeo進行下載

將支付寶jar包添加項目中

alipaySdk-20160516.jar


可以看到其主要的調(diào)用方法在PayDemoActivity類中,下面為主要支付調(diào)用方法:

    /**     * 完整的符合支付寶參數(shù)規(guī)范的訂單信息     */    final String payInfo = orderInfo + "&sign=/"" + sign + "/"&" + getSignType();    Runnable payRunnable = new Runnable() {      @Override      public void run() {        // 構(gòu)造PayTask 對象        PayTask alipay = new PayTask(PayDemoActivity.this);        // 調(diào)用支付接口,獲取支付結(jié)果        String result = alipay.pay(payInfo, true);        Message msg = new Message();        msg.what = SDK_PAY_FLAG;        msg.obj = result;        mHandler.sendMessage(msg);      }    };    // 必須異步調(diào)用    Thread payThread = new Thread(payRunnable);    payThread.start();

注意,我們需要異步發(fā)支付請求。可以看到他僅僅需要我們 傳遞好參數(shù)

完整的符合支付寶參數(shù)規(guī)范的訂單信息

這一步,我公司由服務(wù)器返回已經(jīng)處理好的秘鑰,我直接傳遞給支付寶即可

復(fù)制代碼 代碼如下:

請求后,我們講獲得返回值result

復(fù)制代碼 代碼如下:

錯誤碼

  1. 9000 -> 訂單支付成功
  2. 8000 -> 正在處理中
  3. 4000 -> 訂單支付失敗
  4. 6001 -> 用戶中途取消
  5. 6002 ->網(wǎng)絡(luò)連接出錯

回調(diào)處理

@SuppressLint("HandlerLeak")  private Handler mHandler = new Handler() {    @SuppressWarnings("unused")    public void handleMessage(Message msg) {      switch (msg.what) {      case SDK_PAY_FLAG: {        PayResult payResult = new PayResult((String) msg.obj);        /**         * 同步返回的結(jié)果必須放置到服務(wù)端進行驗證(驗證的規(guī)則請看https://doc.open.alipay.com/doc2/         * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&         * docType=1) 建議商戶依賴異步通知         */        String resultInfo = payResult.getResult();// 同步返回需要驗證的信息        String resultStatus = payResult.getResultStatus();        // 判斷resultStatus 為“9000”則代表支付成功,具體狀態(tài)碼代表含義可參考接口文檔        if (TextUtils.equals(resultStatus, "9000")) {          Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();        } else {          // 判斷resultStatus 為非"9000"則代表可能支付失敗          // "8000"代表支付結(jié)果因為支付渠道原因或者系統(tǒng)原因還在等待支付結(jié)果確認,最終交易是否成功以服務(wù)端異步通知為準(小概率狀態(tài))          if (TextUtils.equals(resultStatus, "8000")) {            Toast.makeText(PayDemoActivity.this, "支付結(jié)果確認中", Toast.LENGTH_SHORT).show();          } else {            // 其他值就可以判斷為支付失敗,包括用戶主動取消支付,或者系統(tǒng)返回的錯誤            Toast.makeText(PayDemoActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();          }        }        break;      }      default:        break;      }    };  };

至此Android客戶端集成支付寶已經(jīng)完成,是不是So easey!

上面是支付寶Demo的代碼,我自己寫的時候做了優(yōu)化,畢竟我們集成的支付插件不僅僅只有支付寶,因此需要寫一個統(tǒng)一支付pay,在此基礎(chǔ)上做好相應(yīng)的封裝,方便后續(xù)的拓展,在此說下我的封裝思路。

  1. 新建一個IPay借口,里面僅僅只有pay方法
  2. 新建一個Pay實現(xiàn)IPay,重寫pay方法,實現(xiàn)支付功能,在Pay里面,統(tǒng)一做網(wǎng)絡(luò)請求操作,如需要從服務(wù)器獲取==完整的符合支付寶參數(shù)規(guī)范的訂單信息==,微信一樣需要這樣,因此可以在此類中統(tǒng)一做請求,獲得返回值之后,根據(jù)調(diào)用支付類型,執(zhí)行相應(yīng)pay方法。
  3. 當然也可以建立一個PayHelper 專門用于實現(xiàn)各個支付類型的pay方法,然后在Pay中調(diào)用,減少代碼量
  4. 我們要新建一個IPayResultCallBack接口,定義onSuccess、onFail方法,表示支付成功失敗的回調(diào)
  5. 新建一個抽象類PayResultCallBack實現(xiàn)IPayResultCallBack,講onSuceess、onFail放到支付成功/失敗相應(yīng)中,表明支付成功、失敗回調(diào)方法,到時調(diào)用pay方法是,即要傳遞實現(xiàn)好的回調(diào)類對象

支持基本一個可拓展的支付功能基本搭建完成,剩余的僅僅是需要一個一個集成其他支付功能,走的路子任然如此,一個pay,然后回調(diào)方法里面處理支付結(jié)果?。?!

1、IPay

/*** 支付接口* Created by kingpeng on 16/5/19.*/public interface IPay { void pay(int payType,String orderInfo);}

2、Pay

/*** 支付工具類* Created by kingpeng on 16/5/19.*/public class Pay implements IPay { private Activity mContext; private MyCallback mCallback = new MyCallback(); private int mPayType; private PayHelper mPayHelper; private IPayResultCallback mPayResultCallback; public Pay(Activity context, IPayResultCallback payResultCallback) {   mContext = context;   mPayResultCallback = payResultCallback;   mPayHelper = new PayHelper(); } @Override public void pay(int payType, String orderInfo) {   mPayType = payType;   ReqParam param = new ReqParam();   param.setAlertProgressDialog(mContext, true);   param.put("orderInfo", orderInfo);   param.put("payway", payType);   RequestUtil.getInstance().postApi3(R.string.payment_app_require, param, mCallback); } /**  * 支付寶支付  *  * @param payInfo  */ private void aliPay(final String payInfo) {   mPayHelper.aliPay(mContext, payInfo, mPayResultCallback); } private class MyCallback extends ReqCallbackIml {   @Override   public void onSuccess(int action, String response) {     switch (action) {       case R.string.payment_app_require:         PayParseBean bean = (PayParseBean) GsonUtil.jsonToBean(response, PayParseBean.class);         if (bean != null && bean.errcode == 0) {           switch (mPayType) {             case 1:               //請求支付寶               aliPay(bean.signStr);               break;             case 2:               //ToDo 請求微信               break;           }         } else {           ToastUtils.showDefaultToastCenter(mContext.getApplicationContext(), "獲取訂單信息失敗");         }         break;     }   }   @Override   public void onFail(int action, Throwable e) {     ToastUtils.showDefaultToastCenter(mContext.getApplicationContext(), "獲取訂單信息失敗");   } }

3、PayHelper

/*** 支付幫助類* Created by kingpeng on 16/5/19.*/public class PayHelper { public PayHelper() { } /**  * 支付寶支付  *  * @param activity  * @param payInfo  */ public void aliPay(Activity activity, String payInfo, IPayResultCallback payResultCallback) {   new AlipayTask(activity, payInfo, payResultCallback).execute(); } private class AlipayTask extends AsyncTask<String, Integer, String> {   private Activity mContext;   private String mPayInfo;   private IPayResultCallback mPayResultCallback;   public AlipayTask(Activity context, String payInfo, IPayResultCallback payResultCallback) {     super();     mContext = context;     mPayInfo = payInfo;     mPayResultCallback = payResultCallback;   }   @Override   protected String doInBackground(String... params) {     // 構(gòu)造PayTask 對象     PayTask alipay = new PayTask(mContext);     // 調(diào)用支付接口,獲取支付結(jié)果     String result = alipay.pay(mPayInfo, true);     return result;   }   @Override   protected void onPostExecute(String result) {     mPayResultCallback.payResult(result, Constants.PAY_ALIPAY);   } }

4、PayResultCallbackImpl

/*** 支付結(jié)果回調(diào)* Created by kingpeng on 16/5/19.*/public abstract class PayResultCallbackImpl implements IPayResultCallback { public void payResult(String result, int payType) {   switch (payType) {     case Constants.PAY_ALIPAY:       aliPayResult(result, payType);       break;     case Constants.PAY_WX:       wxPayResult(result, payType);       break;   } } /**  * 支付寶支付結(jié)果  *  * @param result  * @param payType  */ private void aliPayResult(String result, int payType) {   PayResult payResult = new PayResult(result);   /**    * 同步返回的結(jié)果必須放置到服務(wù)端進行驗證(驗證的規(guī)則請看https://doc.open.alipay.com/doc2/    * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&    * docType=1) 建議商戶依賴異步通知    */   String resultInfo = payResult.getResult();// 同步返回需要驗證的信息   String resultStatus = payResult.getResultStatus();   // 判斷resultStatus 為“9000”則代表支付成功,具體狀態(tài)碼代表含義可參考接口文檔   if (TextUtils.equals(resultStatus, "9000")) {     onPaySuccess(result, payType);   } else {     // 判斷resultStatus 為非"9000"則代表可能支付失敗     // "8000"代表支付結(jié)果因為支付渠道原因或者系統(tǒng)原因還在等待支付結(jié)果確認,最終交易是否成功以服務(wù)端異步通知為準(小概率狀態(tài))     // 其他值就可以判斷為支付失敗,包括用戶主動取消支付,或者系統(tǒng)返回的錯誤     onPayFail(result, payType);   } } /**  * 支付成功  *  * @param result  * @param payType  */ public abstract void onPaySuccess(String result, int payType); /**  * 支付失敗  *  * @param result  * @param payType  */ public abstract void onPayFail(String result, int payType);}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 务川| 东乌珠穆沁旗| 磴口县| 怀仁县| 永宁县| 广南县| 永平县| 青海省| 新建县| 永仁县| 宣武区| 孝义市| 溧阳市| 奉贤区| 吴江市| 宜兰县| 江口县| 马龙县| 本溪市| 石河子市| 富宁县| 高平市| 武陟县| 洛浦县| 浦城县| 千阳县| 永登县| 深圳市| 嘉峪关市| 天峻县| 武安市| 宜兰县| 垫江县| 厦门市| 天津市| 定安县| 寻甸| 轮台县| 洛川县| 仁布县| 凌云县|