Как работать с различными вариантами тарифного плана с помощью Stripe?

Я использую Laravel и Stripe. В моем приложении есть 5 разных планов подписки. У каждого плана есть свой набор опций, например

Базовый план - максимальное количество кампаний - 20 - максимальное количество писем - 100

План Pro - максимальное количество кампаний - 40 - максимальное количество писем - 200

и т.п.

Как мне представить эти параметры в моей БД?

Я использую кассир Laravel, он прекрасно обрабатывает таблицу подписок, где хранит имя подписки, идентификатор плана полосы и т. Д.

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

Похоже, мне нужна еще одна таблица, например plan_options, где я бы все это хранил. Меня беспокоит, как мне подключить его к этой таблице подписок? вручную? Сразу после того, как пользователь подписался, мне нужно найти имя подписки, которое он выбрал, найти его в таблице plan_options и связать их с помощью идентификатора? это правильный способ сделать это?


person Almazik G    schedule 06.01.2016    source источник
comment
У вас может быть только таблица plan_options и новое поле в таблице подписки с именем plan_id. Во время доступа или в любое время, когда пользователь пытается добавить кампанию - сравните текущее количество кампаний с вариантами плана (максимум).   -  person Ofir Baruch    schedule 06.01.2016


Ответы (1)


Вы можете сохранить plan_options в метаданных плана подписки в Stripe. Таким образом, все остается в одном месте и синхронизация не требуется.

введите здесь описание изображения

Вы можете получить доступ к метаданным с помощью API следующим образом.

Пример запроса:

\Stripe\Stripe::setApiKey("sk_test_ascfadfaeadsfadsfasdfasdfV");

\Stripe\Plan::retrieve("pro");

Пример ответа:

Stripe\Plan JSON: {
  "id": "pro",
  "object": "plan",
  "amount": 1000,
  "created": 1453123864,
  "currency": "usd",
  "interval": "month",
  "interval_count": 1,
  "livemode": false,
  "metadata": {
    "campaigns_limit": "40",
    "emails_limit": "200"
  },
  "name": "Pro Plan",
  "statement_descriptor": null,
  "trial_period_days": 30
}

При наличии множества планов подписки централизованная информация устранит многие сложности.

PS: Ответ содержит строки, а не числа / целые числа в JSON.

person Sagar Ranglani    schedule 18.01.2016
comment
вызывает ли это полосу api каждый раз, когда вы хотите проверить указанные метаданные, или она хранится в базе данных laravel? - person stardust4891; 21.01.2020
comment
Вы можете где-нибудь кэшировать эти данные, если не хотите так часто вызывать Stripe API. Есть компромиссы: хранение этой информации в метаданных планов платежей, хранение всей связанной информации в одном месте (один источник правды). Редкая вероятность рассинхронизации данных. - person Sagar Ranglani; 21.01.2020