[POST] Отправка webhook-оповещения

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

В запросе передаются:

Характеристики запроса:

  • Метод: POST
  • Формат: JSON
  • Кодировка: UTF-8
content-type
string
required
MIME-тип данных

Должен быть равен "application/json".
signature
string
required
Подпись webhook-оповещения
Проверка подписи позволит подтвердить, что оповещение отправлено Softline.

Формат подписи: hash, сгенерированный по алгоритму SHA-512, от строки:
[secret key];[event];[order_id];[create_date];[payment_method];[currency];[customer.email]
где: См. пример генерации подписи.
event
string
required
Код события, по которому отправлено оповещение

Значение кодов см. в справочнике.
event_date
string
required
Дата и время события, по которому отправлено webhook-оповещение

Формат: YYYY-MM-DDThh:mm:ss±hh:mm.
order_id
number
required
Идентификатор заказа
order_name
string
required
Дополненный идентификатор
Формат идентификатора, в котором к нему может быть добавлен префикс. Это тот вид, в котором покупатель видит номер заказа.
status
string
required
Статус заказа
Узнайте подробнее о статусах заказа.

Варианты значений:
  • not paid - не оплачен
  • paid - оплачен
  • deleted - удален
external_id
string
Идентификатор корзины
Используется, если оформлен заказ на продукт с динамическими характеристиками. Этот идентификатор вы получаете в ответ на запрос генерации ссылки на покупку продукта с динамическими характеристиками (buy_link). В ином случае параметр будет передан с пустым значением ("").
create_date
string
required
Дата и время создания заказа
Если webhook-оповещение отправляется по событию order.created, то дата и время в этом параметре будут совпадать со значением, которое передано в параметре event_date.

Формат: YYYY-MM-DDThh:mm:ss±hh:mm.
pay_date
string
Дата и время успешной оплаты заказа
Если webhook-оповещение отправляется по событию order.payment.succeeded, то дата и время в этом параметре будут совпадать со значением, которое передано в параметре event_date.
  • Формат: YYYY-MM-DDThh:mm:ss±hh:mm
  • Если оплата не была произведена, то параметр будет передан с пустым значением ("")
currency
string
required
Код валюты заказа
  • Формат: ISO 4217 alpha-3, 3 символа
  • Варианты значений см. в справочнике
locale
string
required
Код языка интерфейса корзины
Варианты значений см. в справочнике
order_detail_url
string
required
Cсылка на страницу заказа
При получении webhook-оповещения по заказу/платежу в тестовой среде - ссылка будет предназначена для тестовой среды (ссылка будет иметь суффикс .demoslweb.com).
customer
object
required
Данные покупателя
customer
/
country
string
required
Код страны покупателя
customer
/
type
string
required
Тип покупателя
Варианты значения:
  • physical - физическое лицо
  • juridical - юридическое лицо
customer
/
email
string
required
E-mail покупателя
customer
/
first_name
string
required
Имя покупателя
customer
/
last_name
string
required
Фамилия покупателя
customer
/
phone
string
Телефон покупателя
Если не заполнен, то параметр будет передан с пустым значением ("").
customer
/
vat_number
string
Номер налогоплательщика
Также, используется для передачи:
  • ИНН компании при оплате в рублях
  • DNI/CUIL или CUIT при оплате в аргентинских песо
Если не заполнен, то параметр будет передан с пустым значением ("").
customer
/
company_name
string
Наименование компании
Если не заполнено, то параметр будет передан с пустым значением ("").
customer
/
company_billing_address
string
Юридический адрес компании
Если не заполнен, то параметр будет передан с пустым значением ("").
customer
/
company_delivery_address
string
Фактический адрес компании
Если не заполнен, то параметр будет передан с пустым значением ("").
product
object
required
Данные продукта
product
/
id
string
required
Идентификатор продукта
product
/
vendor_code
string
Ваш идентификатор продукта
Если не заполнен, то параметр будет передан с пустым значением ("").
product
/
sku
string
Ваш SKU (артикул) продукта
Если не заполнен, то параметр будет передан с пустым значением ("").
product
/
business_segment
string
Бизнес сегмент продажи
Варианты значения:
  • b2c - продукт предназначен для физических лиц
  • b2b - продукт предназначен для юридичесих лиц
  • mobile - мобильное приложение
Если не заполнен, то параметр будет передан с пустым значением ("").
product
/
name
string
required
Наименование продукта
product
/
price
string
required
Цена за одну единицу продукта
  • Передается в валюте заказа
  • Без VAT и скидки
  • Формат: число с 2 десятичными знаками, разделитель - точка, передается как строка
product
/
quantity
number
required
Количество единиц продукта в заказе
product
/
discount_percent
string
Процент скидки на продукт в заказе
Если к продукту не была применена скидка, то параметр будет передан с пустым значением "".
product
/
discount_amount
string
Сумма скидки
  • Передается в валюте заказа
  • Рассчитывается от цены без VAT
  • Учитывает количество продукта в заказе
  • Формат: Число с 2 десятичными знаками, разделитель - точка, передается как строка
  • Если к продукту не была применена скидка, то параметр будет передан с пустым значением ""
product
/
vat_percent
string
required
Процент VAT
product
/
vat_amount
string
required
Сумма VAT
  • Передается в валюте заказа
  • Учитывает количество продуктов
  • Формат: Число с 2 десятичными знаками, разделитель - точка, передается как строка
  • Если процент VAT равен нулю, то параметр будет передан с значением "0.00"
product
/
amount
string
required
Полная стоимость продукта
  • Передается в валюте заказа
  • Учитывает количество продукта в заказе, включает (если есть) VAT, скидку
  • Формат: число с 2 десятичными знаками, разделитель - точка, передается как строка
product
/
margin
string
required
Сумма вашего дохода
  • Передается в валюте заказа
  • Формат: число с 2 десятичными знаками, разделитель - точка, передается как строка
product
/
activation_codes
array [strings]
Лицензионная информация, отправленная покупателю по продукту
Передается, если продукт использует электронную доставку, отправка была выполнена и данные сохранены на стороне Softline.

payment
object
required
Данные об оплате
payment
/
payment_method
string
required
Код платежного метода
Варианты значений см. в справочнике.
payment
/
payment_system_name
string
required
Название платежного метода
Это то название, которое покупатель видит в корзине при оформлении заказа.
payment
/
payment_error_code
string
required*
Код ошибки оплаты
* - Обязательный параметр, если при оплате произошла ошибка.
payment
/
payment_error_description
string
required*
Описание ошибки оплаты
* - Обязательный параметр, если при оплате произошла ошибка.
payment
/
card_type
string
Тип банковской карты покупателя
Примеры значений: Visa, MASTERCARD.

Может быть заполнено, если:
  • Покупатель оплатил заказ банковской картой
  • Заказ создан для продления AR подписки (дочерний) и еще не был оплачен. В этом случае используется значение из родительского заказа, если он был оплачен банковской картой
Если не заполнено, то параметр будет передан с пустым значением ("").
payment
/
card_last_4
string
Последние 4 цифры номера банковской карты покупателя
Может быть заполнено, если:
  • Покупатель оплатил заказ банковской картой
  • Заказ создан для продления AR подписки (дочерний) и еще не был оплачен. В этом случае используется значение из родительского заказа, если он был оплачен банковской картой
Если не заполнено, то параметр будет передан с пустым значением (null).
payment
/
card_expiration_date
string
Срок окончания действия банковской карты покупателя
Может быть заполнено, если:
  • Покупатель оплатил заказ банковской картой
  • Заказ создан для продления AR подписки (дочерний) и еще не был оплачен. В этом случае используется значение из родительского заказа, если он был оплачен банковской картой
Формат значения: MM/YYYY, например, 12/2026.

Если не заполнен, то параметр будет передан с пустым значением ("").
payment
/
is_card_expired
boolean
Признак, истекает ли срок действия банковской карты покупателя до окончания действия подписки
Передается в случае, если выполняются условия:
  • В заказе есть подписка (AR или PMR).
  • Для оплаты используется банковая карта и срок окончания ее действия определен (передан параметр payment.card_expiration_date). Если заказ создан для продления подписки (дочерний) и еще не оплачен, то используется значение из родительского заказа.
Текущий статус подписки не влияет на параметр.

Варианты значений:
  • true - срок действия банковской карты истекает до окончания срока действия подписки (payment.card_expiration_date < subscription.expiration_date).
    Например:
    • Дата окончания действия карты (payment.card_expiration_date) = 09.2026 (т.е. карта действует до 30.09.2026).
    • Дата окончания действия подписки (subscription.expiration_date) = 15.10.2026.
    • Поскольку Дата окончания действия карты < Даты окончания действия подписки, то payment.is_card_expired будет передано true.
  • false - срок действия банковской карты истекает после окончания срока действия подписки (payment.card_expiration_datesubscription.expiration_date).
    Например:
    • Дата окончания действия карты (payment.card_expiration_date) = 10.2026 (т.е. карта действует до 31.10.2026).
    • Дата окончания действия подписки (subscription.expiration_date) = 15.10.2026.
    • Поскольку Дата окончания действия карты > Даты окончания действия подписки, то payment.is_card_expired будет передано false.
payment
/
is_installment_payment
boolean
required
Наличие оплаты в рассрочку
Узнайте подробнее об оплате в рассрочку. Этот и другие параметры по рассрочку учитывают только рассрочку Sofline Checkout (не учитывают рассрочку на стороне PSP).

Варианты значений:
  • true - оплата выполняется в рассрочку
  • false - рассрочка не используется (оплата выполняется единоразово)
payment
/
installment_amount
string
required*
Сумма одного платежа (одной доли) при оплате в рассрочку
  • * - Обязательный параметр, если payment.is_installment_payment равно true, в ином случае не передается
  • Формат: Число с 2 десятичными знаками, разделитель - точка. Передается как строка
  • Сумма последней доли рассрочки может незначительно отличаться от остальных долей
payment
/
installment_currency
string
required*
Код валюты суммы одного платежа при оплате в рассрочку
  • * - Обязательный параметр, если payment.is_installment_payment равно true, в ином случае не передается
  • Всегда совпадает с значением параметра currency
payment
/
installment_choice
number
required*
Количество долей при оплате в рассрочку
* - Обязательный параметр, если payment.is_installment_payment равно true, в ином случае не передается.
subscription
object
Данные о подписке
Передается, если для продукта существует подписка с автоматическим продлением лицензии (AR / AR Trial) или подписка с оплатой продления вручную (PMR).

Обратите внимание:
Создание подписки происходит по факту оплаты заказа-инициатора. Поэтому в событии order.created для такого заказа параметр subscription в общем случае не передается, так как подписка еще не создана.
Параметр subscription передается для события order.created в двух случаях:
  • Заказ создан для продления подписки (дочерний заказ).
  • Заказ инициирует подписку (родительский заказ), и оплата уже успешно завершена на момент отправки оповещения о создании заказа. То есть подписка уже создана.
subscription
/
id
string
required*
Идентификатор подписки
  • * - Обязательный параметр, если был передан параметр subscription
  • Формат: NN_MM, где NN это идентификатор заказа, который инициировал подписку (родительский заказ)
subscription
/
previous_order_id
number
required*
Идентификатор предыдущего заказа, созданного в рамках подписки:
  • Если текущий заказ является родительским (инициирует подписку), то параметр будет передан с пустым значением (null)
  • Если текущий заказ является дочерним, то в параметре будет передан идентификатор предыдущего дочернего заказа (или идентификатор родительского заказа, если это продление является первым)
* - Обязательный параметр, если был передан параметр subscription.

Например:
Если в подписке участвовали заказы: 0001 (инициировал подписку), 0002 (первое продление подписки), 0003 (второе продление подписки), и webhook-оповещение отправляется:
  • По факту события с заказом 0001, то "order_id":0001, "subscription.previous_order_id":null
  • По факту события с заказом 0002, то "order_id":0002, "subscription.previous_order_id":0001
  • По факту события с заказом 0003, то "order_id":0003, "subscription.previous_order_id":0002
Обратите внимание, webhook-оповещение об отмене / восстановлении подписки всегда отправляется по родительскому заказу ("order_id":0001), поэтому в нем всегда будет передано: "subscription.previous_order_id":null (не зависимо от наличия дочерних заказов на момент события с подпиской).
subscription
/
previous_order_item_id
number
required*
Идентификатор позиции из предыдущего заказа, созданного в рамках подписки.
Идентификатор позиции - это дополнительный внутренний идентификатор, который присваивается продукту внутри заказа.
  • Если текущий заказ является родительским (инициирует подписку), то параметр будет передан с пустым значением (null)
  • Если текущий заказ является дочерним, то в параметре будет передан идентификатор позиции, которую занимал продукт в предыдущем заказе, созданном в рамках подписки
* - Обязательный параметр, если был передан параметр subscription.

Например:
  • В родительском заказе был продукт с идентификатором 11111, который инициировал подписку:
    • В рамках заказа продукту был присвоен идентификатор позиции 12345
    • По факту события с заказом в webhook-оповещении отправляется "subscription.previous_order_item_id":null
  • При первом продлении подписки был создан заказ на продление:
    • Для продления был использован продукт с идентификатором 22222
    • В рамках заказа продукту был присвоен идентификатор позиции 54321
    • По факту события с заказом в webhook-оповещении отправляется "subscription.previous_order_item_id":12345
Обратите внимание, webhook-оповещение об отмене / восстановлении подписки всегда отправляется по родительскому заказу, поэтому в нем всегда будет передано: "subscription.previous_order_item_id":null (не зависимо от наличия дочерних заказов на момент события с подпиской).
subscription
/
type
string
required*
Тип подписки

* - Обязательный параметр, если был передан параметр subscription.

Варианты значений:
  • AR - подписка с автоматическим продлением (включая AR Trial).
  • PMR - подписка с продлением вручную.
См. подробнее о типах подписок.
subscription
/
is_conversion_from_trial
boolean
required*
Признак первого продления после бесплатного пробного периода
Он обозначает, что заказ, по которому отправлено webhook-оповещение, создан для продления подписки сразу после завершения бесплатного пробного периода.

* - Обязательный параметр, если был передан параметр subscription.

Варианты значений:
  • true - если выполняются все условия:
    • Заказ создан для продления AR подписки (заказ является дочерним, subscription.type равен AR)
    • Это первый дочерний заказ данной подписки
    • В подписке есть бесплатный пробный период (покупатель приобрел родительский продукт бесплатно)
  • false - если условия для передачи true не выполнены
subscription
/
status
string
required*
Статус подписки

* - Обязательный параметр, если был передан параметр subscription.

Варианты значений:
  • active - подписка действует и не требует оплаты
  • not paid - подписка ожидает оплаты
  • cancelled - продление отменено
См. подробнее о статусах подписки с автоматическим продлением.
Для подписок с продлением вручную (PMR) используются аналогичные статусы, но не доступно восстановление подписки.
subscription
/
period
string
required*
Срок действия продукта в действующем периоде подписки
Это срок действия продукта из последнего оплаченного заказа, созданного в рамках подписки. Обратите внимание, этот срок относится к подписке в целом может не совпадать со сроком действия продукта в заказе, по которому отправлено webhook-оповещение.
Например:
  • Была создана подписка на продукт со сроком действия 7 дней:
    • В webhook-оповещении об оплате родительского заказа будет передан subscription.period = P7D
  • Произошло создание дочернего заказа на продукт со сроком действия 1 месяц:
    • В webhook-оповещении об этом событии будет передан subscription.period = P7D. Так как дочерний заказ еще не был оплачен и подписка еще не продлена, то передается срок из действующего периода подписки
  • Произошла оплата дочернего заказа:
    • В webhook-оповещении о об этом событии будет передан subscription.period = P1M, так как дочерний заказ был оплачен, подписка продлена и действующий период подписки обновился
Формат параметра:
  • * - Обязательный параметр, если был передан параметр subscription
  • Формат: ISO 8601 code: P[число][ед.измерения]
  • Поддерживаемые единицы измерения: Y - год, M - месяц, D - день. Например, "P1Y" соответствует сроку "1 год"
subscription
/
expiration_date
string
required*
Дата окончания периода действия подписки
  • * - Обязательный параметр, если был передан параметр subscription
  • Формат: YYYY-MM-DDThh:mm:ss±hh:mm
subscription
/
next_charge_date
string
required*
Дата следующей попытки оплаты продления для AR подписки
Передается только дата первой попытки оплаты, дополнительные повторные попытки при неуспешной оплате не учитываются. Если дата наступила, и попытка была неуспешна, или все попытки оплаты закончены (но подписка не была продлена), то передаваемая дата не изменится. После успешной оплаты будет рассчитана новая дата для оплаты следующего продления.
  • * - Обязательный параметр, если был передан параметр subscription, и subscription.type равен AR
  • Формат: YYYY-MM-DDThh:mm:ss±hh:mm
subscription
/
detail_url
string
required*
Ссылка на управление подпиской с автоматическим продлением (AR, AR Trial)
Ведет на якорь секции подписки на странице заказа-инициатора подписки.

* - Обязательный параметр, если был передан параметр subscription, и subscription.type равен AR. В ином случае параметр не передается.

Обратите внимание:
  • Если webhook-оповещение отправлено по заказу-инициатору подписки (родительскому), то в параметрах order_detail_url и subscription.detail_url будет ссылка на одну и ту же страницу.
  • Если webhook-оповещение отправлено по заказу на продление (дочернему), то в этих параметрах будут разные значения: order_detail_url ведет на страницу заказа на продление, а subscription.detail_url – на страницу заказа инициатора подписки.
  • При получении webhook-оповещения по заказу/платежу в тестовой среде - ссылка будет предназначена для тестовой среды (ссылка будет иметь суффикс .demoslweb.com).
additional_data
array [objects]
Дополнительные параметры заказа/платежа
Узнайте подробнее о дополнительных параметрах. Обратите внимание, срок хранения дополнительных параметров в заказе ограничен.
additional_data / [object]
/
name
string
required*
Название дополнительного параметра
* - Обязательный параметр, если был передан параметр additional_data.
additional_data / [object]
/
value
string
required*
Значение дополнительного параметра
* - Обязательный параметр, если был передан параметр additional_data.
return
object
Информация о возврате

Передается, если webhook-оповещение отправлено по событию product.returned. В ином случае не передается.
return
/
type
string
required*
Тип операции
* - Обязательный параметр, если был передан параметр return.
Варианты значений:
  • returned - возврат или замена
  • removed - удаление некорректной лицензионной информации, например, если по техническим причинам покупатель получил ошибочные данные вместо лицензионной информации
return
/
date
required*
Дата и время события
Если webhook-оповещение отправляется по событию product.returned, то дата и время в этом параметре будут совпадать со значением, которое передано в параметре event_date.
  • * - Обязательный параметр, если был передан параметр return
  • Формат: YYYY-MM-DDThh:mm:ss±hh:mm
return
/
reason
string
required*
Описание причины события
* - Обязательный параметр, если был передан параметр return.
Примеры значений:
  • Проблема установки / активации
  • Географически ограничения
  • Ошибка при выборе продукта
  • Не устроил срок доставки
  • Не возможно поставить продукт
  • Автопродление
  • Повторная оплата
  • ChargeBack
  • Недоволен программой
  • TYPO
  • Дубли заказа
  • Тестовый заказ
или другая причина.
document_part
string
required
Порядковый номер позиции, которую занимает продукт в заказе
Нумерация позиций сохраняется по всем событиям.
Формат: "[порядковый номер позиции в заказе]-of-[общее количество позиций в заказе]".
Например: "1-of-2", если в заказе всего два продукта и уведомление отправлено по первому из них.

В случае успешного получения оповещения ваш веб-сервис должен вернуть ответ на полученное оповещение. Время ожидания ответа: 1 минута.

Возможные ответы:

  • HTTP/1.1 200 OK - оповещение успешно получено
  • Любой другой ответ или отсутствие ответа - оповещение не получено

В случае, если оповещение не было получено, то:

  • Отправка будет повторяться по следующему расписанию: 1 раз в 20 минут
  • Повторная отправка будет выполняться до тех пор, пока не будет получен код ответа HTTP/1.1 200 OK или не будет совершено 10 попыток
  • При повторной отправке данные уведомления не обновляются. В случае изменения заказа/платежа во время отправки оповещения - содержание оповещения не изменится