参考
准备工作
导入相应的jar包,并在清单文件中添加两个activity,如下:
<!-- 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" />
<!-- alipay sdk end -->
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" />
<activity android:name=".activity.AmbitusProductListActivity" />
支付
请求支付宝的所有数据应该在后台拼接完成,前端展示调用支付宝的sdk发起请求即可。如下:
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(CashierDeskActivity.this);
// 调用支付接口,获取支付结果
String result = alipay.pay(data);//其中data就是后台返回的,已经拼接成功了的用于调用支付宝支付的string
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);//通过handler处理支付的回调结果
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
处理支付之后的结果,如下:
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((String) msg.obj);
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, "9000")) {
//处理自己的逻辑
ToastUtils.toastCustom("支付成功", CashierDeskActivity.this);
} else {
// 判断resultStatus 为非“9000”则代表可能支付失败
// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
ToastUtils.toastCustom("支付结果确认中", CashierDeskActivity.this);
} else {
//支付失败,处理自己的逻辑
ToastUtils.toastCustom("支付失败", CashierDeskActivity.this);
}
}
break;
}