支付宝SDK

由于支付宝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" />

相关推荐