阿里支付也是第三方的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="
}

posted on 2016-06-22 15:41  艾先生  阅读(1984)  评论(0)    收藏  举报