Зарядите карточку конкретного клиента в Stripe - PullRequest
0 голосов
/ 21 октября 2018

TLDR;Я хочу, чтобы клиенты могли размещать заказы, используя ранее использованную / сохраненную карту по своему выбору в моем приложении.Для этого требуется возможность указать для чередования «какую» карту (ранее связанную с клиентом) взимать. Это должно быть возможно теоретически в соответствии с документами , но на практике мне не везет.

Хорошо ... разговор дешев, вот коды:

// pseudo code of a customer placing an order for the first time
var stripe = require("stripe")(".....");

(async function(userId, cardToken) {
    // Create a Customer AND save the payment method
    const customer = await stripe.customers.create({
        source: cardToken.id, // e.g. 'tok_mastercard'  (retrieved from stripe.js)
        email: 'paying.user@example.com',
    });

    // Charge the Customer instead of the card:
    const charge = await stripe.charges.create({
        amount: 1000,
        currency: 'usd',
        customer: customer.id
    });

    // save customer id to DB
    await setCustomerIdToDatabase(userId, customer.id);

    // save Card ID (not the card token ID) to DB
    await addCustomerCardToDatabase(userId, cardToken.card.id); // <= note cardToken".card".id  e.g. card_kldlkns...

})(userId, cardToken /* <= provided by app*/);

Пока все хорошо.Stripe сохранил карту с указанного токена в качестве способа оплаты по умолчанию для вновь созданного клиента, а затем успешно снял ее.Но затем начинается моя боль ...

// pseudo code of a customer placing subsequent orders (WITH NEW CARDS)
var stripe = require("stripe")(".....");

(async function(userId, cardToken) {

    const customerId = await getCustomerIdFromDatabase(userId);

    // Create a Customer AND save the payment method
    await stripe.customers.createSource(
        customerId,
        { 
            source: cardToken.id, // e.g. 'tok_mastercard'  (retrieved from stripe.js)
        }
    );

    // Attempt to charge the newly added card instead the Customer:
    const charge = await stripe.charges.create({
        amount: 1000,
        currency: 'usd',
        customer: customerId,
        source: cardToken.card.id // <= note cardToken".card".id  e.g. card_kldlkns...
    });

    /////////ERROR TRHOWN: No such token: card_kldlkns...
    ///////// what? I just saved it with .customers.createSource and you said it was OK???

    /// unreachable code

    // save Card ID (not the card token ID) to DB
    await addCustomerCardToDatabase(userId, cardToken.card.id); // <= note cardToken".card".id  e.g. card_kldlkns...

})(userId, cardToken /* <= provided by app*/);

Неудачно ... И так же, как это

// pseudo code of a customer placing subsequent orders (WITH SAVED CARDS)
var stripe = require("stripe")(".....");

(async function(userId, savedCardId) {

    const customerId = await getCustomerIdFromDatabase(userId);

    // Attempt to charge the newly added card instead the Customer:
    const charge = await stripe.charges.create({
        amount: 1000,
        currency: 'usd',
        customer: customerId,
        source: savedCardId  //  e.g card_kldlkns...
    });

    /////////ERROR TRHOWN: No such token: card_kldlkns...
    ///////// what??????

})(userId, savedCardId /* <= provided by app*/);

Что я не получаю здесь? В документах четко сказано, что Stripe хочет вернуть card.id и customer.id , если я хочу снять с определенной карты.

Любая помощь приветствуется

1 Ответ

0 голосов
/ 22 октября 2018

Оказывается, это вообще не было проблемой.

Было неисправное условие - коды вызывали неверный метод API с полосами

...