Использование Stripe Intents API с биллингом (повторяющиеся подписки) - PullRequest
6 голосов
/ 28 марта 2019

Я пробовал трех разных людей из службы поддержки Stripe, чтобы получить четкий ответ на этот вопрос. Кажется, никто не знает, как решить эту проблему. Я хочу подписать клиента на постоянную подписку с помощью Stripe. При выборе плана отображается форма кредитной карты. Клиенты вводят информацию о кредитной карте и нажимают Оплатить, и подписка создана.

Я сделал это с помощью Stripe.js и токенов, добавив немного JavaScript в мой клиент:

function pay() {
    stripe.createToken(card).then(function (result) {
        if (result.error) {
            // Do something
        } else {
            var token = result.token.id;
            $.post("/api/subscriptions/create?token=" + token, ...);
        }
    });
}

На сервере я поставил токен клиенту (примеры на C #, но может быть любым):

customerService.Update(customerId, new CustomerUpdateOptions
{
    SourceToken = token,
});

и создайте подписку:

var items = new List<SubscriptionItemOption> {
    new SubscriptionItemOption {
        PlanId = newPlanId,
    },
};
var subscriptionCreateOptions = new SubscriptionCreateOptions
{
    CustomerId = customerId,
    Items = items,
};
Subscription subscription = stripe.Subscriptions.Create(subscriptionCreateOptions);

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

Я должен быть счастлив сейчас, но я не счастлив. При тестировании приведенного выше кода он не работает для карт, требующих 3D-безопасности и аналогичных расширенных проверок подлинности. В этом случае я получаю сообщение об ошибке от Stripe при создании подписки, в котором говорится, что карта недействительна (я полагаю, поскольку мы никогда не выполняли 3D-аутентификацию).

Из того, что я могу понять из документации Stripe, для отображения диалогового окна 3D-аутентификации потребуется использовать Checkout или Intents API. Я не хочу использовать Checkout, но Intents API выглядит как правильный выбор.

Используя намерения, мне нужно сначала спросить намерение:

var createOptions = new PaymentIntentCreateOptions {
  Amount = 4900,
  Currency = "usd",
  PaymentMethodTypes = new List<string> { "card" }
};
paymentIntents.Create(createOptions);

Это выдает секрет клиента, который я отправляю обратно своему клиенту. Вместо того, чтобы звонить createToken. На клиенте я вызываю функцию handleCardPayment, которая показывает 3D-режим защиты в случае, если это необходимо:

stripe.handleCardPayment(
    clientSecret, cardElement
  ).then(function(result) {
    if (result.error) {
      // Display error.message in your UI.
    } else {
      $.post("/api/subscriptions/create?...");
    }
  });

Проблема заключается в том, что handleCardPayment взимает плату с клиента. Я не хочу этого, потому что хочу автоматически выставлять счет клиенту каждый месяц.

Кто-нибудь знает, возможно ли показать 3D-безопасность (и тому подобное) без использования намерений или хотя бы без создания платы? Я читал похожие вопросы, где люди рекомендуют создать плату, а затем создать подписку с пробной версией 1 месяц. Это не имеет эффекта, которого я хочу, так как это создаст оплату в первый месяц и счет-фактуру в следующие месяцы.

По сути, я просто хочу простейшее решение, которое по-прежнему показывает диалоговое окно 3D-безопасности.

1 Ответ

7 голосов
/ 28 марта 2019

Stripe в настоящее время работает над интеграцией PaymentIntents с подписками и планирует поддержать этот поток в апреле 2019 года. Как только она будет доступна, вы определенно захотите использовать PaymentIntents. Поскольку это в ближайшем будущем, вы можете просто подождать, пока оно станет доступным.

Если вам нужно, чтобы это сработало, в этом руководстве проведет вас через настройку подписки с первоначальной проверкой 3DS. Это рекомендуемый подход к испытательному периоду, о котором вы говорите.

UPDATE

Дата полной спецификации для способа платежа была перенесена на 1 июля 2019 года в соответствии с Stripe:

ПЛАТЕЖИ ВНЕ СЕССИИ С API ПЛАТЕЖНЫХ ИНТЕНТОВ

Пункт 3, говорящий:

Вам нужно будет вносить дополнительные изменения, чтобы требовать освобождения и уменьшить количество проблем с аутентификацией, требуемых вашим клиенты будут готовы к 1 июля 2019 года.

https://stripe.com/docs/strong-customer-authentication/migration#step-2

...