支付宝支付接入流程

Posted by lizubing1992 on 03-01,2019

1.导入aar包

 api (name:'alipaySdk-15.5.9-20181123210601', ext: 'aar')

新版的支付宝支付使用的aar包

2.配置权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3.订单生成,一般都是服务器生成订单
调用服务端的订单生成接口,之后组装数据请求支付宝支付
具体代码如下

 Observable.create(new ObservableOnSubscribe<Map<String, String>>() {
            @Override
            public void subscribe(ObservableEmitter<Map<String, String>> e) throws Exception {
                try {
                    PayTask alipay = new PayTask(mActivity);
                    LogUtils.w(data);
                    Map<String, String> result = alipay.payV2(data, true);
                    e.onNext(result);
                    e.onComplete();
                } catch (Exception ex) {
                    e.onError(new Throwable(ex));
                }
            }
        }).compose(RxHelper.<Map<String, String>>toMain())
                .compose(RxHelper.<Map<String, String>>bindToLifecycle(PaymentFragment.this))
                .subscribe(new ErrorHandleSubscriber<Map<String, String>>(errorHandler) {
                    @Override
                    public void onNext(Map<String, String> result) {
                        PayResult payResult = new PayResult(result);
                        LogUtils.w(payResult.toString());
                        String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                        String resultStatus = payResult.getResultStatus();
                        // 判断resultStatus 为9000则代表支付成功
                        LogUtils.w("resultInfo--" + resultInfo);
                        if (TextUtils.equals(resultStatus, "9000")) {
                            // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                            MyApplication.showToast("支付成功!");
                            RxBus.get().post(RxBusKey.PAY_SUCCESS, true);
                            mActivity.finish();
                        } else {
                            // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                            MyApplication.showToast("支付失败!");
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        super.onError(e);
                        LogUtils.e(e.getLocalizedMessage());
                    }
                });

alipay.payV2(data, true)中data是后台组装好的订单数据,这个方法是异步的,我这里使用的Rxjava来处理,不熟悉的请自行查阅相关文档,之后会弹出支付宝登录的界面,支付的结果会异步回调回来。

具体支付成不成功,还要看后台的处理。

H5界面的配置


    <activity
      android:name="com.alipay.sdk.app.H5PayActivity"
      android:configChanges="orientation|keyboardHidden|navigation"
      android:exported="false"
      android:screenOrientation="behind" >
    </activity>

当用户没有安装支付的时候需要配置H5界面


0评论