首页 > 解决方案 > 如何在 Braintree Android PayPal Vault Payment 上获取 PaymentMethodNonce 和 deviceData

问题描述

我正在尝试实施 Braintree Vault PayPal 付款,这里面临的问题是让paymentMethodNonce我的事件侦听createdListener器捕获 nonce 不会被调用 using vault,但一切正常使用checkout. 如果没有 ,我无法向客户收费paymentMethodNonce,请任何人帮助我。

mBraintreeFragment = BraintreeFragment.newInstance(this,"TOKEN_FROM_SERVER");
PayPalRequest request = new PayPalRequest().localeCode("US").billingAgreementDescription("Your agreement description");
            PayPal.requestBillingAgreement(mBraintreeFragment, request);
            mBraintreeFragment.addListener(createdListener);
            mBraintreeFragment.addListener(cancelListener);
            mBraintreeFragment.addListener(errorListener);
            DataCollector.collectDeviceData(mBraintreeFragment, new BraintreeResponseListener<String>() {
                @Override
                public void onResponse(String deviceData) {
                    Log.e("PayPal", deviceData);
                    try {
                        JSONObject json = new JSONObject(deviceData);
                        deviceDataInfo = json.getString("correlation_id");
                        Log.e("PayPal", deviceDataInfo);


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    }

});

我的听众

PaymentMethodNonceCreatedListener createdListener = new PaymentMethodNonceCreatedListener() {
        @Override
        public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) {
            String nonce = paymentMethodNonce.getNonce();
            Log.d("PayPal", "nonce id  " + nonce);
        }
};

 BraintreeCancelListener cancelListener = new BraintreeCancelListener() {
        @Override
        public void onCancel(int requestCode) {
            Log.d("CreditCard", "Braintree Error Code  " + requestCode);
        }
    };

    BraintreeErrorListener errorListener = new BraintreeErrorListener() {
        @Override
        public void onError(Exception error) {
            if (error instanceof ErrorWithResponse) {
                ErrorWithResponse errorWithResponse = (ErrorWithResponse) error;
                BraintreeError cardErrors = errorWithResponse.errorFor("creditCard");
                if (cardErrors != null) {
                    List<BraintreeError> errors = cardErrors.getFieldErrors();
                    String err = Objects.requireNonNull(errors.get(0).getMessage());
                    Log.d("CreditCard", errors.toString());
                }
            }
        }
    };

标签: javaandroidbraintreebraintree-sandbox

解决方案


与其手动将您的侦听器添加到该请求中,不如仅从 Braintree 实现接口。

例如,如果您想使用 onPaymentMethodNonceCreated(),只需在您的类名后添加“implements PaymentMethodNonceCreatedListener”。

public class "YourClass" implements PaymentMethodNonceCreatedListener {
//...
}

然后覆盖现在 Android Studio 警告您的方法:

@Override
    public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) {
        String nonce = paymentMethodNonce.getNonce();
        //...
    }

这样你就可以为你的每个听众去!祝你好运!


推荐阅读