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

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

运行机制

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

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

如何获取

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

通过服务器侧创建令牌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
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"
    }
  }
}

响应示例:

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

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

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!