【问题标题】:Generating multiple Braintree payment method nonce using one hosted form使用一个托管表单生成多种 Braintree 支付方式 nonce
【发布时间】:2017-02-21 22:42:23
【问题描述】:

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

非常感谢

【问题讨论】:

    标签: php braintree


    【解决方案1】:

    全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系support

    如果您使用的是version 3 of Braintree's javascript SDK,您可以通过多次调用hostedFieldsInstance.tokenize() 从同一信用卡信息创建多个随机数。每次调用tokenize 都会根据付款表单中的信息创建一个新的随机数。

    如果您使用the Drop-In form, or version 2 of the javascript SDK,则不能从同一组信用卡信息中创建多个随机数。但是,您仍然可以使用单个 nonce 为客户创建信用卡并创建交易。为此,请在 Braintree Vault 中为具有 nonce 的客户创建信用卡记录。 nonce 被操作消耗,因此您不能再次使用它来创建事务。相反,请使用您刚刚创建的付款方式来创建交易。请注意,您也可以将此工作流与从 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]
    ]);
    

    【讨论】:

    • 我注意到的另一件事是:当我尝试使用 Braintree_Transaction::create 函数和 failOnDuplicatePaymentMethod 选项作为 true 来保存重复的卡时,它按预期返回 false。但是我可以重复使用付款方式 nonce.. 这是故意的吗?我以为每个 nonce 只能发送一次?
    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 2017-12-25
    • 2017-01-07
    • 2017-05-17
    • 2015-07-12
    • 1970-01-01
    • 2015-11-14
    • 2020-12-16
    相关资源
    最近更新 更多