Braintree Transaction Sale 存储在 valult 中并正确使用 nonce 和 token

Braintree Transaction Sale storing in valult and proper use of nonce and token

我有几个问题:

我可以在销售中存储信用 card/paypal 方法同时防止重复吗?或者在使用 storeInVaultOnSuccess 时重复只会产生错误。 "duplicate method" 错误会导致销售失败吗?

我可以使用 Braintree_Transaction::sale 创建客户吗? "duplicate customer" 错误会导致销售失败吗?

有没有办法结合起来为 paymentMethodNoncepaymentMethodToken 做一个 "either/or"?

最后一个安全问题。 Braintree 是否确保客户的 paymenthMethodToken 与销售的 customerId 匹配?确保一个客户方法的令牌不能用于完成另一个客户的销售。

if($paymentMethodNonce){
  if($save){
    $create=Braintree_PaymentMethod::create([
      "customerId"=>$customerId,
      "paymentMethodNonce"=>$paymentMethodNonce,
      "options"=>["failOnDuplicatePaymentMethod"=>true]
    ]);      
  }
  $sale=Braintree_Transaction::sale([
    "amount"=>$cost,
    "paymentMethodNonce"=>$paymentMethodNonce,
    "customerId"=>$customerId
  ]);
}
else if($paymentMethodToken){
  $sale=Braintree_Transaction::sale([
    "amount"=>$cost,
    "paymentMethodToken"=>$paymentMethodToken,
    "customerId"=>$customerId
  ]);
}

您可以在销售交易中创建客户和付款方式,但它们确实会在重复项上产生错误,从而导致销售失败。最好的方法就是创建并忽略错误

$create_customer=Braintree_Customer::create([
  "id"=>$id,
]);
$create_payment_method=Braintree_PaymentMethod::create([
  "customerId"=>$login,
  "paymentMethodNonce"=>$method
]);

接下来,paymentMethodNonce和paymentMethodToken结合的唯一方法就是根据正在处理的来切换。

$TokenOrNonceType="paymentMethodToken"; or $TokenOrNonceType="paymentMethodNonce";
$sale=Braintree_Transaction::sale([
  "amount"=>$cost,
  $TokenOrNonceType=>$TokenOrNonce,
  "customerId"=>$customerId
]);

最后,最后一个问题我还是不太确定。 Braintree 是否确保客户的 paymenthMethodToken 与销售的 customerId 匹配?确保一个客户方法的令牌不能用于完成另一个客户的销售。谢谢

为了回答您的最后一个问题,如果您在创建销售时同时包含 paymentMethodTokencustomerId,我们要求 paymentMethodToken 属于所提供的指定客户customerId。如果它不属于指定的客户,我们将抛出代码为 91516Transaction Error(不能同时提供 payment_method_token 和 customer_id,除非 payment_method 属于客户)。