Android集成支付宝SDK支付

App支付API列表:https://opendocs.alipay.com/open/204/105303
App支付客户端 DEMO&SDK:https://opendocs.alipay.com/open/54/104509

相比微信支付,支付宝支付简单许多,它的交互过程如图:

支付宝APP支付交互流程

首先导入jar包:alipaySdk.aar,官方demo里面就有这个aar包

然后在AndroidManifest中配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- alipay sdk begin -->
<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>
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden">
</activity>
<!-- alipay sdk end -->

然后还是商户App传递商品的信息请求商户自己的服务器,服务端开发人员会根据支付宝服务端的sdk提供的方法将订单信息加密成一个字符串orderInfo返回给App,拿到这个加密的订单信息的字符串后,调起支付宝支付界面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void handleResult(final String payInfo) {

Runnable payRunnable = new Runnable() {

@Override
public void run() {
// 构造PayTask 对象
PayTask payTask = new PayTask(SelectPayWayActivity.this);
// 调用支付接口,获取支付结果
Map<String, String> result = payTask.payV2(payInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
sendUiMessage(msg);
}
};

// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}

PayTask调用的方法有paypayV2两个,返回值的类型不一样,一个String,一个是Map类型,如果使用了demo中的PayResult,就用payV2方法

支付回调的处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case SDK_PAY_FLAG:
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
String resultInfo = payResult.getResult(); // 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, "9000")) {
showToast("支付成功");
} else {
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
showToast("支付结果确认中");
} else {
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
showToast("支付失败");
}
}
break;

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :