如何使用braintree BTDropInController来创建subcripttion,以标识所选付款方式的paymentMethod令牌?

时间:2019-05-15 06:14:39

标签: node.js swift braintree

如何知道用户从dropIn UI(存储在库中)中选择了哪张卡?

快捷代码:

let dropIn = BTDropInController(authorization: clientTokenOrTokenizationKey, request: request)
{ (controller, result, error) in
    if (error != nil) {
        print("ERROR")
    } else if (result?.isCancelled == true) {
        print("CANCELLED")
    } else if let result = result {
        // Use the BTDropInResult properties to update your UI
        // result.paymentOptionType
        // result.paymentMethod
        // result.paymentIcon
        // result.paymentDescription
        let urlString = fullURLString(baseURL: baseURL(), apiPath: CHECKOUT_API_PATH)
        let parameters: [String: Any] = [
           "payment_method_nonce" : result.paymentMethod?.nonce ?? ""
        ]

        // ??????????????????? how to get paymentMethod Token?????
    }
}

对于 交易 ,我们可以使用result.paymentMethod?.nonce。

Node.js:

gateway.transaction.sale({
    amount: "1.00",
    paymentMethodNonce: nonceFromTheClient, // result.paymentMethod?.nonce ?? from iOS
    options: {
      submitForSettlement: true
    }
  }, function (err, result) {
});

但是对于 订阅 ,我们需要使用paymentMethodToken,但是我们如何知道用户选择了哪一个呢?

Node.js:

gateway.subscription.create({
    paymentMethodToken: ???,
    planId: "goldPlanID"
}, function (err, result) {
    console.log('subscription result:', result);
    console.log('subscription err:', err);

    res.send(result)
});

通过在客户中使用查找功能,我们可以获得付款方式(但我们不知道用户在客户端/ iOS端选择了哪一个:

Node.js:

gateway.customer.find(customerBraintreeID, function(err, customer) {
...
}

PaymentMethods.token

{
"paymentMethods":
[ CreditCard {
...
token: 'jxxxxx',
uniqueNumberIdentifier: 'xxxxxxxxxx',
updatedAt: 
venmoSdk: false,
verifications: [],
maskedNumber: '411111******1111',
expirationDate: '01/2020' }
...
}]

1 个答案:

答案 0 :(得分:1)

完全公开,我在Braintree工作。如有其他问题,请联系Support

您可以使用从Drop-in UI返回的付款方式随机数创建订阅。您不需要使用付款方式令牌。与其传递paymentMethodToken,不如使用paymentMethodNonce。来自Braintree开发文档:

  

在将付款方式与预订相关联之前,必须先对付款方式进行保管,因此通常最简单的方式是使用其PaymentMethodToken引用付款方式。但是,在两种情况下,您可以传递付款方式随机数而不是付款方式令牌:

     
      
  • 如果随机数是由我们的Drop-in UI生成的,并且您在生成客户令牌时传递了customerId,或者
  •   
  • 如果随机数是通过拥有订阅的客户的拱形付款方式生成的,则
  •   

例如,您的请求将如下所示:

gateway.subscription.create({
    paymentMethodNonce: nonceFromTheClient,
    planId: "goldPlanID"
}, function (err, result) {
    console.log('subscription result:', result);
    console.log('subscription err:', err);

    res.send(result)
});