如何知道用户从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' }
...
}]
答案 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)
});