Перейти к содержанию

01.1.3 Stripe

Версия 1.5.0
Количество листов

Оглавление

История изменений

№ 1 Дата: 15.12.25 Автор: Ляшук Андрей RFC: RPL-2021 Версия: 1.0.0
Изменено:
• В “01.1.3_1.2_1 Процедура обработки сообщения “Callbacks from Stripe””: При создание “Подписки пользователя” добавлен параметр “Свойство необходимости списания оплаты после завершения бесплатных коллабораций”
• Если параметр “Свойство необходимости списания оплаты после завершения бесплатных коллабораций” подписки пользователя - true, добавлена отправка в очередь “Очередь отмены подписки пользователя” сообщение “Подписки пользователя”. В “01.1.3_1.3_3 Процедура получения ссылки для оформления подписки” изменено определение параметра “subscription_data.trial_period_days”.
№ 2 Дата: 21.02.26 Автор: Ляшук Андрей RFC: RPL-2358 Версия: 1.1.0
Изменено:
• В “01.1.3_1.2_1 Процедура обработки сообщения “Callbacks from Stripe””: При создание “Подписки пользователя” убран параметр “Свойство необходимости списания оплаты после завершения бесплатных коллабораций”
• Добавлено определение "Количества коллабораций" для подписки пользователя
• Если не найдена "Подписка", добавлено отправка сообщения в Телеграм.
№ 3 Дата: 07.04.26 Автор: Ляшук Андрей RFC: RPL-2626 Версия: 1.2.0
Изменено:
• В “01.1.3_1.2_1 Процедура обработки сообщения “Callbacks from Stripe”” добавлено определение: "Количества кампаний"
• "Количества локаций"
• “Количество откликов”
• для подписки пользователя.
№ 4 Дата: 17.04.26 Автор: Ляшук Андрей RFC: RPL-2683 Версия: 1.3.0
Изменено:
В “01.1.3_1.2_1 Процедура обработки сообщения “Callbacks from Stripe”” после создания подписки пользователя выполняется проверка на необходимость изменения статуса кампании.
№5 Дата: 02.06.26 Автор:Ляшук Андрей RFC: RPL-XXXX Версия: 1.4.0
Изменено:
• В "01.1.3_1.3_3 Процедура получения ссылки для оформления подписки" уточнено определение параметра "subscription_data.trial_period_days": добавлено условие — параметр передаётся только если для пользователя, который инициировал данную процедуру, не имеется "Подписки пользователя" (в том числе удалённой).
№6 Дата: 24.06.26 Автор:Ляшук Андрей RFC: RPL-XXXX Версия: 1.5.0
Изменено:
• В "01.1.3_1.3_3 Процедура получения ссылки для оформления подписки" добавлена передача metadata для Checkout Session и Subscription.
• В "01.1.3_1.5_1 Процедура обработки сообщения “User subscription update”" добавлена отправка серверного события "Оформление подписки" в Google Tag Manager в формате Measurement Protocol.
№7 Дата: 17.08.26 Автор:Ляшук Андрей RFC: RPL-2866 Версия: 1.6.0
Изменено:
• В "01.1.3_1.2_1 Процедура обработки сообщения “Callbacks from Stripe”" добавлено сохранение параметра "Дата начала текущего периода".
• В "01.1.3_1.5_1 Процедура обработки сообщения “User subscription update”" добавлено сохранение параметра "Дата начала текущего периода".
№8 Дата: 31.08.26 Автор:Ляшук Андрей RFC: RPL-2885 Версия: 1.7.0
Изменено:
• В "01.1.3_1.4_2 Предустановленных параметрах запроса" добавлен параметр "configuration"
• В "01.1.3_1.4_3 Процедура получения ссылки для перехода в Stripe Customer portal" добавлен параметр "configuration" запроса Create a portal session в зависимости от того, является ли "Бизнес" Бизнес представителя "Отелем".

1. Stripe

Сервис Stripe используется для оформления Подписок, пользователями сервиса. Активная подписка предоставляет пользователю возможность полноценного использования сервиса.

Интеграция с сервисом осуществляется на основе API документации сервиса.

1_1 Переменные окружения

Переменная окружения Описание
STRIPE_HOST Хост для выполнения запросов к сервису.
STRIPE_SECRET_KEY Секретный ключ.
STRIPE_SIGNING_SECRET Секретный ключ подписи.

1_2 Идемпотентность запросов
POST-запросы к сервису должны быть идемпотентными.

Ключ идемпотентности должен генерироваться клиентской частью сервиса и использоваться при выполнении запросов, которые инициируют запросы к сервису Stripe.

Ключ идемпотентности является строка, которая генерируется согласно стандарту “V4 UUIDs”.

1_3 Логирование запросов
Все запросы к сервису Stripe должны логироваться.

Запись лога должна содержать:

  1. Url запроса;
  2. Ключ идемпотентности;
  3. Http-код ответа;
  4. Тело запроса;
  5. Тело ответа.

Срок хранения записей логирования - 1 месяц.

1.1 Получение событий

Сервис Stripe предоставляет возможность получать информацию о событиях которые происходят в сервисе.

1.1_1 Верификация запросов
Все запросы полученные от сервиса должны быть верифицированы.

01.1.3_1.1_1 Процедура получения события от сервиса Stripe
  1. Сервисом “Stripe” выполняется POST-запрос по адресу который указан в переменной окружения STRIPE_WEBHOOK_URL.
  2. Выполняется верификация запроса согласно “1.1_1 Верификация запросов”.
  3. В брокер сообщений “Обработка callback от Stripe” добавляется сообщение “Callback-уведомление от Stripe” которое содержит информацию о callback-уведомлении.
  4. На запрос выполненный на этапе 1 данной процедуры, возвращается ответ - HTTP CODE \= 200.

1.2 Очередь сообщений “Callbacks from Stripe”

Очередь предназначена для обработки webhook от сервиса Stripe.

Очередь состоит из:

  1. Брокера сообщений который предназначен для хранения информации о callback-уведомлении которое должно быть обработано.
  2. Обработчика сообщений.

Повторная отправка сообщения очереди “Callbacks from Stripe”

Если сообщение не было обработано Обработчиком сообщений, должна выполняться повторная отправка сообщения Обработчику сообщений согласно настройкам повторной отправки сообщений.

Настройки повторной отправки сообщений

Настройка Значение Описание
Первоначальная отсрочка 30000 Первоначальная отсрочка отправки сообщения в миллисекундах.
Количество попыток 30 Количество повторных попыток отправки сообщения
Множитель отсрочки 1

1.2_1 Параметры сообщения “Callbacks from Stripe”

Название Ключ Значение
Подпись запроса stripe-signature Согласно значению заголовка “stripe-signature”.
Тело запроса body Согласно телу запроса.
01.1.3_1.2_1 Процедура обработки сообщения “Callbacks from Stripe”
  1. Наступает время обработки сообщения брокер отправляет сообщение обработчику сообщений.
  2. Обработчик получает сообщение “Callbacks from Stripe”.
  3. Выполняется логирование события с Payload:
  4. event - "received";
  5. title - “Callbacks from Stripe”;
  6. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
  7. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
  8. Если верификация запроса:
  9. Выполнена не успешно:
    1. Выполняется логирование события с Payload:
      1. title - “Callbacks from Stripe”;
      2. error - “Request verification error”;
      3. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
      4. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
    2. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “Callback from Stripe has not been processed. Reason: request verification error”.
    3. Брокеру сообщений возвращается информация о том что сообщение было обработано;
    4. Дальнейшие этапы процедуры не выполняются.
  10. Выполнена успешно выполняется этап “6” данной процедуры.
  11. Если в теле запроса, сообщения “Callbacks from Stripe” не имеется параметра "type", выполняется:
    1. Выполняется логирование события с Payload:
      1. event - "processed";
      2. title - “Callbacks from Stripe”;
      3. info - “Event type is missing”;
      4. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
      5. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
    2. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “Callback from Stripe has not been processed. Reason: event type is missing”.
    3. Брокеру сообщений возвращается информация о том что сообщение было обработано;
    4. Дальнейшие этапы процедуры не выполняются.
  12. Если в теле запроса, сообщения “Callbacks from Stripe” имеется параметр "type" и значение параметра не “customer.created”/“customer.deleted”/“customer.subscription.created”/“customer.subscription.updated”/“customer.subscription.deleted”, выполняется:
    1. Выполняется логирование события с Payload:
      1. event - "processed";
      2. title - “Callbacks from Stripe”;
      3. info - “Event type is not supported”;
      4. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
      5. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
    2. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “Callback from Stripe has not been processed. Reason: event type is not supported”.
    3. Брокеру сообщений возвращается информация о том что сообщение было обработано;
    4. Дальнейшие этапы процедуры не выполняются.
  13. Если в теле запроса, сообщения “Callbacks from Stripe” имеется параметр "type" и значение параметра “customer.created”, выполняется этап “7” данной процедуры;
  14. Если в теле запроса, сообщения “Callbacks from Stripe” имеется параметр "type" и значение параметра “customer.deleted”, выполняется этап “8” данной процедуры;
  15. Если в теле запроса, сообщения “Callbacks from Stripe” имеется параметр "type" и значение параметра “customer.subscription.created”, выполняется этап “9” данной процедуры;
  16. Если в теле запроса, сообщения “Callbacks from Stripe” имеется параметр "type" и значение параметра “customer.subscription.updated”, выполняется этап “9” данной процедуры;
  17. Если в теле запроса, сообщения “Callbacks from Stripe” имеется параметр "type" и значение параметра “customer.subscription.deleted”, выполняется этап “9” данной процедуры.
  18. Выполняется:
  19. Если не имеется “Пользователя” значение параметра “Email” которого соответствует значению параметра “data.object.email” тела запроса:
    1. Выполняется логирование события с Payload:
      1. event - "processed";
      2. title - “Callbacks from Stripe”;
      3. info - “Event type “customer.created”, user not found”;
      4. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
      5. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
    2. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “Callback from Stripe has not been processed. Reason: event type “customer.created”, user not found. Stripe customer - {согласно значению параметра “data.object.email”}”.
    3. Брокеру сообщений возвращается информация о том что сообщение было обработано.
    4. Дальнейшие этапы процедуры не выполняются.
  20. Если имеется “Пользователь” значение параметра “Email” которого соответствует значению параметра “data.object.email” тела запроса:
    1. Изменяются параметры данного “Пользователя”:
      1. Идентификатор пользователя в stripe - изменяется согласно значению параметра “data.object.id” тела запроса.
    2. Брокеру сообщений возвращается информация о том что сообщение было обработано.
    3. ​​Дальнейшие этапы процедуры не выполняются.
  21. Выполняется:
  22. Если не имеется “Пользователя” значение параметра “Идентификатор пользователя в stripe” которого соответствует значению параметра “data.object.id” тела запроса:
    1. Выполняется логирование события с Payload:
      1. event - "processed";
      2. title - “Callbacks from Stripe”;
      3. info - “Event type “customer.deleted”, user not found”;
      4. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
      5. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
    2. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “Callback from Stripe has not been processed. Reason: event type “customer.deleted”, user not found. Stripe customer - {согласно значению параметра “data.object.email”}”.
    3. Брокеру сообщений возвращается информация о том что сообщение было обработано.
    4. Дальнейшие этапы процедуры не выполняются.
  23. Если имеется “Пользователь” значение параметра “Идентификатор пользователя в stripe” которого соответствует значению параметра “data.object.id” тела запроса:
    1. Изменяются параметры данного “Пользователя”:
      1. Идентификатор пользователя в stripe удаляется.
    2. Брокеру сообщений возвращается информация о том что сообщение было обработано.
    3. Дальнейшие этапы процедуры не выполняются.
  24. Выполняется:
  25. Если значение параметра “data.object.status”
    1. “incomplete” или “incomplete_expired”:
      1. Брокеру сообщений возвращается информация о том что сообщение было обработано.
      2. Дальнейшие этапы процедуры не выполняются.
    2. Не “incomplete” выполняется этап “9_b”.
    1. Если не имеется “Пользователя” значение параметра “Идентификатор пользователя в stripe” которого соответствует значению параметра “data.object.customer” тела запроса и значение параметра "type" в теле запроса:
      1. “customer.subscription.deleted” выполняется:
        1. Удаление данной “Подписки пользователя”;
        2. Создание “Уведомления” с параметрами:
        3. Дата создания - согласно текущей дате;
        4. Идентификатор пользователя - Идентификатор пользователя, к которому относится “Подписка пользователя” которая была изменена;
        5. Тип - email;
        6. Идентификатор динамического шаблона: 23 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “business_representative”; 24 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “influencer”.
        7. Параметры уведомления: “ripplaSubscriptionPageLink” :
          “https://app.rippla.com/subscription”.
        8. Статус - “new”.
        9. В очередь “Отправка email-уведомлений через сервис Sendgrid” добавляется сообщение “Email-уведомление” с параметрами:
        10. Идентификатор уведомления - идентификатор уведомления которое было создано на этапе “9_b_i_1_b” данной процедуры.
        11. Брокеру сообщений возвращается информация о том что сообщение было обработано;
        12. Дальнейшие этапы процедуры не выполняются.
      2. Не “customer.subscription.deleted”:
        1. Выполняется логирование события с Payload:
        2. title - “Callbacks from Stripe”;
        3. error - “Event type “customer.subscription”, user not found”;
        4. data.stripe-signature - Подпись запроса, которая была получена в сообщении для которого была инициирована данная процедура;
        5. data.body - Тело запроса, которое было получено в сообщении для которого была инициирована данная процедура.
        6. Брокеру сообщений не возвращается информация о том что сообщение было обработано;
        7. Если сообщение “Callbacks from Stripe” удаляется из очереди в очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
        8. text - “Callback from Stripe has not been processed. Reason: event type “customer.subscription”, user not found. Stripe customer ID - {согласно значению параметра “data.object.customer”}”.
        9. Дальнейшие этапы процедуры не выполняются.
    2. Если имеется “Пользователь” значение параметра “Идентификатор пользователя в stripe” которого соответствует значению параметра “data.object.customer” тела запроса и для данного “Пользователя”:
      1. Имеется “Подписка пользователя” и:
        1. Имеется значение для параметра “Идентификатор stripe” и:
        2. Значение параметра “Идентификатор stripe” не соответствует значению параметра “data.object.id” выполняется:
          1. Удаление данной “Подписки пользователя”;
          2. Этап “9_b_iii” данной процедуры.
        3. Значение параметра “Идентификатор stripe” соответствует значению параметра “data.object.id” выполняется:
          1. Изменение параметров данной “Подписки пользователя”:
            1. Дата обновления - согласно текущей дате. Устанавливается если не будет установлена “Дата удаления”;
            2. Дата удаления - согласно текущей дате. Устанавливается если “Статус в stripe” должен быть изменен на “canceled”;
            3. Статус в stripe - согласно значению параметра “data.object.status” тела запроса;
            4. Дата окончания триала - согласно значению параметра “data.object.trial_end” тела запроса;
            5. Дата начала текущего периода - согласно значению параметра “data.object.items[].data.current_period_start” объекта “item” для которого значение параметра “created” максимально;
            6. Дата окончания текущего периода - согласно значению параметра “data.object.items[].data.current_period_end” объекта “item” для которого значение параметра “created” максимально;
            7. Валюта подписки - согласно значению параметра “data.object.items[].data.price.currency” объекта “item” для которого значение параметра “created” максимально;
            8. Стоимость подписки - согласно значению параметра “data.object.items[].data.price.unit_amount” объекта “item” для которого значение параметра “created” максимально;
            9. Интервал подписки - согласно значению параметра “data.object.items[].data.price.recurring.interval” объекта “item” для которого значение параметра “created” максимально;
            10. Количество интервалов - согласно значению параметра “data.object.items[].data.price.recurring.interval_count” объекта “item” для которого значение параметра “created” максимально;
            11. Название цены - согласно значению параметра items[].data.price.nickname объекта item, для которого значение параметра “created” максимально;
            12. Примененный купон - согласно значению discounts.coupon.id;
            13. Примененный промокод - согласно значению discounts.promotion_code;
            14. Идентификатор плана в stripe - согласно значению plan.id;
            15. Количество коллабораций - “Количество коллабораций” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
            16. Количество кампаний - “Количество кампаний” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
            17. Количество локаций - “Количество локаций” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
            18. Количество откликов - “Количество откликов, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса.
          2. Если “Статус в stripe” должен быть изменен на “canceled”, выполняется:
            1. Создание “Уведомления” с параметрами:
              1. Дата создания - согласно текущей дате;
              2. Идентификатор пользователя - Идентификатор пользователя, к которому относится “Подписка пользователя” которая была изменена;
              3. Тип - email;
              4. Идентификатор динамического шаблона: 23 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “business_representative”; 24 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “influencer”.
              5. Параметры уведомления:
                “ripplaSubscriptionPageLink” : “https://app.rippla.com/subscription”.
              6. Статус - “new”.
            2. В очередь “Отправка email-уведомлений через сервис Sendgrid” добавляется сообщение “Email-уведомление” с параметрами:
              1. Идентификатор уведомления - идентификатор уведомления которое было создано на этапе “9_b_ii_1_a_ii_2_a” данной процедуры.
          3. Брокеру сообщений возвращается информация о том что сообщение было обработано;
          4. Дальнейшие этапы процедуры не выполняются.
        4. Не имеется значения для параметра “Идентификатор stripe”:
        5. Выполняется изменение параметров данной “Подписки пользователя”:
          1. Дата обновления - согласно текущей дате;
          2. Идентификатор stripe - согласно значению параметра “data.object.id” тела запроса;
          3. Статус в stripe - согласно значению параметра “data.object.status” тела запроса;
          4. Дата окончания триала - согласно значению параметра “data.object.trial_end” тела запроса;
          5. Дата начала текущего периода - согласно значению параметра “data.object.current_period_start” тела запроса;
          6. Дата окончания текущего периода - согласно значению параметра “data.object.current_period_end” тела запроса;
          7. Валюта подписки - согласно значению параметра “data.object.plan.currency” тела запроса;
          8. Стоимость подписки - согласно значению параметра “data.object.plan.amount” тела запроса;
          9. Интервал подписки - согласно значению параметра “data.object.plan.interval” тела запроса;
          10. Количество интервалов - согласно значению параметра “data.object.plan.interval_count” тела запроса;
          11. Название цены - согласно значению параметра items[].data.price.nickname объекта item, для которого значение параметра “created” максимально;
          12. Примененный купон - согласно значению discounts.coupon.id;
          13. Примененный промокод - согласно значению discounts.promotion_code;
          14. Идентификатор плана в stripe - согласно значению plan.id;
          15. Количество коллабораций - “Количество коллабораций” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
          16. Количество кампаний - “Количество кампаний” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
          17. Количество локаций - “Количество локаций” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
          18. Количество откликов - “Количество откликов” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса.
        6. Если “Статус в stripe” должен быть изменен на “trialing” или “active”, выполняется создание “Уведомления” с параметрами:
          1. Дата создания - согласно текущей дате;
          2. Идентификатор пользователя - Идентификатор пользователя, к которому относится “Подписка пользователя” которая была изменена;
          3. Тип - email;
          4. Идентификатор динамического шаблона:
            1. 25 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “business_representative” и значение параметра “data.object.plan.id” соответсвует “Идентификатору стоимости в stripe” одного из “Планов подписки”, который относится к “Подписке” которая является “Идентификатором базовой подписки”.
            2. 26 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “business_representative” и значение параметра “data.object.plan.id” соответсвует “Идентификатору стоимости в stripe” одного из “Планов подписки”, который относится к “Подписке” которая является “Идентификатором дополнительной подписки”.
            3. 27 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “influencer”.
          5. Параметры уведомления:
            1. “ripplaInfluencersLink” : “https://rippla.com/influencers”. Добавляется если “Идентификатор динамического шаблона” - 25.
            2. “ripplaOffersLink” : “https://app.rippla.com/offers”. Добавляется если “Идентификатор динамического шаблона” - 27.
          6. Статус - “new”.
        7. В очередь “Отправка email-уведомлений через сервис Sendgrid” добавляется сообщение “Email-уведомление” с параметрами:
          1. Идентификатор уведомления - идентификатор уведомления которое было создано на этапе “9_b_ii_1_b_ii” данной процедуры.
        8. Брокеру сообщений возвращается информация о том что сообщение было обработано.
        9. Дальнейшие этапы процедуры не выполняются.
      2. Не имеется “Подписки пользователя” выполняется этап “9_с” данной процедуры.
    3. Если при выполнении этапа “9_b_ii” данной процедуры значение одного из параметров(за исключением “Дата обновления” и “Дата удаления”) “Подписки пользователя” было изменено, выполняется:
      1. Изменение “Даты изменения” подписки пользователя, для которой инициирована данная процедура согласно текущей дате;
      2. Создание “Изменения подписки” с параметрами:
        1. Идентификатор подписки пользователя - Идентификатор подписки пользователя, для которой инициирована данная подписка;
        2. Измененные параметры - формируется как структура данных в формате JSON. Является объектом который содержит параметры и их значения которые были установлены до выполнения этапа “9_b_ii”.
    1. Если:
      1. Имеется “Подписка” которая приоритету получения подписки подходит выше всех, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса, выполняется:
        1. Создание “Подписки пользователя” с параметрами:
        2. Дата создания - согласно текущей дате;
        3. Идентификатор пользователя - идентификатор пользователя, который был определен на этапе “9_b_ii” данной процедуры;
        4. Идентификатор бизнеса - идентификатор бизнеса к которому относится “Бизнес представитель” к которому относится пользователь, который был определен на этапе “9_b_ii” данной процедуры. Определяется если “Роль” пользователя, который был определен на этапе “9_b_ii” данной процедуры “business_representative”.
        5. Идентификатор stripe - согласно значению параметра “data.object.id” тела запроса;
        6. Статус в stripe - согласно значению параметра “data.object.status” тела запроса;
        7. Дата окончания триала - согласно значению параметра “data.object.trial_end” тела запроса;
        8. Дата начала текущего периода - согласно значению параметра “data.object.items[].data.current_period_start” объекта “item” для которого значение параметра “created” максимально;
        9. Дата окончания текущего периода - согласно значению параметра “data.object.items[].data.current_period_end” объекта “item” для которого значение параметра “created” максимально;
        10. Валюта подписки - согласно значению параметра “data.object.items[].data.price.currency” объекта “item” для которого значение параметра “created” максимально;
        11. Стоимость подписки - согласно значению параметра “data.object.items[].data.price.unit_amount” объекта “item” для которого значение параметра “created” максимально;
        12. Интервал подписки - согласно значению параметра “data.object.items[].data.price.recurring.interval” объекта “item” для которого значение параметра “created” максимально;
        13. Количество интервалов - согласно значению параметра “data.object.items[].data.price.recurring.interval_count” объекта “item” для которого значение параметра “created” максимально;
        14. Идентификатор плана в stripe - согласно значению data.object.plan.id;
        15. Количество коллабораций - “Количество коллабораций” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
        16. Количество кампаний - “Количество кампаний” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
        17. Количество локаций - “Количество локаций” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса;
        18. Количество откликов - “Количество откликов” подписки, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса.
        19. Если ”Подписка пользователя” на этапе “9_c_i_1_a” была создана для “Представителя бизнеса” и для него имеется “Кампания” в статусе “Приостановленная” и “Источник изменения контакта” - Отсутствие контакта выполняется:
        20. “07_2.2_3 Процедура изменения Статуса кампании” с параметрами:
          1. id - Идентификатор кампании, который был определен на этапе “9_c_i_1_b” данной процедуры;
          2. status - Активная.
        21. Если значение параметра “email” пользователя, который инициировал выполнение данной процедуры, не содержит ни одного из строковых значений, указанных в настройке “6.20 Список почт офферы с которых не учитываются при создании push-уведомления”, выполняется добавление сообщения “Кампания” в очередь “Определения инфлюэнсеров, которые подходят под кампанию” с параметрами:
          1. campaign_id - Идентификатор кампании, которая была создана на этапе “4_a” данной процедуры.
    2. Не имеется “Подписки”, к которой относится “План подписки”, к которому относится “Цена плана подписки” с “Идентификатором стоимости в stripe” равным значению параметра “data.price.id” тела запроса в очередь “Очередь отправки сообщений в Телеграм”:
      1. Добавляется сообщение “Telegram message” с параметрами:
        1. text - “A Stripe subscription was created for user {user_id}{, business {business_id}}, but no matching subscription plan was found in Rippla. Stripe subscription ID: {data.object.id}.”
      2. Брокеру сообщений возвращается информация о том что сообщение было обработано.
      3. Дальнейшие этапы процедуры не выполняются.
    3. Если “Статус в stripe” подписки пользователя, которая была создана на этапе “9_c_i” данной процедуры:
      1. “trialing” или “active”, выполняется:
        1. Создание “Уведомления” с параметрами:
        2. Дата создания - согласно текущей дате;
        3. Идентификатор пользователя - Идентификатор пользователя, к которому относится “Подписка пользователя” которая была создана;
        4. Тип - email;
        5. Идентификатор динамического шаблона:
          1. 25 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была создана, “business_representative” и значение параметра “data.object.plan.id” соответсвует “Идентификатору стоимости в stripe” одного из “Планов подписки”, который относится к “Подписке” для которой “Тип отображения” - “basic”;
          2. 26 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была создана, “business_representative” и значение параметра “data.object.plan.id” соответсвует “Идентификатору стоимости в stripe” одного из “Планов подписки”, который относится к “Подписке” для которой “Тип отображения” - “addon”;
          3. 27 - если “Роль” пользователя к которому относится “Подписка пользователя” которая была изменена, “influencer”.
        6. Параметры уведомления:
          1. “ripplaInfluencersLink” : “https://rippla.com/influencers”. Добавляется если “Идентификатор динамического шаблона” - 25.
          2. “ripplaOffersLink” : “https://app.rippla.com/offers”. Добавляется если “Идентификатор динамического шаблона” - 27.
        7. Статус - “new”.
        8. Выполняется “01.1.5_1.2_1 Процедура отправки серверного события в Google Tag Manager” с параметрами:
        9. “Код транзакции” - согласно значению параметра “data.object.latest_invoice.id” тела запроса;
        10. “Сумма” - “Стоимость подписки” подписки пользователя, которая была создана на этапе “9_c_i” данной процедуры;
        11. “Валюта” - “Валюта подписки” подписки пользователя, которая была создана на этапе “9_c_i” данной процедуры;
        12. “Email” - “Email” пользователя, к которому относится “Подписка пользователя”, которая была создана на этапе “9_c_i” данной процедуры;
        13. “Идентификатор пользователя” - “Идентификатор” пользователя, к которому относится “Подписка пользователя”, которая была создана на этапе “9_c_i” данной процедуры.
        14. Если “01.1.5_1.2_1 Процедура отправки серверного события в Google Tag Manager” выполнена не успешно:
        15. Выполняется логирование события с Payload:
          1. event - “processed”;
          2. title - “Subscription purchase GTM”;
          3. error - “Subscription purchase GTM event has not been sent”;
          4. data.transaction_id - “Код транзакции”.
        16. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
          1. text - “Subscription purchase GTM event has not been sent. Transaction ID: {Код транзакции}.”
    4. В очередь “Отправка email-уведомлений через сервис Sendgrid” добавляется сообщение “Email-уведомление” с параметрами:
      1. Идентификатор уведомления - идентификатор уведомления которое было создано на этапе “9_с_ii_1” данной процедуры.
    5. Брокеру сообщений возвращается информация о том что сообщение было обработано.
    6. Дальнейшие этапы процедуры не выполняются.

1.3 Запрос “Create a Checkout Session” к сервису Stripe

01.1.3_1.3_1
Настройки параметров запроса должны храниться в “01_06 Настройках сервиса”.

01.1.3_1.3_2 Предустановленные параметры запроса

Параметр Значение
Идентификатор stripe_checkout_session
Значение { "automatic_tax": { "enabled": true }, "allow_promotion_codes": true, "billing_address_collection": "required", "consent_collection": { "terms_of_service": "required" }, "mode": "subscription", "phone_number_collection": { "enabled": false } }
01.1.3_1.3_3 Процедура получения ссылки для оформления подписки
  1. Пользователь инициирует процедуру получения ссылки для оформления подписки.
  2. Клиентской частью сервиса выполняется:
  3. Генерация “Ключа идемпотентности”;
  4. Запрос “Get a subscription link”:
    1. С заголовком:
      1. IdempotencyKey - Ключ идемпотентности, который был сгенерирован на этапе “2_a” данной процедуры.
    2. С параметрами:
      1. url - url страницы на которой пользователь инициировал данную процедуру;
      2. subscription_plan_id - Идентификатор плана подписки который выбрал пользователь при инициации данной процедуры.
  5. Если для “Пользователя”, который инициировал данную процедуру, имеется “Подписка пользователя” на запрос “Get a subscription link” возвращается ошибка “0101”.
  6. Если для “Пользователя”, который инициировал данную процедуру, не имеется “Подписки пользователя” выполняется этап “4” данной процедуры.
  7. Выполняется запрос Create a Checkout Session к сервису Stripe:
  8. С заголовком:
    1. IdempotencyKey - согласно значению которое было указано, как значение заголовка “IdempotencyKey” запроса “Get a subscription link”.
  9. С параметрами:
    1. customer - согласно значению параметра “Идентификатор пользователя в stripe”, пользователя который инициировал данную процедуру. Добавляется если имеется значение для параметра “Идентификатор пользователя в stripe”;
    2. customer_email - согласно значению параметра “Email”, пользователя который инициировал данную процедуру. Добавляется если не имеется значения для параметра “Идентификатор пользователя в stripe”;
    3. line_items - объект который содержит следующие параметры:
      1. price - согласно значению параметра “Идентификатор стоимости в stripe” плана подписки, который был указан при инициации запроса “Get a subscription link”;
      2. quantity - 1.
    4. success_url - формируется как строка: “{значению параметра “url” которое было указано при инициации запроса “Get a subscription link”}{? - добавляется если значение параметра “url” не содержит символ “?”}{& - добавляется если значение параметра “url” содержит символ “?”}{checkout_session=success};
    5. cancel_url - формируется как строка: “{значению параметра “url” которое было указано при инициации запроса “Get a subscription link”};
    6. metadata - объект, который содержит параметры:
      1. user_id - “Идентификатор” пользователя, который инициировал данную процедуру;
      2. subscription_plan_id - “Идентификатор плана подписки”, который был указан при инициации данной процедуры.
    7. subscription_data.metadata - объект, который содержит параметры:
      1. user_id - “Идентификатор” пользователя, который инициировал данную процедуру;
      2. subscription_plan_id - “Идентификатор плана подписки”, который был указан при инициации данной процедуры.
    8. discounts - Массив, который содержит информацию о промокоде:
      1. promotion_code - если для “Пользователя”, который инициировал выполнение данной процедуры не имеется “Подписки пользователя”(в том числе которая была удалена) определяется как “Промокод в stripe” плана подписки, который был указан при инициации данной процедуры. Добавляется если имеется “Промокод в stripe” плана подписки;
    9. tax_id_collection.enabled - true;
    10. customer_update.name - auto. Добавляется если для “Пользователя”, который инициировал данную процедуру имеется “Идентификатор пользователя в stripe”;
    11. customer_update.address - auto. Добавляется если для “Пользователя”, который инициировал данную процедуру имеется “Идентификатор пользователя в stripe”;
    12. subscription_data.trial_period_days - Если "Количество дней триала" подписки, к которой относится "План подписки", который был указан при инициации данной процедуры 1 или больше и для "Пользователя", который инициировал выполнение данной процедуры не имеется "Подписки пользователя" (в том числе которая была удалена) - "Количество дней триала".
    13. Согласно “01.1.3_1.3_2 Предустановленные параметры запроса”. Если предустановленные параметры запроса содержат параметр, который определяется данной процедурой, должно использоваться значение параметра, которое указано в предустановленных параметрах запроса:
      1. Если для “Пользователя”, который инициировал выполнение данной процедуры не имеется “Подписки пользователя”(в том числе которая была удалена) параметр “allow_promotion_codes” не передается.
  10. Если запрос Create a Checkout Session к сервису Stripe не выполнен:
    1. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The checkout session was not created. Reason: Stripe is unavailable. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    2. На запрос “Get a subscription link” возвращается ошибка “0102”. Дальнейшие этапы процедуры не выполняются.
  11. Если запрос Create a Checkout Session к сервису Stripe выполнен не успешно (http-код ответа не “200”):
    1. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The checkout session was not created. Reason: the request returned an error. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    2. На запрос “Get a subscription link” возвращается ошибка “0103”. Дальнейшие этапы процедуры не выполняются.
  12. Если запрос Create a Checkout Session к сервису Stripe выполнен успешно (http-код ответа “200”) и в ответе на запрос не имеется значения для параметра “url”:
    1. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The checkout session was not created. Reason: the response to the request does not contain a link to the checkout session. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}”
    2. На запрос “Get a subscription link” возвращается ошибка “0104”. Дальнейшие этапы процедуры не выполняются.
  13. Если запрос Create a Checkout Session к сервису Stripe выполнен успешно (http-код ответа “200”) и в ответе на запрос имеется значение для параметра “url” на запрос “Get a subscription link” возвращается ответ который содержит “url”, который был получен в ответе на запрос Create a Checkout Session.
  14. Клиентской частью сервиса выполняется переход по “url” который был получен в ответе на запрос “Get a subscription link”.

01.1.3_1.3_3.1 Ошибки при выполнении процедуры 01.1.3_1.3_3

Код ошибки Этап Локаль Текст ошибки
0101 3_a en “The subscription has already been activated. (code: 0101)”
es “La suscripción ya está activada (código: 0101)”
pt "A subscrição já foi ativada. (código: 0101)"
fr
0102 5_a en “Internal error, please try again (code 0102)”
es “Error interno, inténtalo de nuevo más tarde (código: 0102)”
pt “Erro interno, tente novamente (código 0102)”
fr
0103 5_b en “Stripe is unavailable, please try again (code 0103)”
es “Stripe no está disponible, inténtalo de nuevo más tarde (código: 0103)”
pt “O Stripe não está disponível, tente novamente (código 0103)”
fr
0104 5_c en “Stripe is unavailable, please try again (code 0104)”
es “Stripe no está disponible, inténtalo de nuevo más tarde (código: 0104)”
pt “O Stripe não está disponível, tente novamente (código 0104)”
fr

1.4 Запрос “Create a portal session” к сервису Stripe

01.1.3_1.4_1
Настройки параметров запроса должны храниться в “01_06 Настройках сервиса”.

01.1.3_1.4_2 Предустановленные параметры запроса

Параметр Значение
Идентификатор stripe_portal_session
Значение { "influencer": { "configuration": "" }, "business_representative": { "configuration": { "hotel": "", "default": "" } } }
01.1.3_1.4_3 Процедура получения ссылки для перехода в Stripe Customer portal
  1. Пользователь инициирует процедуру получения ссылки для перехода в Stripe Customer portal.
  2. Клиентской частью сервиса выполняется:
  3. Генерация “Ключа идемпотентности”;
  4. Запрос “Get a Customer portal link”:
    1. С заголовком:
      1. IdempotencyKey - Ключ идемпотентности, который был сгенерирован на этапе “2_a” данной процедуры.
    2. С параметрами:
      1. url - url страницы на которой пользователь инициировал данную процедуру;
  5. Если для “Пользователя”, который инициировал данную процедуру, не имеется “Идентификатора пользователя в stripe” на запрос “Get a Customer portal link” возвращается ошибка “0105”.
  6. Если для “Пользователя”, который инициировал данную процедуру, имеется “Идентификатора пользователя в stripe” выполняется этап “4” данной процедуры.
  7. Выполняется запрос Create a portal session к сервису Stripe:
  8. С заголовком:
    1. IdempotencyKey - согласно значению которое было указано, как значение заголовка “IdempotencyKey” запроса “Get a Customer portal link”.
  9. С параметрами:
    1. customer - согласно значению параметра “Идентификатор пользователя в stripe” пользователя, который инициировал данную процедуру;
    2. return_url - формируется как строка: “{значению параметра “url” которое было указано при инициации запроса “Get a Customer portal link”};
    3. Если пользователь который инициировал выполнение данной процедуры:
      1. “Инфлюэнсер” согласно “01.1.3_1.4_2 Предустановленным параметрам запроса”, которые указаны в объекте “influencer”. Если предустановленные параметры запроса содержат параметр, который определяется данной процедурой, должно использоваться значение параметра, которое указано в предустановленных параметрах запроса;
      2. “Бизнес представитель” и “Бизнес”, к которому относится данный “Бизнес представитель”,:
        1. Является «Отелем» - согласно значению параметра “configuration.hotel” в объекте “business_representative” “01.1.3_1.4_2 Предустановленных параметров запроса”;
        2. Не является «Отелем» - согласно значению параметра “configuration.default” в объекте “business_representative” “01.1.3_1.4_2 Предустановленных параметров запроса”.
  10. Если запрос Create a portal session к сервису Stripe не выполнен:
    1. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The portal session was not created. Reason: Stripe is unavailable. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    2. На запрос “Get a Customer portal link” возвращается ошибка “0106”. Дальнейшие этапы процедуры не выполняются.
  11. Если запрос Create a portal session к сервису Stripe выполнен не успешно (http-код ответа “400”) и значение параметра “code” - “resource_missing”:
    1. Изменяются параметры “Пользователя” который инициировал данную процедуру:
      1. Идентификатор пользователя в stripe удаляется;
    2. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The portal session was not created. Reason: customer not found. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    3. На запрос “Get a Customer portal link” возвращается ошибка “0107”. Дальнейшие этапы процедуры не выполняются.
  12. Если запрос Create a portal session к сервису Stripe выполнен не успешно (http-код ответа не “200”):
    1. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The portal session was not created. Reason: the request returned an error. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    2. На запрос “Get a Customer portal link” возвращается ошибка “0108”. Дальнейшие этапы процедуры не выполняются.
  13. Если запрос Create a portal session к сервису Stripe выполнен успешно (http-код ответа “200”) и в ответе на запрос не имеется значения для параметра “url”:
    1. В очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “The portal session was not created. Reason: the response to the request does not contain a link to the portal session. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    2. На запрос “Get a Customer portal link” возвращается ошибка “0109”. Дальнейшие этапы процедуры не выполняются.
  14. Если запрос Create a portal session к сервису Stripe выполнен успешно (http-код ответа “200”) и в ответе на запрос имеется значение для параметра “url” на запрос “Get a Customer portal link” возвращается ответ который содержит “url”, который был получен в ответе на запрос Create a portal session.
  15. Клиентской частью сервиса выполняется переход по “url” который был получен в ответе на запрос “Get a Customer portal link”.

01.1.3_1.4_3.1 Ошибки при выполнении процедуры 01.1.3_1.4_3

Код ошибки Этап Локаль Текст ошибки
0105 3_a en “Stripe account has not been detected. (code: 0105)”
es “No se ha detectado la cuenta de Stripe (código: 0105)”
pt "A conta Stripe não foi detetada. (código: 0105)"
fr
0106 5_a en “Internal error, please try again (code 0106)”
es “Error interno, inténtalo de nuevo más tarde (código: 0106)”
pt “Erro interno, tente novamente (código 0106)”
fr
0107 5_b en “Stripe account has not been detected (code 0107)”
es “No se ha detectado la cuenta de Stripe (código: 0107)”
pt “A conta Stripe não foi detetada (código 0107)”
fr
0108 5_c en “Stripe is unavailable, please try again (code 0108)”
es “Stripe no está disponible, inténtalo de nuevo más tarde (código: 0108)”
pt “O Stripe não está disponível, tente novamente (código 0108)”
fr
0109 5_d en “Stripe is unavailable, please try again (code 0109)”
es “Stripe no está disponible, inténtalo de nuevo más tarde (código: 0109)”
pt “O Stripe não está disponível, tente novamente (código 0109)”
fr

1.5 Очередь сообщений “Update subscription”

Очередь предназначена для получения актуальный информации о подписке пользователя в сервисе Stripe.

Очередь состоит из:

  1. Брокера сообщений который предназначен для хранения информации о “Пользователе” для которого необходимо обновить данные о подписке.
  2. Обработчика сообщений.

Повторная отправка сообщения очереди “Update subscription”

Если сообщение не было обработано Обработчиком сообщений, должна выполняться повторная отправка сообщения Обработчику сообщений согласно настройкам повторной отправки сообщений.

Настройки повторной отправки сообщений

Настройка Значение Описание
Первоначальная отсрочка 60000 Первоначальная отсрочка отправки сообщения в миллисекундах.
Количество попыток 10 Количество повторных попыток отправки сообщения
Множитель отсрочки 1

1.5_1 Параметры сообщения “User subscription update”

Название Ключ Значение
Идентификатор пользователя user_subscription_id

1.5_2 Параметры серверного события “Оформление подписки” в Google Tag Manager

Название Ключ Значение
Событие event subscription_purchase
Код транзакции transaction_id Значение параметра latest_invoice.id, который был получен в ответе на запрос Retrieve a subscription. Если значение не определено, используется "Идентификатор stripe" "Подписки пользователя".
Сумма value "Финальная сумма" "Подписки пользователя". Если значение не определено, используется "Стоимость подписки" "Подписки пользователя". Значение передаётся в основных единицах валюты.
Валюта currency "Валюта подписки" "Подписки пользователя".
Email пользователя email "Email" "Пользователя", к которому относится "Подписка пользователя". Для получателей, которые требуют хеширование email, значение передаётся в хешированном виде.
Идентификатор пользователя user_id "Идентификатор" "Пользователя", к которому относится "Подписка пользователя".

Тело POST-запроса в Google Tag Manager формируется в формате Measurement Protocol:

POST {SERVER_GTM_BACKEND_EVENTS_URL}
Content-Type: application/x-www-form-urlencoded

v=1&
tid=UA-000000-1&
cid={user_id}&
t=event&
ec=backend&
ea=subscription_purchase&
cd1={transaction_id}&
cd2={value}&
cd3={currency}&
cd4={email}&
cd5={user_id}

Соответствие параметров серверного события параметрам Measurement Protocol:

Параметр серверного события Параметр Measurement Protocol
event ea
transaction_id cd1
value cd2
currency cd3
email cd4
user_id cd5

Параметры v, tid, cid, t, ec являются служебными параметрами Measurement Protocol. Значение параметра tid фиксированное: UA-000000-1.

Триггер Google Tag Manager subscription_purchase используется для отделения события “Оформление подписки” от остальных серверных событий, отправленных на путь /backend_events.

Серверная часть сервиса должна обеспечивать идемпотентность отправки события “Оформление подписки” по значению параметра transaction_id.

01.1.3_1.5_1 Процедура обработки сообщения “User subscription update”
  1. Наступает время обработки сообщения брокер отправляет сообщение обработчику сообщений.
  2. Обработчик получает сообщение “User subscription update”.
  3. Выполняется логирование события с Payload:
  4. event - "received";
  5. title - “User subscription update”;
  6. data.user_subscription_id - Идентификатор пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  7. Выполняется запрос Retrieve a subscription к сервису Stripe с параметрами:
  8. ID подписки должен быть указан согласно значению параметра “Идентификатор stripe” подписки пользователя для которой выполняется обработка сообщения;
  9. expand - Массив, который содержит названия полей, который должны быть возвращены в развернутом виде:
    1. latest_invoice;
    2. items.data.price.product.
  10. Если запрос Retrieve a subscription к сервису Stripe не выполнен:
    1. Выполняется логирование события с Payload:
      1. title - “User subscription update”;
      2. error - “Stripe is unavailable”;
      3. data.user_subscription_id - Идентификатор пользователя, который был получен в сообщении для которого была инициирована данная процедура.
    2. Брокеру сообщений не возвращается информация о том что сообщение было обработано;
    3. Если сообщение “User subscription update” удаляется из очереди, в очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “User subscription has not been updated. Reason: Stripe is unavailable. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    4. Дальнейшие этапы процедуры не выполняются.
  11. Если запрос Retrieve a subscription к сервису Stripe выполнен не успешно (http-код ответа не “200”):
    1. Выполняется логирование события с Payload:
      1. title - “User subscription update”;
      2. error - “The request returned an error”;
      3. data.user_subscription_id - Идентификатор пользователя, который был получен в сообщении для которого была инициирована данная процедура.
    2. Брокеру сообщений не возвращается информация о том что сообщение было обработано;
    3. Если сообщение “User subscription update” удаляется из очереди, в очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
      1. text - “User subscription has not been updated. Reason: the request returned an error. {Influencer}(добавляется если “Роль” пользователя который инициировал данную процедуру “influencer”){Business}(добавляется если “Роль” пользователя который инициировал данную процедуру “business_representative”) - {согласно значению параметра “email” пользователя который инициировал данную процедуру}.”
    4. Дальнейшие этапы процедуры не выполняются.
  12. Если запрос Retrieve a subscription к сервису Stripe выполнен успешно (http-код ответа “200”) выполняется:
    1. Изменение параметров “Подписки пользователя”:
      1. Дата обновления - согласно текущей дате. Устанавливается если не будет установлена “Дата удаления”;
      2. Дата удаления - согласно текущей дате. Устанавливается если “Статус в stripe” должен быть изменен на “canceled”;
      3. Статус в stripe - согласно значению параметра “status” тела запроса;
      4. Дата окончания триала - согласно значению параметра “trial_end” тела запроса;
      5. Дата начала текущего периода - согласно значению параметра “items[].data.current_period_start” объекта “item” для которого значение параметра “created” максимально;
      6. Дата окончания текущего периода - согласно значению параметра “items[].data.current_period_end” объекта “item” для которого значение параметра “created” максимально;
      7. Валюта подписки - согласно значению параметра “items[].data.price.currency” объекта “item” для которого значение параметра “created” максимально;
      8. Стоимость подписки - согласно значению параметра “items[].data.price.unit_amount” объекта “item” для которого значение параметра “created” максимально;
      9. Интервал подписки - согласно значению параметра “items[].data.price.recurring.interval” объекта “item” для которого значение параметра “created” максимально;
      10. Количество интервалов - согласно значению параметра “items[].data.price.recurring.interval_count” объекта “item” для которого значение параметра “created” максимально;
      11. Название тарифного плана - согласно значению параметра items[].data.price.product.name объекта item, для которого значение параметра created максимально;
      12. Название цены - согласно значению параметра items[].data.price.nickname объекта item, для которого значение параметра created максимально;
      13. Финальная сумма - согласно значению параметра latest_invoice.total;
      14. Примененный купон - согласно значению discounts.coupon.id;
      15. Примененный промокод - согласно значению discounts.promotion_code;
      16. Дата оплата подписки - согласно значению latest_invoice.status_transitions.paid_at;
      17. Идентификатор плана в stripe - согласно значению plan.id;
      18. Процент скидки купона - согласно значению discount.coupon.percent_off.
    2. Если при выполнении этапа “5_c_i” данной процедуры значение одного из параметров(за исключением “Дата обновления” или “Дата удаления”) были изменены, выполняется:
      1. Изменение “Даты изменения” подписки пользователя, для которой инициирована данная процедура согласно текущей дате;
      2. Создание “Изменения подписки” с параметрами:
        1. Идентификатор подписки пользователя - Идентификатор подписки пользователя, для которой инициирована данная подписка;
        2. Измененные параметры - формируется как структура данных в формате JSON. Является объектом который содержит параметры и их значения которые были установлены до выполнения этапа “5_c_i”.
    3. Брокеру сообщений возвращается информация о том что сообщение было обработано;
    4. Дальнейшие этапы процедуры не выполняются. Дальнейшие этапы процедуры не выполняются.

1.6 Очередь отмены trial-а подписки пользователя

Очередь предназначена для отмены trial-а подписки пользователя.

Очередь состоит из:

  1. Брокера сообщений который предназначен для хранения информации о подписке пользователя.
  2. Обработчика сообщений.

Повторная отправка сообщения очереди

Если сообщение не было обработано Обработчиком сообщений, должна выполняться повторная отправка сообщения Обработчику сообщений согласно настройкам повторной отправки сообщений.

Настройки повторной отправки сообщений

Настройка Значение Описание
Первоначальная отсрочка 60000 Первоначальная отсрочка отправки сообщения в миллисекундах.
Количество попыток 11 Количество повторных попыток отправки сообщения
Множитель отсрочки 2

1.6_1 Параметры сообщения “Подписка пользователя”

Название Ключ Значение
Идентификатор подписки пользователя user_subscription_id
01.1.3_1.6_1 Процедура обработки сообщения “Подписка пользователя”
  1. Наступает время обработки сообщения, брокер отправляет сообщение обработчику сообщений.
  2. Обработчик получает сообщение “Подписка пользователя”.
  3. Выполняется логирование события с Payload:
  4. event - "received";
  5. title - “User subscription cancel trial”;
  6. data.user_subscription_id - Идентификатор подписки пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  7. Если не имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id”, который был указан в сообщении для которого была инициирована данная процедура или имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id” со “Статусом в stripe” не trialing:
  8. Логирование события с Payload:
    1. event - "processed";
    2. title - “User subscription cancel trial””;
    3. info:
      1. Если не имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id” - “User subscription is not exist”
      2. имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id” со “Статусом в stripe” не trialing- “User subscription no need to cancel trial”;
    4. data.user_subscription_id - Идентификатор подписки пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  9. Брокеру сообщений возвращается информация о том что сообщение было обработано. Дальнейшие этапы данной процедуры не выполняются.
  10. Выполняется “01.1.3_1.6_2 Процедура отмены trial-a в stripe” с параметрами:
    1. Идентификатор подписки пользователя - Идентификатор подписки пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  11. Если “01.1.3_1.6_2 Процедура отмены trial-a в stripe” выполнена:
    1. Не успешно:
      1. Брокеру сообщений не возвращается информация о том что сообщение было обработано;
      2. Если сообщение “Подписка пользователя” удаляется из очереди, в очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
        1. text - “The trial was not canceled. User subscription with ID {Идентификатор подписки пользователя, который был указан в сообщении для которого была инициирована данная процедура} was not updated”;
    2. Успешно, брокеру сообщений возвращается информация о том что сообщение было обработано. Дальнейшие этапы данной процедуры не выполняются.
01.1.3_1.6_2 Процедура отмены trial-a в stripe
  1. Выполняется инициация данной процедуры с параметрами:
  2. Идентификатор подписки пользователя
  3. Выполняется запрос “Update a subscription” к сервису Stripe:
  4. С параметрами:
    1. ID подписки должен быть указан согласно значению параметра “Идентификатор stripe” подписки пользователя для которой выполняется обработка сообщения.
  5. С телом запроса:
    1. trial_end - now.
  6. Если запрос “Update a subscription” к сервису Stripe:
  7. Не выполнен:
    1. Выполняется логирование события с Payload:
      1. title - “Cancel trial”;
      2. error - “Stripe service did not respond”;
      3. data.user_subscription_id - Идентификатор подписки пользователя, для которого была инициирована данная процедура.
    2. Инициатору данной процедуры возвращается информация о не успешном выполнении данной процедуры. Дальнейшие этапы процедуры не выполняются.
  8. Выполнен не успешно (код ответа не “200”) и код ошибки:
    1. Выполняется логирование события с Payload:
      1. title - “Cancel trial”;
      2. error - “Stripe service responded incorrectly”;
      3. data.user_subscription_id - Идентификатор подписки пользователя, для которого была инициирована данная процедура.
    2. Инициатору данной процедуры возвращается информация о не успешном выполнении данной процедуры. Дальнейшие этапы процедуры не выполняются.
  9. Выполнен успешно (код ответа “200”):
    1. В “3.3.5 Очередь сообщений “Update subscription”” добавляется сообщение “User subscription update” с параметрами:
      1. user_subscription_id - Идентификатор подписки пользователя, для которого была инициирована данная процедура.
    2. Инициатору данной процедуры возвращается информация об успешном выполнении данной процедуры. Дальнейшие этапы процедуры не выполняются.

1.7 Очередь отмены подписки пользователя

Очередь предназначена для отмены подписки пользователя.

Очередь состоит из:

  1. Брокера сообщений который предназначен для хранения информации о подписке пользователя.
  2. Обработчика сообщений.

Повторная отправка сообщения очереди

Если сообщение не было обработано Обработчиком сообщений, должна выполняться повторная отправка сообщения Обработчику сообщений согласно настройкам повторной отправки сообщений.

Настройки повторной отправки сообщений

Настройка Значение Описание
Первоначальная отсрочка 60000 Первоначальная отсрочка отправки сообщения в миллисекундах.
Количество попыток 11 Количество повторных попыток отправки сообщения
Множитель отсрочки 2

1.7_1 Параметры сообщения “Подписка пользователя”

Название Ключ Значение
Идентификатор подписки пользователя user_subscription_id
01.1.3_1.7_1 Процедура обработки сообщения “Подписка пользователя”
  1. Наступает время обработки сообщения, брокер отправляет сообщение обработчику сообщений.
  2. Обработчик получает сообщение “Подписка пользователя”.
  3. Выполняется логирование события с Payload:
  4. event - "received";
  5. title - “User subscription cancel”;
  6. data.user_subscription_id - Идентификатор подписки пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  7. Если не имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id”, который был указан в сообщении для которого была инициирована данная процедура или имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id” со “Статусом в stripe” не trialing:
  8. Логирование события с Payload:
    1. event - "processed";
    2. title - “User subscription cancel”;
    3. info:
      1. Если не имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id” - “User subscription is not exist”
      2. имеется “Подписки пользователя” идентификатор которого соответствует “user_subscription_id” со “Статусом в stripe” не trialing- “User subscription no need to cancel”;
    4. data.user_subscription_id - Идентификатор подписки пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  9. Брокеру сообщений возвращается информация о том что сообщение было обработано. Дальнейшие этапы данной процедуры не выполняются.
  10. Выполняется “01.1.3_1.7_2 Процедура отмены в stripe” с параметрами:
    1. Идентификатор подписки пользователя - Идентификатор подписки пользователя, который был получен в сообщении для которого была инициирована данная процедура.
  11. Если “01.1.3_1.7_2 Процедура отмены в stripe” выполнена:
    1. Не успешно:
      1. Брокеру сообщений не возвращается информация о том что сообщение было обработано;
      2. Если сообщение “Подписка пользователя” удаляется из очереди, в очередь “Очередь отправки сообщений в Телеграм” добавляется сообщение “Telegram message” с параметрами:
        1. text - “The trial was not canceled. User subscription with ID {Идентификатор подписки пользователя, который был указан в сообщении для которого была инициирована данная процедура} was not updated”;
    2. Успешно, брокеру сообщений возвращается информация о том что сообщение было обработано. Дальнейшие этапы данной процедуры не выполняются.
01.1.3_1.7_2 Процедура отмены в stripe
  1. Выполняется инициация данной процедуры с параметрами:
  2. Идентификатор подписки пользователя
  3. Выполняется запрос “Cancel a subscription” к сервису Stripe:
  4. С параметрами:
    1. ID подписки должен быть указан согласно значению параметра “Идентификатор stripe” подписки пользователя для которой выполняется обработка сообщения.
  5. Если запрос “Cancel a subscription” к сервису Stripe:
  6. Не выполнен:
    1. Выполняется логирование события с Payload:
      1. title - “Cancel”;
      2. error - “Stripe service did not respond”;
      3. data.user_subscription_id - Идентификатор подписки пользователя, для которого была инициирована данная процедура.
    2. Инициатору данной процедуры возвращается информация о не успешном выполнении данной процедуры. Дальнейшие этапы процедуры не выполняются.
  7. Выполнен не успешно (код ответа не “200”) и код ошибки:
    1. Выполняется логирование события с Payload:
      1. title - “Cancel”;
      2. error - “Stripe service responded incorrectly”;
      3. data.user_subscription_id - Идентификатор подписки пользователя, для которого была инициирована данная процедура.
    2. Инициатору данной процедуры возвращается информация о не успешном выполнении данной процедуры. Дальнейшие этапы процедуры не выполняются.
  8. Выполнен успешно (код ответа “200”) инициатору данной процедуры возвращается информация об успешном выполнении данной процедуры. Дальнейшие этапы процедуры не выполняются.