如何允许用户更改订阅计划

注:
如要允许用户在您的项目中更改计划,需设置支付界面的正确行为。请联系您的客户成功经理或发送邮件至csm@xsolla.com进行设置。
您可以允许用户在当前或下一订阅周期中更改订阅计划,以及允许在一天中多次更改计划。

运行机制

  • 选择新计划后,当前订阅未使用周期部分将退款到用户余额。
  • 新订阅计划全部使用用户余额进行支付。如余额不足,其余部分用项目支持的任何其他支付方式进行支付。
  • 更改计划时,确认付款后资金将立即划除,即使项目的配置是计划从下一账单周期开始更改也是如此。
  • 如新计划的支付货币与当前计划不同,在新计划将在货币转换后进行支付。

以下条件下不能更改计划:
  • 对于要将当前计划更改到的新计划,用户已有该计划的生效中订阅
  • 用户要更改的订阅不处于激活状态
  • 用户要更改的订阅计划属于终身计划类型:这种订阅计划只能在指定退款期限内取消
注:
如项目中配置了计划组,则只能在同一个组中更改计划。关于组操作的详细信息,请参阅如何设置基于订阅的产品和计划组说明。

如何获取

  1. 在发布商帐户中打开您的项目,前往商品目录 > 订阅 > 设置部分。
  2. 更改计划部分,将支持选择其他计划开关设置为
  3. 默认情况下,计划更改从下一周期开始生效。如要允许在当前周期中更改计划,请选择现在。如选择该选项,计划更改将在确认付款后立即发生。
  4. 如要允许一天内多次更改计划,请将支持在同一天内多次选择不同的计划开关设置为
  5. 打开支付界面时,请使用:

通过服务器侧创建令牌API调用打开支付UI

  1. 向方法传入以下参数获取令牌
    • purchase.subscription.operation参数中传入change_plan值。
    • purchase.subscription.plan_id参数中传入新计划的ID。
    • purchase.subscription.product_id参数中传入基于订阅的产品ID(如使用基于订阅的产品)。请联系您的客户成功经理或发送邮件至csm@xsolla.com获取该ID。
  2. 通过以下方式之一打开支付界面:

使用客户端侧API调用在订阅管理页面上打开支付UI

如果项目中配置了艾克索拉登录管理器,可使用客户端侧API调用来获取打开支付界面的链接。通过响应中返回的链接可在订阅管理页面上打开支付UI,用户可以在其中选择生效中的订阅来进行更改。

具体方法是,在您应用程序的客户端侧,实现通过HTTP POST请求接收支付界面的链接:https://subscriptions.xsolla.com​/api/user/v1/projects/{project_id}/subscriptions/manage。 请求必须包含Authorization: Bearer <client_user_jwt>头,其中<client_user_jwt>是用户的JSON Web令牌(JWT),它是一个根据Base64标准编码的Base64编码令牌。要获取该令牌:

指定项目ID作为projectId路径参数。可在发布商帐户项目名称旁边找到该参数。 指定country作为请求参数,值为符合ISO 3166-1 alpha-2标准的用户国家/地区两字母代码。该参数影响区域位置和货币。如未传入该参数,则国家/地区由用户的IP地址决定。

如需要,传入自定义补充参数

请求正文参数:

参数类型描述
plan_external_id
string必需。订阅计划的外部ID。可在发布商帐户 > 商品目录 > 订阅 > 订阅计划部分找到。
settings
object带有自定义项目设置的对象。
settings.ui
object带有界面设置相关数据的对象。
settings.ui.size
string支付UI的大小。此参数可拥有以下值之一,具体取决于支付UI的所需大小:
  • small:支付UI支持的最小尺寸。当窗口大小严格受限时,请使用此值(尺寸:620 x 630 px)
  • medium:支付UI的推荐大小。使用此值可以在灯箱中显示支付UI(尺寸:740 x 760 px)
  • large:在新窗口或者选项卡中显示支付UI的最佳大小(尺寸:820 x 840 px)
settings.ui.theme
string支付UI的外观主题。可以是defaultdefault_dark自定义主题ID
settings.ui.version
string设备类型。可以是desktop(默认)或mobile
settings.ui.desktop
object带有对桌面版本有效的界面设置相关数据的对象。
settings.ui.desktop.header
object带有标题设置相关数据的对象。
settings.ui.desktop.header.close_button
boolean是否在支付中心桌面端显示关闭按钮。该按钮将关闭支付中心并将用户重定向到settings.return_url参数中指定的URL。默认为false
settings.ui.desktop.header.is_visible
boolean标题在支付UI上是否可见。
settings.ui.desktop.header.is_visible.type
string标题外观。可以是compact(游戏名和用户ID不在标题中显示)或normal
boolean如果为true,标题中将显示Logo(请先把Logo文件提供给您的客户成功经理)。
settings.ui.desktop.header.visible_name
boolean标题中是否显示项目名称。
settings.ui.desktop.header.type
string如何显示标题。可以是compact(隐藏项目名称和用户ID)或normal(默认)。
settings.ui.mobile.mode
string用户仅可以通过他们已保存的付款方式进行付款。可以为saved_accounts
boolean是否在移动版本的支付UI中隐藏或显示脚注。
settings.ui.mobile.header.close_button
boolean是否在支付中心移动版中显示关闭按钮。该按钮将关闭支付中心并将用户重定向到settings.return_url参数中指定的URL。默认为false
settings.ui.mode
string支付中心中的界面模式。只能是user_account:标头仅包含帐户导航菜单,而没有用于选择产品或进行付款的任何选项。此模式仅在桌面版中可用。
settings.currency
string首选支付币种。三字母ISO 4217货币代码。
settings.external_id
string游戏中的交易ID。值对于每个用户付款必须唯一。
settings.payment_method
integer支付方式ID。要获取支付方式ID列表,您可以前往发布商帐户
settings.return_url
string用户在支付过后重定向到的页面。参数user_idforeigninvoiceinvoice_idstatus将自动添加到链接中。
settings.redirect_policy
object重定向政策设置(对象)。
settings.redirect_policy.redirect_conditions
string支付后将用户重定向到返回URL的支付状态。可以是nonesuccessfulsuccessful_or_canceledany
settings.redirect_policy.delay
integer延迟时间(单位为秒),经过该时间后用户将自动重定向至返回URL。
settings.redirect_policy.status_for_manual_redirection
string支付后将用户重定向到返回URL的支付状态。可以是nonesuccessfulsuccessful_or_canceledany
settings.redirect_policy.redirect_button_caption
string手动重定向按钮上的文字。
请求示例:
Copy
Full screen
Small screen
 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}

响应示例:

Copy
Full screen
Small screen
1{
2  "link_to_ps": "https://secure.xsolla.com/paystation2/?access_token=<access_token>"
3}
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
上次更新时间: 2025年9月19日

发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!
无法发送您的反馈
请稍后重试或发送邮件至doc_feedback@xsolla.com与我们联系。