使用一个托管表单生成多个Braintree支付方法nonce

时间:2016-10-13 00:10:24

标签: php braintree

我的应用程序正在使用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?或者有没有比使用复选框更好的存卡方式?

非常感谢

1 个答案:

答案 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]
]);