APP接入支付宝支付(二)-- APP客户端集成

时间:2021-08-02
本文章向大家介绍APP接入支付宝支付(二)-- APP客户端集成,主要包括APP接入支付宝支付(二)-- APP客户端集成使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本文问主要介绍接入支付宝支付中客户端的代码集成过程,运用的工具为Android Studio。(官网说明文档)

一、 集成支付宝SDK

  (1) 找到项目代码中app文件夹下的build.gradle文件。
    
  (2) 在dependencies下添加依赖
    

dependencies{
    ......
    //支付宝
    implementation(name: 'alipaysdk-15.8.01.210112203525', ext: 'aar')
    ......
}

    添加完之后点击编辑器窗口右侧的Sync Now,当AS下方提示完成时,表示支付宝SDK资源导入完成。
    

二、 添加权限

    运行支付宝SDK需要以下三个权限,这样能够优化支付体验。
        android.permission.INTERNET
        android.permission.ACCESS_NETWORK_STATE
        android.permission.ACCESS_WIFI_STATE
    在应用项目代码中main文件夹下的AndroidManifest.xml文件中,在manifest下添加权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="XXX">
    ......
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    ......
</manifest>

三、 调用支付接口

    (1) 设置一个点击事件,表示启用支付宝支付。调用服务端的接口,参数为支付金额、产品描述等信息,返回值为订单信息。
    (2) 将从服务端返回的订单信息作为参数,调用如下方法:

    private void AliPay(String orderInfo) {
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(MainActivity.this);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;//int 自定义 异步调用标识 唯一
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

    其中的参数orderInfo是从服务端获取的订单信息。
    (3) 通过Handler对象获取支付结果。在调用支付的Activity中创建全局变量

          private Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
                     switch (msg.what){
                        case MainActivity.SDK_PAY_FLAG:      //异步调用标识 与(2)中调用的是同一参数
                          //获取支付结果
                          PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                         /**
                          * 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                          */
                         String resultStatus = payResult.getResultStatus();
                         // 判断resultStatus 为9000则代表支付成功
                         if (TextUtils.equals(resultStatus, "9000")) {
                             // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                             Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                         } else {
                         // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                         Toast.makeText(MainActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                         }
                         break;
                      }
		}
	};

    (4) 类PayResult.java。第(3)中的类PayResult代码如下:

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;
	}
}

原文地址:https://www.cnblogs.com/LLj-511/p/15090248.html