Stripe
Как подключить
Чтобы подключить платежную систему Stripe, вам понадобятся секретный API-ключ и ключ webhook.
Вы можете скопировать секретный API-ключ, перейдя в раздел Developers -> API key и скопировав Secret key.
Шаг 1. Перейдите в раздел Developers -> API key:

Шаг 2. Найдите и скопируйте Secret key:

Далее вам нужно задать URL для callback-ов. Это необходимо для того, чтобы бот получал уведомления об оплате.
Перейдите в раздел Webhooks и добавьте адрес для webhooks.

Откроется форма:

Шаг 1. Нажмите "+add destination".
Шаг 2. Выберите события:

Шаг 3. Выберите тип "Webhook endpoint":

Шаг 4. Ознакомьтесь с типом запроса и нажмите "Continue":

Шаг 5. Укажите название и endpoint URL:

Укажите URL - https://chatter.salebot.pro/stripe_callback/result
Шаг 6. Будут созданы два endpoint-а, перед добавлением можно посмотреть настройки:

Шаг 7. Далее нажмите кнопку "Add destinations". После этого webhooks будут сохранены.
Шаг 8. Нажмите кнопку "Done".

Сохраняем и попадаем на страницу с установленным webhook:

Шаг 9. Далее нажмите на webhook, где вы выбрали все события:

Шаг 10. Находим Signig key и сохраняем его себе (в дальнейшем он понадобится для подключения к Salebot):

После получения ключей переходим к подключению к Mavibot.
В Mavibot откройте раздел "Acquiring" и выберите Stripe.

На странице подключения необходимо ввести полученные ключи:

Нажмите "Save Settings".
Готово!
На этом подключение платежной системы завершено!
Как подключить callback о статусе транзакции
Чтобы получить дополнительный callback, нам нужно подключить webhook в дополнение к уже существующему.
Укажите URL - https://chatter.salebot.pro/stripe_callback/<api_key>/charge_status
и выберите события:
charge.failedcharge.pendingcharge.succeeded

Подробнее о каждом типе webhook:
charge.succeeded - содержит информацию об успешном завершении транзакции (аналог callback об успешной оплате)
charge.pending - "транзакция в процессе", ее завершение может занять до 7 дней. Webhook будет выглядеть как {первые 10 символов}{тип webhook} Например: sk_test_45LDPJLKT95d_charge.pending
charge.failed - "транзакция не удалась." Webhook будет выглядеть как {первые 10 символов}{тип webhook} Например: sk_test_45LDPJLKT95d_charge.failed
Добавляем webhook, полученный после сохранения, в поле Mavibot - Webhook key2:

stripe_invoice_id - ID транзакции, по которой callback об успешной оплате не был получен сразу после оплаты.
Как подключить налоги
Чтобы использовать налоги в платежах, сначала нужно создать их в личном кабинете Stripe. Для этого введите tax rates в строке поиска:

И нажмите "+ Add tax rates":

Далее укажите применяемую налоговую ставку:

В открывшемся меню выберите тип налога, регион, где он применяется, ставку налога и опцию, указывающую, должен ли этот налог быть включен в сумму платежа — 'Inclusive' или будет добавлен сверх суммы — exclusive:

После создания налоговой ставки скопируйте ее ID в stripe_tax_id переменную перед установкой суммы оплаты.

Во избежание ошибок после получения ссылки подставьте в переменную stripe_tax_id пустую строку (""), чтобы применять налог только тогда, когда это нужно.
Если все сделано правильно, то в случае налоговой ставки с параметром exclusive вы увидите следующее

Как получить ссылку на оплату
Чтобы сгенерировать ссылку на оплату, нужно задать значение payment_sum переменная (например, 150 или 100.55 (через точку!)), а затем появится переменная stripe_pay_url. Эту переменную можно вывести ссылкой или разместить на кнопке с текстом "Pay".
Ссылка выглядит так:
https://checkout.stripe.com/pay/cs_test_a17mskKFFRwEuo3WgBSAUjfk7xaZZIrct9B3Ds2AdODVq1I8aRiqYEBdrU#fidkdWxOYHwnPyd1blpxYHZxWjA0TGFsVzFPVmpmMzJAbVYzUkp1Y0lLYDVgfzR2Q0NxcWZBNUNnTnRSVVRJSGFobEB1UExSczRMMTc8PWRLMGBddl8xalxyPDRoUGhnZm9xXXZANDZyaF0wNTVBVExsPHZyfycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl
По умолчанию установлена USD (доллар), если нужна другая валюта, необходимо задать значение currency переменную.
Также перед установкой значения payment_sum переменной можно задать следующие необязательные переменные для настройки платежа.
currency
это валюта заказа. Допустимые значения -https://stripe.com/docs/currencies
payment_description
описание заказа
stripe_tax_id
Это ID налоговой ставки, настроенной в личном кабинете Stripe. Как ее настроить, описано в разделе "Как подключить налоги" ссылка "Как подключить налоги"
stripe_invoice_enable
Этот параметр указывает на необходимость сохранять инвойсы (счета, чеки). Введите любое значение — все необходимые документы затем будут доступны в вашем личном кабинете Stripe.
stripe_locale
задает язык платежной ссылки: en, ru, de. Все доступные языки здесь: https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-locale Если stripe_local если значение не указано, по умолчанию будет использоваться язык браузера клиента.
stripe_payment_method_type
это способ оплаты, по умолчанию оплата картой. Можно заменить на другие доступные для Stripe способы оплаты. Доступные методы перечислены ниже
client_id = 1202020202 stripe_payment_method_type = "customer_balance"
stripe_additional_payment_method_type
нужно, чтобы добавить дополнительный способ оплаты. Доступные методы перечислены ниже, например, stripe_additional_payment_method_type = "sepa_debit"
coupon_id
ID скидочного купона
stripe_expired
это срок жизни платежной ссылки. Указывается в секундах. Минимальное время — 30 минут, максимальное — 24 часа. По умолчанию — 24 часа
stripe_automatic_tax
включение автоматического расчета и взимания налогов во время оплаты. Чтобы включить, передайте "1". Подробную информацию об этой настройке можно найти в документации Stripe. ссылка в документации Stripe
Внимание! Если используете обе stripe_payment_method_type и stripe_additional_payment_method_type переменные, то значения в них ОБЯЗАТЕЛЬНО должны быть РАЗНЫМИ!
Список значений для stripe_payment_method_type и stripe_additional_payment_method_type
card acss_debit affirm afterpay_clearpay alipay au_becs_debit bacs_debit bancontact blik boleto cashapp customer_balance eps fpx giropay grabpay ideal klarna konbini link oxxo p24 paynow paypal pix promptpay sepa_debit sofort us_bank_account wechat_pay zip
Подробнее о каждом из методов и о том, для каких стран они доступны, можно узнать в документации Stripe: посмотреть на сайте
Пример формирования ссылки на оплату
Создадим ссылку на оплату в размере 1000 рублей (по умолчанию доллар)

Обратите внимание: - Сначала указываете необязательные параметры first_name, payment_description и т.д. - И последней присваиваем значение переменной payment_sum
Переменные можно задать и ранее в цепочке, а не в одном блоке, это пример.
Далее в нужном месте выводим переменную stripe_pay_url, в которой содержится ссылка в блоке либо в кнопке:
Пример 1. Выводим ссылку на оплату прямо в сообщении:

Тестирование в боте:

Пример 2. Добавляем ссылку на оплату в кнопку:


Пример 3. Добавляем ссылку в качестве вложения к сообщению:

Тестирование в боте:

Допустимы все три варианта для направления ссылки на оплату в боте.
При клике на кнопку или при переходе по ссылке вашего плательщика переадресует на платежную страницу:

В примере видно, что параметры, которые мы указывали в калькуляторе в настройках блока, были применены: описание заказа, валюта и сумма.
Если передадите параметр налоговой ставки (stripe_tax_id) в блоке:

То также будет отображена налоговая ставка в форме оплаты:

Пример кода для копирования
payment_description = 'Тестовая оплата в Страйп'
currency = 'RUB'
stripe_tax_id = 'скопируйте сюда ваш tax ID'
payment_sum = 1000
Где найти tax ID:

Как настроить рекуррентные платежи
Для рекуррентных платежей (подписок) нужно до объявления переменной payment_sum объявить переменную stripe_subscription и присвоить ей название подписки.
Также можно добавить следующие переменные: interval — продолжительность интервала подписки, в эту переменную нужно передать значение ‘day’ - для дней, ‘week’ - недель, ‘month’ - месяцев, ‘year’ - лет. Если переменная не объявлена, то по умолчанию будет передан параметр ‘month’.
Важно! Продолжительность одного цикла подписки не может быть более 1 года (для параметра ‘year’), более 12 месяцев (для параметра ‘month’), более 52 недель (для параметра ‘week’).

interval_count — количество указанных интервалов, сколько дней, недель или месяцев будет в подписке за указанную сумму. По умолчанию будет передан параметр, равный единице (1);
stripe_payment_method_type — способ оплаты, по умолчанию стоит оплата картой (card). Можно заменить на другие доступные для Stripe способы оплаты. Ниже указаны доступные методы.
Например, stripe_payment_method_type = 'customer_balance'
stripe_additional_payment_method_type - добавить дополнительный способ оплаты. Ниже указаны доступные методы
Например, stripe_additional_payment_method_type = 'sepa_debit'
Важно! Если используете обе переменные stripe_payment_method_type и stripe_additional_payment_method_type, то значения в них ОБЯЗАТЕЛЬНО должны быть РАЗНЫМИ!
Список значений для stripe_payment_method_type и stripe_additional_payment_method_type:
card acss_debit affirm afterpay_clearpay alipay au_becs_debit bacs_debit bancontact blik boleto cashapp customer_balance eps fpx giropay grabpay ideal klarna konbini link oxxo p24 paynow paypal pix promptpay sepa_debit sofort us_bank_account wechat_pay zip
Подробнее о каждом из методов и о том, для каких стран они доступны, см. в документации Stripe: см. сайт ссылка посмотреть на сайте
Внимание! Продолжительность подписки не может превышать 1 год (для параметра ‘year’), более 12 месяцев (для параметра ‘month’), более 52 недель (для параметра ‘week’).
В этом примере будет создана подписка с названием 'My_subscription' стоимостью 90 USD на 3 месяца, и повторный платеж будет выполнен на ту же сумму через 1 месяц:

Пример для копирования:
stripe_subscription = 'My_subscription'
interval = 'month'
interval_count = 3
payment_sum = 90
После оплаты у клиента появятся stripe_subscription_id переменные в данных сделки, которые понадобятся для настройки отмены подписки, и stripe_customer_id, который позже можно использовать для проверки статуса подписки.
Уведомление (callback) приходит только при первом повторяющемся платеже!
ПОВТОРНЫХ callback-ов НЕ БУДЕТ. Управление осуществляется через функцию и stripe_customer_id. через функцию ссылка

Возврат к настройкам обычных платежей
Чтобы вернуться к обычным платежам, присвойте переменной подписки пустую строку stripe_subscription = ". В этом случае переменные interval и interval_count не будут влиять на создание ссылки.

Отмена настроек подписки
Чтобы отменить подписку в калькуляторе, используйте stripe_remove_subscription(stripe_subscription_id) метод, где stripe_subscription_id — это идентификатор, который был сохранен в информации о сделке после оплаты.
Это позволит вам сохранить оплаченную подписку активной до конца текущего оплаченного периода, но дальнейших списаний не будет, и подписка будет отменена после истечения срока:

answer = stripe_remove_subscription('#{stripe_subscription_id}')
stripe_remove_subscription — при успешном выполнении вы получите ответ с информацией о дате, до которой отмененная подписка остается действительной.
В этом примере результат выполнения функции будет помещен в переменную answer, и можно будет проверить результат выполнения.
Проверка статуса подписки
stripe_check_subscription(subscription_id, customer_id), где
stripe_subscription_id - ID подписки stripe_customer_id - ID клиента в Stripe (необязательный параметр)

Как создать купон и получить ID скидки
Чтобы получить ID скидки, создайте купон в личном кабинете в разделе ”coupons”. ссылка ”coupons”.

После нажатия кнопки “New” откроется страница, где нужно указать:
Name — название скидки;
ID — идентификатор, который генерируется автоматически.
Type — тип скидки: процентная или фиксированная сумма
Duration — длительность скидки (разовая или повторяющаяся, например, для подписок) и другие параметры.

Скидочный купон появится в “Product catalog“ в разделе “Coupons”, а посмотреть ID скидки можно, перейдя в меню купона:

Нажмите на купон, чтобы скопировать его ID:

Как добавить скидку к заказу
При формировании платежной ссылки (как для подписок, так и для разовых платежей).
В калькуляторе блока, перед объявлением payment_sum установите переменную coupon_id переменной присвойте ей ID скидки из личного кабинета Stripe.

Чтобы добавить к существующей подписке, используя stripe_add_subscription_discount .
Задайте условия для срабатывания блока и вызовите указанную функцию в калькуляторе, передав ей параметры stripe_subscription_id (ID подписки) и coupon_id (ID скидочного купона). Скидка будет применяться к последующим платежам по подписке.

Пример кода для копирования
stripe_subscription = 'Подписка премиум'
interval = 'month'
payment_description = 'Тестовая оплата в Страйп'
currency = 'USD'
coupon_id = 'ID вашего купона'
stripe_add_subscription_discount(stripe_subscription_id, coupon_id)
stripe_tax_id = 'ID налога'
payment_sum = 90
При успешном добавлении функция возвращает сообщение с указанием ID подписки, типа, суммы или процента скидки, а также даты ее окончания.

Подробнее о создании подписки смотрите в разделе "Как настроить рекуррентные платежи" ссылка "Как настроить рекуррентные платежи"
Как удалить/изменить скидку подписки
Скидку, привязанную к подписке, можно удалить или заменить на другую скидку.
Если вы хотите прекратить действие скидки, задайте условие для срабатывания блока и вызовите stripe_remove_subscription_discount функцию в калькуляторе, передав ей stripe_subscrition_id параметр (ID подписки).

При успешном выполнении операции функция вернет сообщение с ID подписки и датой отмены скидки.
Замену скидки, а также добавление новой выполняют с помощью stripe_add_subscription_discount функции. Не забудьте передать ей stripe_subscription_id и coupon_id параметры. Успешный запрос обновит купон, привязанный к подписке, и вернет сообщение с актуальной информацией.
О том, как получить ID скидки, можно прочитать в разделе "Как создать купон и получить ID скидки". ссылка "Как создать купон и получить ID скидки".
Как обработать результат
После успешной оплаты в бот будут отправлены callback-и, которые сообщат, что оплата прошла успешно. В системе они отображаются как сообщения от пользователя, чтобы пользователь не мог их отправить сам, они состоят из первых 20 символов секретного ключа и постфикса success, например: sk_live_d35gky6d8ers_success

Эти callback-сообщения НЕ ВИДНЫ пользователю, они отображаются только оператору.
Тип сравнения должен быть "Exact Match"
Также после успешной оплаты stripe_payment_completed переменная устанавливается в True.
Например, вы можете обработать успешную оплату в условном блоке и показать пользователю соответствующее сообщение:

После завершения платежа переменная stripe_callback_data переменная будет добавлена клиенту и будет содержать данные ответа платежной системы по завершенной транзакции. Из полученного словаря можно извлечь необходимые данные с помощью get .
Чтобы сделать повторный платеж, нужно сбросить payment_sum, ранее сгенерированную ссылку, а затем снова присвоить переменной payment_sum новое значение, чтобы получить новую ссылку. Можно указать предыдущее значение.
Как протестировать платежи
Чтобы протестировать интеграцию, можно использовать секретный ключ из тестового окружения. Для этого переключитесь в тестовый режим в личном кабинете Stripe с помощью переключателя в правом меню
Далее выполните настройку, описанную в начале этого руководства. Введите тестовый секретный ключ и добавьте адрес webhook в тестовое окружение.
Тестовый номер карты
4242 4242 4242 4242 любая дата в будущем CVC - любые три цифры
Если что-то не работает, сравните данные с данными на официальном сайте. ссылка на официальном сайте.
Последнее обновление