与 Braintree 的每笔交易都需要付款随机数吗?
is a payment nonce required for every transaction with Braintrree?
我正在开发一个类似市场的应用程序,它支持通过 Braintree 进行支付处理。但是,我的大部分交易都非常小,考虑到 Braintree 的收费率,我不可能在用户每次购买时都处理交易。
因此,我想在后台对支付进行汇总,当用户累计消费达到$X,或者Y天后,向用户收费。
考虑到每个 Braintree 交易似乎都需要支付随机数,这种方法是否可以实施?如果没有,有人可以提出替代解决方案吗?
非常感谢。
用一句话回答您标题中的问题:不,与 Braintree 的每笔交易都不需要付款随机数。
理论上,可以通过保管您买家的付款方式信息到您的Braintree账户,然后使用保管的付款方式进行充值。一种支付方式在 Braintree 中使用令牌进行保管。然后可以使用付款方式令牌进行付款,而无需买家在场。
但是,买家必须将付款方式授予您。这通常是由买家通过投递表格或自定义表格向您提供 his/her 付款方式信息来完成的,其中 returns 随机数和信息。这需要买家在场。
我建议按照以下 Braintree 参考部分的步骤操作 (https://developers.braintreepayments.com)
- 交易(如何进行基本的one-time交易)
- 客户
- 信用卡
- 交易(如何在没有买家在场的情况下进行交易)
PS,我一开始就说了"theoretically",因为如果你可以/不能用金库来做,取决于你的购买流程,也取决于你的买家是否愿意那样做.
PS 同样,可以这样使用保险支付方式令牌(在 PHP 中):
Braintree_Transaction::sale(array(
'amount' => '10.00',
'paymentMethodToken' => $the_payment_method_token,
'options' => array(
'submitForSettlement' => true
)
));
对于每个 Braintree 交易,付款方式都不需要 nonce。买方通过dropin form或custom form提供his/her信息,其中returns支付随机数方式,我们将信息发送到braintree并得到payment_method_token
。写在 python.
@login_required
def clienttoken(request):
result = braintree.Customer.create({
"first_name": "XXXX",
"last_name": "XXX",
"company": "XXX",
"email": "XXXX",
"phone": "312.555.1234",
"fax": "614.555.5678",
"website": "www.example.com",
"credit_card": {
"cardholder_name": "XXX",
"number": "XXXX",
"expiration_date": "XXX",
"options": {
"verify_card": True,
},
},
})
client_token = braintree.ClientToken.generate({"customer_id": result.customer.id})
request.session['customer_id'] = result.customer.id
return render(request, "braintree/checkout.html", {"client_token": client_token})
@csrf_exempt
def checkout(request):
customer_id = request.session['customer_id']
nonce = request.POST['payment_method_nonce']
result = braintree.PaymentMethod.create({
"customer_id": customer_id,
"payment_method_nonce": nonce,
"options": {
"verify_card": True,
}
})
return HttpResponse(result.payment_method.token)
我们对 braintree 的每一笔交易都使用 payment_method_token。
result = braintree.Transaction.sale({
"amount": "400",
"payment_method_token": "token",
"options": {
"submit_for_settlement": "true",
}
})
我正在开发一个类似市场的应用程序,它支持通过 Braintree 进行支付处理。但是,我的大部分交易都非常小,考虑到 Braintree 的收费率,我不可能在用户每次购买时都处理交易。
因此,我想在后台对支付进行汇总,当用户累计消费达到$X,或者Y天后,向用户收费。
考虑到每个 Braintree 交易似乎都需要支付随机数,这种方法是否可以实施?如果没有,有人可以提出替代解决方案吗?
非常感谢。
用一句话回答您标题中的问题:不,与 Braintree 的每笔交易都不需要付款随机数。
理论上,可以通过保管您买家的付款方式信息到您的Braintree账户,然后使用保管的付款方式进行充值。一种支付方式在 Braintree 中使用令牌进行保管。然后可以使用付款方式令牌进行付款,而无需买家在场。
但是,买家必须将付款方式授予您。这通常是由买家通过投递表格或自定义表格向您提供 his/her 付款方式信息来完成的,其中 returns 随机数和信息。这需要买家在场。
我建议按照以下 Braintree 参考部分的步骤操作 (https://developers.braintreepayments.com)
- 交易(如何进行基本的one-time交易)
- 客户
- 信用卡
- 交易(如何在没有买家在场的情况下进行交易)
PS,我一开始就说了"theoretically",因为如果你可以/不能用金库来做,取决于你的购买流程,也取决于你的买家是否愿意那样做.
PS 同样,可以这样使用保险支付方式令牌(在 PHP 中):
Braintree_Transaction::sale(array(
'amount' => '10.00',
'paymentMethodToken' => $the_payment_method_token,
'options' => array(
'submitForSettlement' => true
)
));
对于每个 Braintree 交易,付款方式都不需要 nonce。买方通过dropin form或custom form提供his/her信息,其中returns支付随机数方式,我们将信息发送到braintree并得到payment_method_token
。写在 python.
@login_required
def clienttoken(request):
result = braintree.Customer.create({
"first_name": "XXXX",
"last_name": "XXX",
"company": "XXX",
"email": "XXXX",
"phone": "312.555.1234",
"fax": "614.555.5678",
"website": "www.example.com",
"credit_card": {
"cardholder_name": "XXX",
"number": "XXXX",
"expiration_date": "XXX",
"options": {
"verify_card": True,
},
},
})
client_token = braintree.ClientToken.generate({"customer_id": result.customer.id})
request.session['customer_id'] = result.customer.id
return render(request, "braintree/checkout.html", {"client_token": client_token})
@csrf_exempt
def checkout(request):
customer_id = request.session['customer_id']
nonce = request.POST['payment_method_nonce']
result = braintree.PaymentMethod.create({
"customer_id": customer_id,
"payment_method_nonce": nonce,
"options": {
"verify_card": True,
}
})
return HttpResponse(result.payment_method.token)
我们对 braintree 的每一笔交易都使用 payment_method_token。
result = braintree.Transaction.sale({
"amount": "400",
"payment_method_token": "token",
"options": {
"submit_for_settlement": "true",
}
})