云豹直播系统集成Braintree,代替Paypal该怎么做

发布来源:云豹科技
发布人:云豹科技
2021-05-31 09:56:43

云豹直播系统接入了PayPall,但由于近期, paypal宣布停止维护,为满足组运营需要,云豹直播项目开发组将对其进行同类产品替换,下图为github上paypal的介绍,说的很清楚。


图片1.png


一、替代产品的集成教程

云豹直播系统开发组最终选择使用Braintree作为接力产品,下面是集成方式的讲解:

1、首先依赖库

compile 'com.braintreepayments.api:braintree:2.21.0',(目前公司项目采用androidX库)。
compile 'com.braintreepayments.api:drop-in:3.7.1'


2、然后在AndroidManifest.xml文件中添加如下代码:


<activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="${applicationId}.braintree" />
    </intent-filter>
</activity>



3、从服务器获取Token,用于第四步初始化

4、初始化(调用支付)


public void setupBraintree(String money,String language, String clientToken) {
        PayPalRequest payPalRequest = new PayPalRequest(money);
        payPalRequest.localeCode(language);//设置语言 注意这里的语言格式是"zh_CN" : "en_US"
        payPalRequest.currencyCode("USD");//货币
        payPalRequest.intent(PayPalRequest.INTENT_SALE);INTENT_SALE 表示立即到账
        DropInRequest dropInRequest = new DropInRequest()
                .amount(money)
                .paypalRequest(payPalRequest)
                .clientToken(clientToken);//这里的clientToken是服务器返回的
        startActivityForResult(dropInRequest.getIntent(this), BRAINTREE_REQUEST_CODE);
    }


5、重写onActivityResult


@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == BRAINTREE_REQUEST_CODE) {
            switch (resultCode) {
                case Activity.RESULT_OK:
                    DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
                    if (result != null && result.getPaymentMethodNonce() != null) {
String nonce = result.getPaymentMethodNonce() ;
//付款成功后访问服务器验证,将nonce 传给后台
//验证的接口由后台给这里逻辑由后台处理,这里返回成功,说明支付并验证成功。
                     } else {
                        ToastUtil.show(WordUtil.getString(R.string.pay_pal_fail));
                    }
                    break;
                case Activity.RESULT_CANCELED://取消支付
                    ToastUtil.show(WordUtil.getString(R.string.pay_pal_cancel));
                    break;
                default:
                    Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR);
                    ToastUtil.show(WordUtil.getString(R.string.pay_pal_fail));
                    break;
            }
        }
    }



6、到此,将Braintree集成到云豹直播系统中的步骤就完成了,相当简单。

二、另一种集成写法

还有一种集成写法:区别于上述第4 步,通过BraintreeFragment 监听


 public BraintreeFragment init(AbsActivity activity, final String token) {//token为服务器返回
        try {
            BraintreeFragment mBraintreeFragment = BraintreeFragment.newInstance(activity, token);
            // 支付完成监听
            mBraintreeFragment.addListener(new PaymentMethodNonceCreatedListener() {
                @Override
                public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) {
                    String nonce = paymentMethodNonce.getNonce();
                    if (mListener != null) {
                        mListener.paySuccess(nonce);
                    }
                }
            });
            // 取消监听
            mBraintreeFragment.addListener(new BraintreeCancelListener() {
                @Override
                public void onCancel(int requestCode) {
                    if (mListener != null) {
                        mListener.payCancel();
                    }
                }
            });
            // 错误监听
            mBraintreeFragment.addListener(new BraintreeErrorListener() {
                @Override
                public void onError(Exception error) {
                    if (error instanceof ErrorWithResponse) {
                        ErrorWithResponse errorWithResponse = (ErrorWithResponse) error;
                        BraintreeError cardErrors = errorWithResponse.errorFor("creditCard");
                        if (cardErrors != null) {
                            BraintreeError expirationMonthError = cardErrors.errorFor("expirationMonth");
                            if (expirationMonthError != null) {
                                if (mListener != null) {
                                    mListener.payFail();
                                }
                            }
                        }
                    }
                }
            });
            return mBraintreeFragment;
        } catch (InvalidArgumentException e) {
            if (mListener != null) {
                mListener.payFail();
            }
            return null;
        }
    }
 PayPalRequest request = new PayPalRequest(“价格”)
            .currencyCode("货币符号")
            .intent(PayPalRequest.INTENT_SALE);
    PayPal.requestOneTimePayment(mBraintreeFragment, request);//调起支付


这种方式也同样可以把Braintree集成到云豹直播系统中。

声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com

声明:
以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任