我的应用程序正在使用Braintree收取我的申请付款。我希望在付款表单上有一个复选框,可以勾选将信用卡详细信息存储到braintree客户记录中
但是,我无法重复使用生成的同一个nonce来进行付款(我收到错误,说我不能多次使用相同的nonce)。
这就是我想要做的事情:
...
$paymentMethodNonce = $this->input->post("payment_method_nonce");
//make payment
Braintree_Transaction::sale(['paymentMethodNonce' => $paymentMethodNonce,
'orderId' => $orderId,
'merchantAccountId' => $merchantAccountId,
'amount' => $amount,
"options" => ["submitForSettlement" => true]
]);
//create card for existing customer
Braintree_PaymentMethod::create(['paymentMethodNonce' => $paymentMethodNonce,
'customerId' => $customerId,
'options' => ['verifyCard' => true]
]);
...
我不想强迫用户重新输入信用卡详细信息以便保存。
Braintree有没有办法为一个托管表单生成多个nonce?或者有没有比使用复选框更好的存卡方式?
非常感谢
答案 0 :(得分:3)
完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support。
如果您使用version 3 of Braintree's javascript SDK,则可以多次调用hostedFieldsInstance.tokenize()
从同一信用卡信息中创建多个nonce。每次拨打tokenize
都会根据付款方式中的信息创建新的随机数。
如果您使用the Drop-In form, or version 2 of the javascript SDK,则无法使用同一组信用卡信息创建多个nonce。但是,您仍然可以使用单个nonce为客户创建信用卡并创建交易。为此,请使用nonce在Braintree Vault中为客户创建信用卡记录。操作会使用随机数,因此您无法再次使用它来创建事务。而是使用您刚刚创建的付款方式来创建交易。请注意,您也可以将此工作流用于从JS SDK的第3版生成的单个nonce。
$paymentMethodResult = Braintree_PaymentMethod::create([
'paymentMethodNonce' => $paymentMethodNonce,
'customerId' => $customerId,
'options' => ['verifyCard' => true]
]);
// now use the payment method you just created to run the transaction
$newPaymentMethodToken = $paymentMethodresult->paymentMethod->token;
$transactionResult = Braintree_Transaction::create([
'paymentMethodToken' = $newPaymentMethodToken,
'amount' = '20.00',
'options' => ['submitForSettlement' => true]
]);