我正在使用Braintree's v2 drop-in ui
android进行付款,我的后端服务器位于node.js
。我已成功实施付款部分,但现在我需要自动存储card details
并从存储的debit/credit card
或paypal account
中扣除金额。
我正在生成客户端令牌并将该令牌存储在我的数据库中。使用该令牌我生成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);
}
}
}
有人可以告诉我存储credit/debit card
或paypal account
详细信息并从存储的payment-method
答案 0 :(得分:4)
完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support
您要完成的大部分内容都将在服务器端进行更改。如果您想存储卡,您可以传入选项参数storeInVaultOnSuccess,这将成功保存该卡并使用该卡创建关联客户。否则,您也可以将该随机数传递到PaymentMethod.Create来电。如果这些调用成功,将为那些您可以重复使用的卡创建一个令牌。根据您声明的事实,您希望自动扣除金额&#34;,我认为您可能希望使用该令牌设置订阅。为此,您需要创建一个plan,这是您在控制面板中订阅的模板。然后,您想要使用您创建的存储令牌实际创建subscription。如果您希望这些已保存的卡片显示在Drop-in中供客户选择,您需要将customer_id传递给ClientToken.generate调用。这将允许客户从列表中选择存储的卡并在Drop-in中重复使用。