Как определить токен paymentMethod для выбранного варианта оплаты, используя Braintree BTDropInController для создания подписок? - PullRequest
1 голос
/ 15 мая 2019

Как узнать, какую карту выбрал пользователь из интерфейса dropIn (который хранится в хранилище)?

Код Swift:

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 Ответ

1 голос
/ 15 мая 2019

Полное раскрытие, я работаю в Braintree.Обратитесь в службу поддержки , если у вас возникнут дополнительные вопросы.

Для создания подписок вы можете использовать одноразовый метод оплаты, возвращаемый из пользовательского интерфейса.Вам не нужно использовать метод оплаты токен.Вместо передачи paymentMethodToken используйте paymentMethodNonce.Из документации разработчика Braintree:

Перед тем, как связать его с подпиской, должен быть сохранен способ оплаты, поэтому обычно проще всего обратиться к способу оплаты, используя его paymentMethodToken.Однако есть 2 случая, когда вы можете передать одноразовый номер метода оплаты вместо токена метода оплаты:

  • Если одноразовый номер был сгенерирован нашим 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)
});
...