Android 在Braintree中存储和检索借记卡和信用卡详细信息

Android 在Braintree中存储和检索借记卡和信用卡详细信息,android,paypal,braintree,Android,Paypal,Braintree,我正在使用Braintree的v2插件uiandroid进行支付,我的后端服务器位于node.js。我已成功实施付款部分,但现在我需要存储卡详细信息,并从存储的借记卡/信用卡或贝宝账户中自动扣除金额 我正在生成客户端令牌并将该令牌存储在数据库中。使用该令牌,我生成nonce。然后我将nonce发送到后端服务器,用于transaction.sale() 下面是支付部分的代码片段 if (!TextUtils.isEmpty(braintreeClientToken)) { DropInRe

我正在使用
Braintree的v2插件ui
android进行支付,我的后端服务器位于
node.js
。我已成功实施付款部分,但现在我需要存储
卡详细信息
,并从存储的
借记卡/信用卡
贝宝账户
中自动扣除金额

我正在生成客户端令牌并将该令牌存储在数据库中。使用该令牌,我生成nonce。然后我将nonce发送到后端服务器,用于
transaction.sale()

下面是支付部分的代码片段

if (!TextUtils.isEmpty(braintreeClientToken)) {
    DropInRequest dropInRequest = new DropInRequest()
                    .clientToken(braintreeClientToken);
    startActivityForResult(dropInRequest.getIntent(this), REQUEST_CODE);
}
OnActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
            PaymentMethodNonce paymentMethodNonce = result.getPaymentMethodNonce();
            String nonce = "";
            if (paymentMethodNonce != null)
                nonce = paymentMethodNonce.getNonce();
            // use the result to update your UI and send the payment method nonce to your server
            if (!TextUtils.isEmpty(nonce)) {
                NonceRequest obj = new NonceRequest("ANDROID", "1",
                            "DRIVER-SAVE-PAYMENT", "1", nonce);
                Call<NonceResponse> call = RestService.getInstance().restInterface.sendNonceToServer(userId, userToken, obj);
                    call.enqueue(new Callback<NonceResponse>() {
                    @Override
                    public void onResponse(Call<NonceResponse> call, Response<NonceResponse> response) {

                    }

                    @Override
                    public void onFailure(Call<NonceResponse> call, Throwable t) {

                    }
                });
            }
        } else if (resultCode == Activity.RESULT_CANCELED) {
            // the user canceled
        } else {
            // handle errors here, an exception may be available in
            Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR);
        }
    }
}
@覆盖
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==请求\代码){
if(resultCode==Activity.RESULT\u确定){
DropInResult结果=data.getParcelableExtra(DropInResult.EXTRA\u DROP\u IN\u结果);
PaymentMethodNonce PaymentMethodNonce=result.getPaymentMethodNonce();
字符串nonce=“”;
如果(paymentMethodNonce!=null)
nonce=paymentMethodNonce.getNonce();
//使用结果更新用户界面,并立即将付款方式发送到服务器
如果(!TextUtils.isEmpty(nonce)){
NonceRequest obj=新的NonceRequest(“安卓”,“1”,
“司机-储蓄-支付”、“1”,暂时);
Call Call=RestService.getInstance().restInterface.sendNonceToServer(userId、userToken、obj);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}else if(resultCode==Activity.RESULT\u已取消){
//用户取消了
}否则{
//如果在此处处理错误,则中可能存在异常
异常错误=(异常)data.getSerializableExtra(DropInActivity.EXTRA_错误);
}
}
}
有谁能告诉我存储
信用卡/借记卡
贝宝账户
详细信息的步骤,并从存储的
支付方式
中生成nonce完整披露:我在Braintree工作。如果您有任何进一步的问题,请随时联系


您想要完成的大部分工作将是服务器端的更改。如果要存储卡,可以传递到选项参数,该参数将在成功时保存该卡,并使用该卡创建关联客户。否则,您也可以将该nonce传递到调用中。如果这些调用成功,将为这些卡创建一个令牌,然后您将能够重用该令牌。基于您表示希望“自动扣除金额”的事实,我认为您可能希望使用该令牌设置订阅。为此,您需要创建一个,它是控制面板中订阅的模板。然后,您希望使用已创建的存储令牌实际创建。如果您希望这些保存的卡显示在下拉列表中供客户选择,则需要将输入传递到ClientToken.generate调用中。这将允许客户从列表中选择存储的卡,并在下拉列表中重新使用

感谢您的回答没有定期付款金额可以是可变的。请澄清一个疑问,我是否需要创建计划?为了创建订阅,您需要创建计划。当您创建计划时,这是您指定金额的地方。没有定期付款。这是一个出租车预订应用程序。在这里,我们想从之前的储蓄付款方式中扣除乘客的金额。由于这个原因,金额将是可变的,我不能像每月、每年、每季度、每天那样申请订阅。因此,您似乎只希望能够重用保险存储卡。在这种情况下,您所需要做的一切与上面相同,您只需在transaction.sale()调用中调整amount参数。我使用的是自定义ui,这就是为什么
DropInResult.fetchDropInResult
不起作用,所以我如何在ui中显示存储的卡信息。我会创建一个新线程还是你可以在这里给出解决方案?