集成【支付宝】实现支付功能

###1.注册流程一句带过

  1. 蚂蚁金服开放平台
  2. 创建应用
  3. 签约上线

官方文档:https://docs.open.alipay.com/204/105297/

###2.移动端要做的事

  1. 获取订单信息
  2. 调用支付请求
  3. 支付结果回调

移动端只需要处理好以上3步就可以,并没有太多流程。

###3.开始接入

####3.1 导入并配置SDK

SDK下载链接:https://docs.open.alipay.com/54/104509

1.将jar包复制到工程目录libs下,并添加依赖

这里写图片描述

2.在AndroidManifest.xml文件中添加声明

<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
    android:name="com.alipay.sdk.app.H5AuthActivity"
    android:configChanges="orientation|keyboardHidden|navigation"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" />

3.添加权限(注意6.0动态申请)

<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" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.添加代码混淆(proguard-rules.pro

-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    <fields>;
    <methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}

5.同步工程

做完以上步骤就完成了SDK的所有配置。

####3.2 现在可以调用API了
因为订单信息涉及到加密运算,通常是由服务器处理后返回给APP端,APP端只需要上传商品信息。但为了演示整体流程,我们在APP端加密了一条订单信息以供使用(需要APPID与RES私钥,本次使用的是RES2加密)。

这里写图片描述

demo中这三个类就是加密订单信息的工具类,正常开发中APP端不需要用到。

Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, true);
String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
String sign = OrderInfoUtil2_0.getSign(params, RSA2_PRIVATE, true);
final String orderInfo = orderParam + "&" + sign;

orderInfo 就是加密后的订单信息了

接下来就是调用支付宝的API请求支付订单了,注意这里必须在子线程异步调用。

Runnable payRunnable = new Runnable() {
	@Override
	public void run() {
		PayTask payTask = new PayTask(ACTIVITY);
		Map<String, String> result = payTask.payV2(orderInfo, true);

		Message msg = new Message();
		msg.what = PAY_FLAG;
		msg.obj = result;
		mHandler.sendMessage(msg);
	}
};
Thread payThread = new Thread(payRunnable);
payThread.start();

最后就是回调支付结果

PayResult payResult = new PayResult((Map<String, String>) msg.obj);
String resultStatus = payResult.getResultStatus();
if (TextUtils.equals(resultStatus, "9000")) {
    Toast.makeText(CONTEXT, "支付成功", Toast.LENGTH_SHORT).show();
    //成功处理
} else {
    Toast.makeText(CONTEXT, "支付失败: " + resultStatus, Toast.LENGTH_SHORT).show();
    //失败处理
}

PayResult 是demo中的一个类,封装了回调的数据类型,直接用就可以。注意的是 resultStatus 为支付宝同步回调给APP端的支付结果,同时支付宝会异步的回调给服务端一个支付结果,这两个结果极小概率会出现不等情况,且几乎无时差。但实际开发中通常以服务端的结果为主,毕竟和钱打交道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值