阿里支付筆記


阿里支付也是第三方的sdk;所以首先要到阿里的開發者平台下載支付寶的sdk;

發起支付是個異步的過程,所以要開啟線程調用,然后直接貼代碼:

(1)下載SDK

(2)、發起支付

Runnable runnable = new Runnable() {
  @Override
  public void run() {
    PayTask payTask = new PayTask(SecKillSettlementActivity.this);

      //支付參數一般由自己服務器拼寫
    String result = payTask.pay(response.getString("payParams"));
    Message msg = new Message();
    msg.what = SDK_PAY_FLAG;
    msg.obj = result;
    Looper.prepare();
    mHandler.sendMessage(msg);
  }
};
Thread thread = new Thread(runnable);
thread.start();

 

(3)、支付結果解析:

private Handler mHandler = new Handler() {
  public void handleMessage(Message msg) {
    switch (msg.what) {
      case SDK_PAY_FLAG: {

        //PayResult 解析的工具類而已
        PayResult payResult = new PayResult((String) msg.obj);
        // 支付寶返回此次支付結果及加簽,建議對支付寶簽名信息拿簽約時支付寶提供的公鑰做驗簽
        String resultInfo = payResult.getResult();
        String resultStatus = payResult.getResultStatus();

        // 判斷resultStatus 為“9000”則代表支付成功,具體狀態碼代表含義可參考接口文檔
        if (TextUtils.equals(resultStatus, "9000")) {
          String[] params = resultInfo.split("&");
          if(params != null){
            for(int i = 0; i < params.length; i ++){
              String text = params[i];
              if(text.contains("out_trade_no")){
                //跳到支付結果頁面的操作
                text = text.substring(14, text.length() - 1);
                Intent intent = new Intent(SecKillSettlementActivity.this,
                SecKillPayResultActivity.class);
                intent.putExtra("orderNo",text);
                intent.putExtra("payType",getString(R.string.ali_pay));
                startActivity(intent);
                Toast.makeText(SecKillSettlementActivity.this, "支付成功",Toast.LENGTH_SHORT).show();
                finish();
                break;
              }
            }
          }
        } else {
          // 判斷resultStatus 為非“9000”則代表可能支付失敗
          // “8000”代表支付結果因為支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服務端異步通知為准(小概率狀態)
          if (TextUtils.equals(resultStatus, "8000")) {
            Toast.makeText(SecKillSettlementActivity.this, "支付結果確認中",Toast.LENGTH_SHORT).show();
          } else {
            // 其他值就可以判斷為支付失敗,包括用戶主動取消支付,或者系統返回的錯誤
            Toast.makeText(SecKillSettlementActivity.this, "支付失敗",
Toast.LENGTH_SHORT).show();
          }
          getPaymentResult();
        }
        break;
  }
  case SDK_CHECK_FLAG: {
  Toast.makeText(SecKillSettlementActivity.this, "檢查結果為:" + msg.obj,
  Toast.LENGTH_SHORT).show();
  break;
  }
  default:
  break;
  }
  };
};

 

(4)、參考分析

快幣秒殺支付參數示例:

"payParams": "_input_charset=\"UTF-8\"&app_id=\"1\"&appevn=\"system=android^version=1.1.0.0\"&body=\"2\"&notify_url=\"http:\/\/fz.51kuaibi.com\/financeMaster\/alipayCallBack\"&out_trade_no=\"20160622132808966085\"&partner=\"2088021706189022\"&payment_type=\"1\"&seller_id=\"admin@51kuaibi.com\"&service=\"mobile.securitypay.pay\"&show_url=\"商品展示地址\"&subject=\"麥炫量販式KTV黃金場8小時歡唱\"&total_fee=\"0.1\"&sign=\"WfeZTN7CzitcXCSTHJ5clTgRmHeJCkxEbjpFK21I8tiiWM0uVPvC7mhx1pvMUPyIYEAY8940TwaXlEPcVijlYc6NvWTvM%2F6BS9ym2wPBZ2g22qNW1r4dcG8oidiJu%2F5LTaUkAF8%2BkxGkVQQWFxzwlGfjhpwpEJtOLeeiM6ynqMI%3D\"&sign_type=\"RSA\""

快幣秒殺支付結果示例:

resultStatus={9000};memo={};result={_input_charset="UTF-8"&app_id="1"&appevn="system=android^version=1.1.0.0"&body="2"&notify_url="http://fz.51kuaibi.com/financeMaster/alipayCallBack"&out_trade_no="20160622133210802493"&partner="2088021706189022"&payment_type="1"&seller_id="admin@51kuaibi.com"&service="mobile.securitypay.pay"&show_url="商品展示地址"&subject="麥炫量販式KTV黃金場8小時歡唱"&total_fee="0.1"&success="true"&sign_type="RSA"&sign="ap+T70jizGjS/objavOh4Tv3E9Yv6Hr5TwJWfnzteKNEsRJra2qGdEFOiZTktmbJ8GLyE/r0v7o87i5BkGD5KaHp8RiuU/c0XKlRdGC0usI43suVJxWrqbnih3FN9VUcnpAdEPjXzfv3w1+SM2WWenL5f3lEcpdWqigo2kwE+bM="}pdWqigo2kwE+bM="
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM