由于支付宝SDK对于整个支付流程已经介绍的十分详细了,在这里我就简单说一些注意点。
由于存在支付宝可能没有安装的情况,所以我们在调用支付宝支付时,需要对其进行判断,做出不同的处理方式,即是使用客户端支付,还是使用H5支付,这里简单阐述一下:
情况一:已安装支付宝客户端
/**
* 唤醒支付宝支付
* @param data 服务端返回订单数据
*/
public void payOrder(JSONObject data) {
registerLoadingView.setVisibility(View.GONE);
String redirectStr = data.getString("redirectStr");
if (!TextUtils.isEmpty(redirectStr)) { // 唤醒支付宝支付
Thread payThread = new Thread(() -> {
PayTask alipay = new PayTask(activity);
String result = alipay.pay(redirectStr);
Message msg = Message.obtain();
msg.what = MSG_PAY_RESPONSE;
msg.obj = result;
handler.sendMessage(msg);
});
payThread.start();
}
}
Handler handler = new Handler(msg -> {
if (MSG_PAY_RESPONSE == msg.what) {
Result result = new Result((String) msg.obj);
if (!TextUtils.isEmpty(result.getResult())) {
switch (result.getResult()) {
case "4000": // 系统异常 TODO
Toast.makeText(context, "订单支付失败", Toast.LENGTH_SHORT).show();
break;
case "6001": // 用户中途取消支付操作 TODO
Toast.makeText(context, "订单支付已被取消", Toast.LENGTH_SHORT).show();
break;
case "6002": // 网络连接出错 TODO
Toast.makeText(context, "网络连接出错", Toast.LENGTH_SHORT).show();
break;
case "9000": // 操作成功 TODO
Toast.makeText(context, "订单支付成功", Toast.LENGTH_SHORT).show();
// TODO do something...
break;
}
}
}
return false;
});
情况二:未安装支付宝客户端
需要在Androidmanifest.xml文件中加入以下代码,即可进入H5支付流程。
<!-- 支付宝 -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" />
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。