Общее
Этот раздел API посвящён запросу конфигурации пейгейта и валидации оплаты пользователем доступа в приложение
- вызов /payments/flow — для определения текущего установленного payment flow
- вызов /payments/ping — для уведомления бекенда о присутствии пользователя, который видел пейгейт, но не активировал подписку, в приложении
- вызов /payments/paygate — позволяет получить всю необходимую конфигурацию пейгейта, включая идентификаторы продуктов и названия кнопок
- вызов /payments/validate — URL для «скармливания» бекенду чеков (receipts) на валидацию, чтобы получить доступ в приложение
/flow
Описание: Для определения текущего установленного payment flow
Полный путь к методу: https://www.s1eep.app/api/payments/flow
Полный путь к методу: https://www.s1eep.app/api/payments/flow
Тип запроса: POST
Требования безопасности: API-ключ
Дополнительные ожидаемые параметры:
- version — номер версии (билда) приложения
Дополнительные возвращаемые параметры:
- flow — код payment flow:
- 1 — означает, что пейгейт надо показывать при обращении к платному контенту и давать пользователю навигировать по бесплатному контенту
- 2 — блокировать пользователя пейгейтом сразу после онбординга (разрешения пуш-нотификаций и установки времени для пушей)
Пример ответа:
{
"_code": 200,
"_msg": "OK",
"_need_payment": false,
"_data": {
"flow": 2
}
}/ping
Описание: для уведомления бекенда о присутствии пользователя, который видел пейгейт, но не активировал подписку, в приложении. Следует начать вызывать в момент посещения пейгейта и далее «пинговать» бекенд раз в секунду по этому ендпоинту, пока пользователь либо не активирует подписку, либо не свернёт приложение. Эту процедуру следует выполнять лишь раз. При возврате в приложение более не «пинговать» бекенд.
Полный путь к методу: https://www.s1eep.app/api/payments/ping
Полный путь к методу: https://www.s1eep.app/api/payments/ping
Тип запроса: POST
Требования безопасности: API-ключ
Дополнительные ожидаемые параметры:
- random_string — случайная строка этой копии приложения
Дополнительные возвращаемые параметры:
- нет
Пример ответа:
{
"_code": 200,
"_msg": "OK",
"_need_payment": false,
"_data": "{}"
}/paygate
Описание: позволяет получить всю необходимую конфигурацию пейгейта, включая идентификаторы продуктов и названия кнопок. Может получать также токен существующего и активировавшего подписку ранее пользователя, чтобы скорректировать предложение подписки и более не обещать бесплатный период пользователю.
Особенности:
В ответах сервера могут содержаться плейсхолдеры, которые надо заменять на актуальные значения, которые может знать только клиент:
Особенности:
В ответах сервера могут содержаться плейсхолдеры, которые надо заменять на актуальные значения, которые может знать только клиент:
- @price — стоимость соответствующей подписки (т.е. подписки, которая указана в блоке данных, где встретился плейсхолдер)
- @price_div — стоимость соответствующей подписки, разделённая на число, указанное в параллельном параметра div, и округлённая до 1 знака после запятой.
Полный путь к методу: https://www.s1eep.app/api/payments/paygate
Тип запроса: POST
Требования безопасности: API-ключ
Дополнительные ожидаемые параметры:
- version — номер билда приложения (чтобы демонстрировать разные тексты и идентификаторы подписок при необходимости)
- _user_token — пользовательский токен при наличии такового (необязательно)
- random_string — случайная строчка, которая генерируется один раз за жизнь приложения
- locale — локаль пользователя (2 символа), чтобы получать ответ на указанном языке при наличии его поддержки (необязательно)
- screen — экран, с которого пользователь получает пейгейт, возможные варианты:
- null
- scenes
- meditations
- stories
- sounds
Дополнительные возвращаемые параметры:
- main — словарь данных об основном экране покупок:
- design — внешний вид экрана (см. ниже)
- greeting — строчка приветствия
- text — текст с данными о продукте
- options — массив словарей с данными о предложениях покупок, каждый элемент которого состоит из:
- product_id — идентификатор продукта в iTunesConnect
- title — заголовок предложения
- caption — надпись ниже заголовка
- div — делитель для плейсхолдера @price_div
- subcaption — строчка под надписью ниже заголовка
- save — плашка для промо-тэга
- bottom_line — нижняя строчка с ключевыми условиями предложения
- button — название кнопки для активации подписки
- subbutton — надпись под кнопкой (с замочком в начале строки)
- restore — название кнопки восстановление покупок
- special_offer — словарь данных об экране со спецпредложением (может отсутствовать):
- title — заголовок экрана
- subtitle — подзаголовок
- time_left — оставшееся время для спецпредложения в формате mm:ss
- text — текст с данными о продукте
- product_id — идентификатор продукта в iTunesConnect
- special_offer_multiplicator — коэффициент спецпредложения, на него нужно умножить цену подписки, чтобы получить «прошлую» цену подписки, от которой «предоставляется» скидка
- price_tag — строчка с ценником и условиями биллинга
- button — название кнопки для активации подписки
- subbutton — надпись под кнопкой (с замочком в начале строки)
- restore — название кнопки восстановление покупок
Расшифровка поля design для экрана main:
Пример ответа для нового пользователя:
{
"_code": 200,
"_msg": "OK",
"_need_payment": false,
"_data": {
"main": {
"design": 1,
"greeting": "Sleepy already?",
"text": "Unlock all Scenes and Sounds · Guided Meditations · Stories for Sleep",
"options": [
{
"product_id": "com.li.sleepwell.lifetime9999",
"title": "Lifetime",
"caption": "@price_div/week",
"div": 53,
"subcaption": "in terms of 1 year",
"save": "SAVE 75%",
"bottom_line": "@price"
},
{
"product_id": "com.li.sleepwell.yearly5999",
"title": "3 days free",
"caption": "@price/year",
"subcaption": null,
"save": null,
"bottom_line": "after 3 day trial"
}
],
"button": "CONTINUE",
"subbutton": "Secured with iTunes. Cancel anytime.",
"restore": "Restore"
},
"special_offer": {
"title": "-50%",
"subtitle": "Limited offer for the new users",
"time_left": "59:59",
"text": "All of the content and weekly updates",
"product_id": "com.li.sleepwell.specialmonthly1499",
"special_offer_multiplicator": 2,
"price_tag": "@price per month",
"button": "Continue",
"subbutton": "Secured with iTunes. Cancel anytime.",
"restore": "Restore"
}
}
}/validate
Описание: для проверки доступного на клиенте чека, чтобы:
- бекенд различал пользователей — фактически это есть процедура логина в приложение
- бекенд «знал», можно ли пользователю предоставлять доступ к платным частям приложения или нет. Следует вызывать каждый раз при старте приложения (имитация "Restore purchase"), а также при активации новой подписки. После того, как чеки отправлены, следует попробовать повторить доступ к платным частям приложения.
Полный путь к методу: https://www.s1eep.app/api/payments/validate
Тип запроса: POST
Требования безопасности: нет
Дополнительные ожидаемые параметры:
- receipt — чек от AppStore (base64 encoded)
- _user_token — пользовательский токен в случае наличия оного (необязательно)
- version — номер билда (необязательно)
Дополнительные возвращаемые параметры:
- user_token — в случае валидного чека, в котором есть хотя бы одна активированная подписка, будет значение отличное от null
- active_subscription — индикатор наличия у пользователя доступа к платному контенту
- user_id — идентификатор пользователя (для выполнения метода SetUserID для идентификации пользователя в Amplitude)
Примеры ответа:
{
"_code": 200,
"_msg": "OK",
"_need_payment": false,
"_data": {
"user_token": "2y3fh2fgh29h302f23f20jd9298hfduigfsiud",
"active_subscription": true,
"user_id": 431
}
}{
"_code": 400,
"_msg": "Receipt is not valid. Receipt result code 21002",
"_need_payment": false,
"_data": "{}"
}