Как разрешить пользователю сменить план подписки
Как это работает
- При выборе нового плана производится возврат средств на баланс пользователя за неиспользованный период текущей подписки.
- Оплата нового плана подписки производится полностью с баланса пользователя. При недостаточном балансе производится доплата любым из разрешенных в проекте способов оплаты.
- Списание средств при смене плана происходит сразу после подтверждения оплаты, даже если в проекте настроена смена плана со следующего расчетного периода.
Если валюта нового плана отличается от валюты текущего плана, покупка нового плана будет выполнена с конвертацией валют.
- у пользователя уже есть активная подписка с планом, на который меняется текущий план;
- подписка, которую пользователь хочет сменить, не находится в статусе Active;
- план подписки, который пользователь хочет сменить, имеет тип Бесконечный план — такую подписку можно отменить только в указанный период возврата.
Как настроить
- Откройте проект в Личном кабинете.
- Нажмите Subscriptions в боковом меню и перейдите в раздел Настройки.
- В разделе Изменение плана подписки установите переключатель Возможность выбрать другой план подписки в положение Вкл.
- По умолчанию смена плана разрешена со следующего периода. Чтобы разрешить смену плана в текущем периоде, выберите пункт Текущее время. При выборе этой опции план будет меняться сразу после подтверждения оплаты.
- Чтобы разрешить смену плана более одного раза в день, установите переключатель Возможность выбрать другой план подписки несколько раз в день в положение Вкл.
- При открытии платежного интерфейса используйте:
- серверный метод создания токена;
- клиентский метод получения ссылки на открытие платежного интерфейса, если в проекте настроен Xsolla Login.
Открытие платежного интерфейса с помощью серверного метода создания токена
- Получите токен для открытия платежного интерфейса. При этом передайте в метод:
- значение
change_plan
в параметреpurchase.subscription.operation
; - ID нового плана в параметре
purchase.subscription.plan_id
; - ID продукта подписки в параметре
purchase.subscription.product_id
, если вы используете продукты подписки. Для его получения обратитесь к персональному менеджеру проекта или напишите на [email protected].
- значение
- Откройте платежный интерфейс одним из способов:
Открытие платежного интерфейса на странице управления подписками с помощью клиентского метода
Если в проекте настроен 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
1curl -X 'POST' \
2'https://subscriptions.xsolla.com/api/user/v1/projects/{project_id}/subscriptions/manage?country=RU ' \
3 -H 'accept: application/json' \
4 -H 'Authorization: Bearer client_user_jwt'
5{
6 "settings": {
7 "ui": {
8 "size": "large",
9 "theme": "string",
10 "version": "desktop",
11 "desktop": {
12 "header": {
13 "is_visible": true,
14 "visible_logo": true,
15 "visible_name": true,
16 "type": "compact",
17 "close_button": true
18 }
19 },
20 "mobile": {
21 "mode": "saved_accounts",
22 "footer": {
23 "is_visible": true
24 },
25 "header": {
26 "close_button": true
27 }
28 },
29 "license_url": "string",
30 "mode": "user_account",
31 "user_account": {
32 "history": {
33 "enable": true,
34 "order": 1
35 },
36 "payment_accounts": {
37 "enable": true,
38 "order": 1
39 },
40 "info": {
41 "enable": true,
42 "order": 1
43 },
44 "subscriptions": {
45 "enable": true,
46 "order": 1
47 }
48 }
49 },
50 "currency": "str",
51 "locale": "st",
52 "external_id": "string",
53 "payment_method": 1,
54 "return_url": "string",
55 "redirect_policy": {
56 "redirect_conditions": "none",
57 "delay": 0,
58 "status_for_manual_redirection": "none",
59 "redirect_button_caption": "string"
60 }
61 }
62}
Пример ответа:
- javascript
1{
2 "link_to_ps": "https://secure.xsolla.com/paystation2/?access_token=<access_token>"
3}
Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.