Android集成支付宝支付SDK,实现支付功能

本文详细介绍了如何在Android项目中集成支付宝SDK,并通过示例代码展示了完整的支付流程,包括权限配置、SDK导入及支付结果处理。

官方集成文档地址:https://docs.open.alipay.com/204/105296/

一、导入支付宝SDK

1.将 alipaySdk-15.6.5-20190718211159.aar 包放在您的应用工程的 libs 目录下(图片中文件名仅做示例,请以实际 SDK 文件名为准):arr文件下载地址:https://download.youkuaiyun.com/download/github_39118247/11648340

2.在主项目的 build.gradle 中,添加下面的内容,将 libs 目录作为依赖仓库:

allprojects {
    repositories {

        // 添加下面的内容
        flatDir {
            dirs 'libs'
        }

        // ... jcenter() 等其他仓库
    }
}

3.在您 App Module 的 build.gradle 中,添加下面的内容,将支付宝 SDK 作为项目依赖:

dependencies {

    // 添加下面的内容
    compile (name: 'alipaySdk-15.5.7-20181023110917', ext: 'aar')

    // ... 其他依赖项
}

至此,支付宝 SDK 开发资源导入完成。

运行权限

为正常完成良好的支付流程体验,支付宝 SDK 需要使用下面这些权限:

android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE

 至此项目配置部分结束,接下来直接赋上代码:

      一般订单加密,下单都是在服务端完成,所以我们首先要调用自己后台的一个接口,传递一些参数,让其携带可以调用支付宝的接口,实现统一下单功能,之后便返回一个订单数据串,对应的也就是代码中的orderInfo,移动端得到这个数据串,使用支付宝的sdk,调用支付宝程序进行支付。

/**
 * 支付宝账户支付业务示例
 */
public void alipay(View v, String orderInfo) {
//orderInfo 的获取必须来源于服务端
    final String authInfo = orderInfo;
    final Runnable payRunnable = new Runnable() {
        @Override
        public void run() {
            PayTask alipay = new PayTask(PayActivity.this);
            Map<String, String> result = alipay.payV2(authInfo, true);
            Log.i("msp", result.toString());
            Message msg = new Message();
            msg.what = SDK_PAY_FLAG;
            msg.obj = result;
            mHandler.sendMessage(msg);
        }
    };
    // 必须异步调用
    Thread payThread = new Thread(payRunnable);
    payThread.start();
}
@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((Map<String, 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();
                    Log.e("resultStatus", "resultStatus-------------------" + resultStatus);
                    // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
                    if (TextUtils.equals(resultStatus, "9000")) {

                        popPayPrice.setText("¥" + registrationPrice.getText().toString().trim());
                        pop_toll.showAtLocation(PayActivity.this, registrationPrice, Gravity.CENTER, 0, 0);
//                        Intent intent = new Intent(PayActivity.this, ModelTwoRegistrationActivity.class);
//                        startActivity(intent);
//                        finish();
                    } else {
                        // 判断resultStatus 为非"9000"则代表可能支付失败
                        // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                        if (TextUtils.equals(resultStatus, "8000")) {
                            Toast.makeText(PayActivity.this, "支付结果确认中", Toast.LENGTH_SHORT).show();

                        } else if (TextUtils.equals(resultStatus, "6001")) {//6001用户取消支付
                            Log.e("error", "error: ========" + payResult);
                            Toast.makeText(PayActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
                        } else {
                            // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                            Toast.makeText(PayActivity.this, "支付失败" + payResult, Toast.LENGTH_SHORT).show();
                            Log.e("error", "error: ========" + payResult);
                        }
                    }
                    break;
                }
                default:
                    break;
            }
        }

    };

 

public class PayResult {
   private String resultStatus;
   private String result;
   private String memo;

   public PayResult(Map<String, String> rawResult) {
      if (rawResult == null) {
         return;
      }

      for (String key : rawResult.keySet()) {
         if (TextUtils.equals(key, "resultStatus")) {
            resultStatus = rawResult.get(key);
         } else if (TextUtils.equals(key, "result")) {
            result = rawResult.get(key);
         } else if (TextUtils.equals(key, "memo")) {
            memo = rawResult.get(key);
         }
      }
   }

   @Override
   public String toString() {
      return "resultStatus={" + resultStatus + "};memo={" + memo
            + "};result={" + result + "}";
   }

   /**
    * @return the resultStatus
    */
   public String getResultStatus() {
      return resultStatus;
   }

   /**
    * @return the memo
    */
   public String getMemo() {
      return memo;
   }

   /**
    * @return the result
    */
   public String getResult() {
      return result;
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值