云豹直播系统集成Braintree,代替Paypal该怎么做
云豹直播系统接入了PayPall,但由于近期, paypal宣布停止维护,为满足组运营需要,云豹直播项目开发组将对其进行同类产品替换,下图为github上paypal的介绍,说的很清楚。
一、替代产品的集成教程
云豹直播系统开发组最终选择使用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