91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-18 10:54:03 來源:腳本之家 閱讀:186 作者:king鵬super 欄目:移動開發

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

首先去支付寶官網下載其最新的Android的SDK集成Dmeo

支付寶

選擇SDK&Dmeo進行下載

將支付寶jar包添加項目中

alipaySdk-20160516.jar

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

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

    /**
     * 完整的符合支付寶參數規范的訂單信息
     */
    final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" + getSignType();

    Runnable payRunnable = new Runnable() {

      @Override
      public void run() {
        // 構造PayTask 對象
        PayTask alipay = new PayTask(PayDemoActivity.this);
        // 調用支付接口,獲取支付結果
        String result = alipay.pay(payInfo, true);

        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage(msg);
      }
    };

    // 必須異步調用
    Thread payThread = new Thread(payRunnable);
    payThread.start();

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

完整的符合支付寶參數規范的訂單信息

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

復制代碼 代碼如下:

partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="測試"&body="測試測試"&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D"&sign_type="RSA"

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

復制代碼 代碼如下:

resultStatus={9000};memo={};result={partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="測試"&body="測試測試"&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&success="true"&sign_type="RSA"&sign="hkFZr+zE9499nuqDNLZEF7W75RFFPsly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZgSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="}

錯誤碼

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

回調處理

@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);
        /**
         * 同步返回的結果必須放置到服務端進行驗證(驗證的規則請看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”則代表支付成功,具體狀態碼代表含義可參考接口文檔
        if (TextUtils.equals(resultStatus, "9000")) {
          Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
        } else {
          // 判斷resultStatus 為非"9000"則代表可能支付失敗
          // "8000"代表支付結果因為支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服務端異步通知為準(小概率狀態)
          if (TextUtils.equals(resultStatus, "8000")) {
            Toast.makeText(PayDemoActivity.this, "支付結果確認中", Toast.LENGTH_SHORT).show();

          } else {
            // 其他值就可以判斷為支付失敗,包括用戶主動取消支付,或者系統返回的錯誤
            Toast.makeText(PayDemoActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();

          }
        }
        break;
      }
      default:
        break;
      }
    };
  };

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

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

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

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

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) {
     // 構造PayTask 對象
     PayTask alipay = new PayTask(mContext);
     // 調用支付接口,獲取支付結果
     String result = alipay.pay(mPayInfo, true);
     return result;
   }

   @Override
   protected void onPostExecute(String result) {
     mPayResultCallback.payResult(result, Constants.PAY_ALIPAY);
   }
 }

4、PayResultCallbackImpl

/**
* 支付結果回調
* 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;
   }

 }
 /**
  * 支付寶支付結果
  *
  * @param result
  * @param payType
  */
 private void aliPayResult(String result, int payType) {
   PayResult payResult = new PayResult(result);
   /**
    * 同步返回的結果必須放置到服務端進行驗證(驗證的規則請看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”則代表支付成功,具體狀態碼代表含義可參考接口文檔
   if (TextUtils.equals(resultStatus, "9000")) {
     onPaySuccess(result, payType);
   } else {
     // 判斷resultStatus 為非"9000"則代表可能支付失敗
     // "8000"代表支付結果因為支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服務端異步通知為準(小概率狀態)
     // 其他值就可以判斷為支付失敗,包括用戶主動取消支付,或者系統返回的錯誤
     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);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开阳县| 宣威市| 蚌埠市| 新乐市| 黎城县| 安庆市| 阿拉善左旗| 湖口县| 霍林郭勒市| 兴山县| 广德县| 公主岭市| 清苑县| 都江堰市| 湖口县| 盐池县| 东山县| 兰州市| 临沂市| 肥乡县| 渝北区| 海口市| 望都县| 丹阳市| 双牌县| 马龙县| 达孜县| 馆陶县| 霍山县| 新津县| 江川县| 什邡市| 蓝山县| 新余市| 辽源市| 崇文区| 陕西省| 乐业县| 巴林左旗| 安国市| 泸定县|