服务器侧集成

此集成类型适用于已在自己的服务器上实现了用户授权、游戏内商店和玩家物品库游戏逻辑,但希望使用艾克索拉支付中心的合作伙伴。您需要获取支付中心访问令牌并配置Webhook的处理。

服务器集成过程实现以下支付处理逻辑:

  1. 客户端向应用程序服务器发送请求以打开支付界面。
  2. 应用程序服务器向艾克索拉服务器发送支付货币与金额的信息。
  3. 艾克索拉服务器返回包含购买详情和支付中心参数的令牌。
  4. 应用程序服务器将收到的令牌发送给客户端。
  5. 客户端使用SDK在浏览器中打开支付中心。
  6. 支付所购商品后,将向应用程序服务器发送一个包含支付状态的Webhook。

Discord服务器
与艾克索拉团队以及使用艾克索拉产品的开发者联系。

集成过程

要集成Payments库:

  1. 下载安装Android Studio。
  2. 新建一个项目。
  3. 在您的服务器上设置游戏内商店和产品目录。
  4. 在您的发布商帐户中设置项目
  5. 安装库
  6. 配置返回URL
  7. 获取令牌
  8. 打开支付UI
  9. 设置Webhook处理

完成集成后,可测试支付流程

Note
本指南介绍快速使用该模块所需的最低设置。如有任何问题,请联系您的帐户经理。

在发布商帐户中设置项目

  1. 注册发布商帐户
  2. 配置一个发布商帐户项目。注册帐户后将自动创建一个项目:
    1. 项目部分选择您的项目,然后前往项目设置
    2. 常规设置选项卡中,添加以下内容:
      • 图片(可选)
      • 项目语言(默认为英语)
      • 用于所有指定语言的项目名称
      • 游戏网站(可选)
      • 项目描述(可选)
    3. 单击保存

集成过程需要用到以下参数:

  • 商户ID,可在项目设置 > Webhooks中找到。

  • API密钥,可在公司设置 > API密钥部分找到。

  • 项目ID,可在项目设置 > 项目ID中找到。

  • 密钥,可在项目设置 > Webhooks部分找到。

安装库

可在Maven Central中找到该库。

要安装库:

  1. 启动Android Studio。
  2. 打开应用程序的build.gradle文件。
  3. 在依赖关系部分添加以下代码行,其中<version_number>是Payments库需要的版本:

最新版本:

Copy
Full screen
Small screen
implementation 'com.xsolla.android:payments:<version_number>'

配置返回URL

在项目的字符串资源文件中添加以下字符串以指定在发布商帐户中配置的返回URL

Copy
Full screen
Small screen
<string name="xsolla_payments_redirect_scheme">app</string>
<string name="xsolla_payments_redirect_host">yourgame</string>

应设置返回URL的各部分。所示为app://yourgame的示例。

获取令牌

要获取令牌,请使用Create payment token by server API调用。您的服务器应向艾克索拉服务器发送包含以下数据的请求:

  • 购买者的用户ID
  • 支付金额
  • 支付货币
  • 购买详情(可选)
  • 支付中心参数(可选)

可通过以下方式之一传入购买信息:

  • 以商品列表形式(通过item参数)
  • 以购买描述形式(通过description参数)

支付中心参数(例如本地化语言、界面属性、主题等)在settings对象中传入。要启用/禁用沙盒模式,需在接收令牌请求中更改sandbox参数的值,并更改SDK设置。要更改其余支付中心界面设置,需更改令牌请求的参数。

Note
可使用custom_parameters参数传入额外信息。该信息也将传入配置的Webhook中。

打开支付UI

获取支付中心Intent

要打开支付UI,请将上一步中获得的令牌传入XPayments.createIntentBuilder SDK方法。

Copy
Full screen
Small screen
val intent = XPayments.createIntentBuilder(getContext())
            .accessToken(AccessToken(token))
            .isSandbox(BuildConfig.IS_SANDBOX)
            .build()

使用创建的Intent启动活动

Copy
Full screen
Small screen
startActivityForResult(intent, RC_PAYSTATION)

解析活动结果

Copy
Full screen
Small screen
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
       super.onActivityResult(requestCode, resultCode, data)
       if (requestCode == RC_PAYSTATION) {
           val result = XPayments.Result.fromResultIntent(data)
       }
   }

在上面的代码示例中,向result变量传入了以下数据:

  • 支付过程状态 — 可以为completedcanceled
  • 发票ID — 在支付中心支付处理成功后分配。

为方便起见,可将数据提取到单独变量,如下所示:

Copy
Full screen
Small screen
val (status, invoiceId) = XPayments.Result.fromResultIntent(data)

Note
请勿使用通过SDK方法获得的支付数据来向用户发放商品,那样不安全。

要向用户发放商品,请使用Webhook在您的服务器上接收支付数据。使用通过SDK方法获得的数据在客户端侧显示支付状态,直至应用程序服务器侧收到Webhook为止。

设置Webhook

  1. 发布商帐户中前往您的项目。
  2. 前往项目设置 > Webhooks,指定Webhook URL,然后生成用于给项目Webhook签名的密钥。

  1. 保存设置。
  2. 为支付中心实现以下Webhook:

  1. 前往结账选项卡,然后单击连接

  1. 测试Webhook处理程序。

Note
要确认收到Webhook,您的服务器必须作出如下响应:
  • 不带消息正文的HTTP代码204
  • 描述问题的HTTP代码400(如果指定用户未找到或传入的签名无效)
关于Webhook的详细信息及示例,请参阅API参考

  1. 在侧边栏中单击支付中心,然后前往设置
  2. 结账开关设置为

  1. 单击保存

测试支付流程

成功配置库后,请测试支付流程。默认情况下,所有支付均在沙盒模式下进行,可使用测试银行卡来模拟成功的支付过程。

如果要通过进行真实付款来测试支付流程:

  • 请确保已签署与艾克索拉的协议。
  • 创建Paystation intent时设置.isSandbox(false)
  • 在令牌请求中将sandbox参数设置为false

本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
为此页面评分
为此页面评分
我们还有其他可改进之处吗?

不想回答

感谢您的反馈!
上次更新时间: 2021年8月25日

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

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