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


本文问主要介绍接入支付宝支付中客户端的代码集成过程,运用的工具为AS(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下添加权限


    ......
    
    
    
    ......

三、 调用支付接口

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

    private void AliPay(String orderInfo) {
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(MainActivity.this);
                Map 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) 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 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;
	}
}

相关