支付宝Android客户端集成流程
https://opendocs.alipay.com/open/204/105296
SDK&DEMO
https://opendocs.alipay.com/open/54/104509
1. 第一步:导入支付宝SDK
libs
alipaySdk-15.7.4-20200228192259.aar
2. 第二步:项目build.gradle中将libs目录作为依赖仓库
allprojects{
repositories{
// 支付宝 SDK AAR 包所需的配置
flatDir{
dirs'libs'
}
}
3. 第三步:
build.gradle(:app)
dependencies{
//...
// 支付宝 SDK AAR 包所需的配置
implementation(name:'alipaySdk-15.7.4-20200228192259',ext:'aar')
}
4. 第四步:添加权限
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
5. 接口调用
主要代码片段
final String orderInfo = pay.getJsonStr();//本地接口返回支付宝订单信息json字符串
final Runnable payRunnable = () -> {
PayTask alipay =new PayTask(OrderPayActivity.this);
Map result = alipay.payV2(orderInfo, true);
LogUtil.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();
private static final int SDK_PAY_FLAG =1;
private static final int SDK_AUTH_FLAG =2;
private HandlermHandler =new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult =new PayResult((Map) msg.obj);
/**
* 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
//
showAlert(OrderPayActivity.this, "Payment success:" + payResult);
payResult(true);
}else if (TextUtils.equals(resultStatus, "6001")) {
//取消支付
doBack();
}else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
//
showAlert(OrderPayActivity.this, "Payment failed:" + payResult);
payResult(false);
}
break;
}
case SDK_AUTH_FLAG: {
AuthResult authResult =new AuthResult((Map) msg.obj, true);
String resultStatus = authResult.getResultStatus();
// 判断resultStatus 为“9000”且result_code
// 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
// 获取alipay_open_id,调支付时作为参数extern_token 的value
// 传入,则支付账户为该授权账户
showAlert(OrderPayActivity.this, "Authentication success:" + authResult);
}else {
// 其他状态值则为授权失败
showAlert(OrderPayActivity.this, "Authentication failed:" + authResult);
}
break;
}
default:
break;
}
};
};
private void payResult(boolean success) {
DialogUtils.showMsg(this, "提示", "订单支付" + (success ?"成功" :"失败,重新支付"),
(context, builder, dialog, dialogId, which, editText) -> {
EventBus.getDefault().post(new EventBean(Constant.Event_Msg.PAY_SUCCESS));
finish();
},
(context, builder, dialog, dialogId, which, editText) -> {
if (success) {
EventBus.getDefault().post(new EventBean(Constant.Event_Msg.PAY_SUCCESS));
finish();
}
}, !success, "取消", "确定", false);
}
private void doBack() {
DialogUtils.showMsg(this, "提示", "您的订单还未支付完成,请尽快完成支付。",
(context, builder, dialog, dialogId, which, editText) -> {
EventBus.getDefault().post(new EventBean(Constant.Event_Msg.PAY_SUCCESS));
finish();
}, (context, builder, dialog, dialogId, which, editText) -> {
}, true, "确认离开", "继续支付", false);
}