完成交易后,在保险库下有两个客户入场。
我接下来的步骤:
1. Created customer.
//first customer vault entry is created at this point
$customerParams = Braintree_Customer::create(array(
'firstName' => $firstName,
'lastName' => $lastName,
));
2.然后生成clientToken
Braintree_ClientToken::generate(array(
"customerId" => $customerParams->customer->id
));
3.然后在api的帮助下成功地在js中生成了nonce:
var client = new braintree.api.Client({clientToken: ctoken});
client.tokenizeCard({
...
...
});
4.此时此新客户已创建
Braintree_Transaction::sale(array(
'amount' => $mapCidInvoiceID['amount'],
'orderId' => $redirectParams['invoiceID'],
'paymentMethodNonce' => $nonce,
'options' => array(
'storeInVaultOnSuccess' => true,
),
));
我的代码中有什么问题吗?为什么一个交易创建了两个客户记录?对于第一个记录,记录名字和姓氏。但第二种情况没有存储这样的细节。 第二步和第三步需要首先创建客户。
答案 0 :(得分:2)
完全披露:我在Braintree工作。
您的代码正在创建两个单独的客户,因为当您调用Transaction :: sale时,它没有来自您的Customer :: create调用的客户,并且您可以选择将付款方式存储在Vault中成功。这样可以在从交易中保存付款方式时创建客户,因为付款方式必须与客户绑定。要解决您的问题,请在调用Transaction :: sale时将Customer :: create返回的客户ID作为customerId参数传递。
Braintree_Transaction::sale(array(
'amount' => $mapCidInvoiceID['amount'],
'orderId' => $redirectParams['invoiceID'],
'customerId' => $customerParams->customer->id
'paymentMethodNonce' => $nonce,
'options' => array(
'storeInVaultOnSuccess' => true,
),
));