Как разрешить пользователю сменить план подписки
Как это работает
- При выборе нового плана производится возврат средств на баланс пользователя за неиспользованный период текущей подписки.
- Оплата нового плана подписки производится полностью с баланса пользователя. При недостаточном балансе производится доплата любым из разрешенных в проекте способов оплаты.
- Списание средств при смене плана происходит сразу после подтверждения оплаты, даже если в проекте настроена смена плана со следующего расчетного периода.
Если валюта нового плана отличается от валюты текущего плана, покупка нового плана будет выполнена с конвертацией валют.
- у пользователя уже есть активная подписка с планом, на который меняется текущий план;
- подписка, которую пользователь хочет сменить, не находится в статусе Active;
- план подписки, который пользователь хочет сменить, имеет тип Бесконечный план — такую подписку можно отменить только в указанный период возврата.
Как настроить
- Откройте проект в Личном кабинете.
- Нажмите Subscriptions в боковом меню и перейдите в раздел Настройки.
- В разделе Изменение плана подписки установите переключатель Возможность выбрать другой план подписки в положение Вкл.
- По умолчанию смена плана разрешена со следующего периода. Чтобы разрешить смену плана в текущем периоде, выберите пункт Текущее время. При выборе этой опции план будет меняться сразу после подтверждения оплаты.
- Чтобы разрешить смену плана более одного раза в день, установите переключатель Возможность выбрать другой план подписки несколько раз в день в положение Вкл.
- При открытии платежного интерфейса используйте:
- серверный метод создания токена;
- клиентский метод получения ссылки на открытие платежного интерфейса, если в проекте настроен Xsolla Login.
Открытие платежного интерфейса с помощью серверного метода создания токена
- Получите токен для открытия платежного интерфейса. При этом передайте в метод:
- значение
change_plan
в параметреpurchase.subscription.operation
; - ID нового плана в параметре
purchase.subscription.plan_id
; - ID продукта подписки в параметре
purchase.subscription.product_id
, если вы используете продукты подписки. Для его получения обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
- значение
- Откройте платежный интерфейс одним из способов:
Открытие платежного интерфейса на странице управления подписками с помощью клиентского метода
Если в проекте настроен Xsolla Login, вы можете использовать клиентский метод получения ссылки на открытие платежного интерфейса. Возвращенная в ответе ссылка позволяет открыть платежный интерфейс на странице управления подписками, где пользователь сможет выбрать активную подписку и сменить ее.
Чтобы сделать это, в клиентской части вашего приложения реализуйте получение ссылки на платежный интерфейс с использованием HTTP POST-запроса https://subscriptions.xsolla.com/api/user/v1/projects/{project_id}/subscriptions/manage
.
Запрос к методу должен содержать заголовок Authorization: Bearer <client_user_jwt>
, где <client_user_jwt>
— JSON Web Token (JWT) пользователя — уникальный токен, закодированный по стандарту Base64. Используйте для его получения:
- Методы API
Register new user иAuth by username , если в вашем приложении используется авторизация по логину и паролю. - Метод API
Auth via social network , если в вашем приложении используется авторизация через социальные сети.
projectId
— ID проекта. Вы можете найти этот параметр в Личном кабинете рядом с названием проекта.
В качестве query-параметра укажите country
— страна пользователя в двухбуквенном обозначении согласно стандарту ISO 3166-1 alpha-2. Влияет на выбор локали и валюты. Если параметр не передается, страна определяется по IP-адресу пользователя.При необходимости передайте дополнительные параметры для кастомизации платежного интерфейса.
Параметры тела запроса:
Параметр | Тип | Описание |
---|---|---|
| string | Обязательный. Внешний ID плана подписки. Вы можете найти этот параметр в Личном кабинете в разделе Subscriptions > Планы подписки. |
| object | Объект, содержащий настройки проекта. |
| object | Объект с настройками интерфейса. |
| string | Размер платежного интерфейса. В зависимости от требуемых размеров платежного интерфейса параметр может принимать следующие значения:
|
| string | Внешний вид интерфейса оплаты. Может принимать значения default (по умолчанию), default_dark или значение ID кастомизированной темы. |
| string | Тип устройства. Может принимать значения desktop (по умолчанию) или mobile . |
| object | Объект с данными настроек для desktop-версии. |
| object | Объект с настройками header. |
| boolean | Показывать ли кнопку Закрыть в настольной версии платежного интерфейса. Нажатие на кнопку закрывает платежный интерфейс и перенаправляет пользователя на адрес, указанный в параметре settings.return_url . false по умолчанию. |
| boolean | Должен ли хедер отображаться на странице оплаты. |
| string | Внешний вид хедера. Может принимать значения compact (в этом случае название игры и ID пользователя не будут показываться в хедере) или normal . |
| boolean | Если значение true , то логотип будет отображаться в header (необходимо сначала прислать файл с логотипом вашему персональному менеджеру). |
| boolean | Должно ли название игры отображаться в хедере. |
| string | Внешний вид хедера. Может принимать значения compact (в этом случае название игры и ID пользователя не будут показываться в хедере) или normal . |
| string | Пользователь может совершить платеж только через сохраненные способы оплаты. Принимает значение saved_accounts . |
| boolean | Скрывать или нет footer в мобильной версии платежного интерфейса. |
| boolean | Показывать ли кнопку Закрыть в мобильной версии платежного интерфейса. Нажатие на кнопку закрывает платежный интерфейс и перенаправляет пользователя на адрес, указанный в параметре settings.return_url . false по умолчанию. |
| string | Платежный интерфейс в режиме Личного кабинета. Принимает значение user_account . Хедер содержит только навигационное меню Личного кабинета; исключается возможность выбора предмета и оплата покупки; режим Личного кабинета доступен только в desktop-режиме. |
| string | Предпочтительная валюта платежа. Используется трехбуквенное обозначение валюты согласно стандарту ISO 4217. |
| string | ID транзакции в игре. Должен быть уникальным для каждого платежа пользователя. |
| integer | ID способа оплаты. Список ID способов оплаты можно получить в Личном кабинете. |
| string | Пользователь будет перенаправлен на данную страницу после совершения платежа. Параметры user_id , foreigninvoice , invoice_id и status будут автоматически добавлены к ссылке. |
| object | Настройки политики редиректа (объект). |
| string | Статус платежа, при котором пользователь перенаправляется на URL-адрес возврата после совершения платежа. Принимает значение none , successful , successful_or_canceled или any . |
settings.redirect_policy.delay | integer | Задержка (в секундах), после которой пользователь автоматически перенаправляется на return URL. |
| string | Статус платежа, при котором пользователь перенаправляется на URL-адрес возврата после совершения платежа. Принимает значение none , successful , successful_or_canceled или any . |
| string | Текст кнопки для ручного перенаправления. |
- curl
curl -X 'POST' \
'https://subscriptions.xsolla.com/api/user/v1/projects/{project_id}/subscriptions/manage?country=RU ' \
-H 'accept: application/json' \
-H 'Authorization: Bearer client_user_jwt'
{
"settings": {
"ui": {
"size": "large",
"theme": "string",
"version": "desktop",
"desktop": {
"header": {
"is_visible": true,
"visible_logo": true,
"visible_name": true,
"type": "compact",
"close_button": true
}
},
"mobile": {
"mode": "saved_accounts",
"footer": {
"is_visible": true
},
"header": {
"close_button": true
}
},
"license_url": "string",
"mode": "user_account",
"user_account": {
"history": {
"enable": true,
"order": 1
},
"payment_accounts": {
"enable": true,
"order": 1
},
"info": {
"enable": true,
"order": 1
},
"subscriptions": {
"enable": true,
"order": 1
}
}
},
"currency": "str",
"locale": "st",
"external_id": "string",
"payment_method": 1,
"return_url": "string",
"redirect_policy": {
"redirect_conditions": "none",
"delay": 0,
"status_for_manual_redirection": "none",
"redirect_button_caption": "string"
}
}
}
Пример ответа:
- javascript
{
"link_to_ps": "https://secure.xsolla.com/paystation2/?access_token=<access_token>"
}
Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.