# 支付

快手小游戏提供虚拟充值的能力,用户可以在游戏内下单,进行游戏内道具的购买。本文主要对游戏内的支付能力进行简单概述说明。

# 支付方式

在不同的设备环境中,因相关策略限制,SDK实现支付能力的方式有所区别,如下所示:

支付方式 说明
虚拟支付 利用 ks.requestGamePayment() 接口发起快手虚拟支付,并直接购买游戏内服务或道具,适用于 Android 设备

# 准备事项

# 添加安全域名

根据游戏的发行企业或主体,登录《快手开放平台控制台》 (opens new window)后台,进入“开发 > 开发设置”,在“服务器域名(request 合法域名)”一栏中添加相应的安全域名,详见前文《准备工作 > 添加安全域名》介绍。

# 开通虚拟支付

登录《快手开放平台控制台》 (opens new window)后台,进入“商业化 > 虚拟支付”,申请开通虚拟支付能力,详情请参考《虚拟支付》 (opens new window)文档说明,若有其他疑问请咨询SDK开放平台开发人员。

# 游戏道具价格设置

游戏在设置道具价格时,请务必根据快手小游戏官方API的限定价格等级 (opens new window)进行设置!

# 配置支付回调接口

游戏服务器需按照《服务端对接 > 登录支付 > 支付回调》文档要求,向相关运营人员提供支付回调接口,并由运营人员配置至SDK开放平台后台,用于在用户支付成功后通知游戏发放相应购买商品!

# 接口说明

用于游戏内发起支付,仅在登录成功后可用。

sdkInstance.pay(options);

最低基础库版本要求

当用户客户端基础库版本过低时,调用 sdkInstance.pay(options) 接口将中断用户当前操作并弹出升级提示,不会报错!

# 参数说明

参数说明如下表所示:

选项 类型 必填 默认值 说明
options object -- 支付参数
    options.areaId string / number 1 游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
    options.areaName string 1 游戏大区名称,若游戏无大区概念,可不填,默认值为 1
    options.roleId string / number 同 accountId 角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
    options.roleName string -- 角色昵称
    options.roleLevel number 1 角色等级,若游戏无角色及等级概念,可填关卡等级或不填,默认值为 1
    options.itemId string -- 商品ID
    options.itemName string -- 商品名称
    options.itemNum number 1 商品数量,一般固定传 1
    options.itemPrice number -- 商品单价,单位为分!!!
    options.currency string CNY 货币类型,默认为 CNY在iOS设备中,该选项无效,SDK将强制设为 DIAMOND!!!
    options.rate number -- 游戏币兑换汇率,用于计算游戏币购买数量;例如:后台配置为 1:10,则 rate10,表示1人民币=10游戏币;可登录《快手开放平台控制台》后台,进入“商业化 > 虚拟支付 > 支付设置 > 基础信息 > 货币汇率”栏目中查看
    options.memo string -- 透传参数,支付完成后,SDK服务器将通过支付回调原样返回给游戏服务器
    options.remark string -- 备用透传参数
    options.success function -- 接口调用成功的回调函数(注意,该回调函数被触发时,仅表示当前接口调用成功,并非代表用户实际完成了支付流程,支付且发货成功应以游戏服务端下发通知为准)
    options.fail function -- 接口调用失败的回调函数
    options.complete function -- 接口调用完成的回调函数,成功或失败均会调用

# 示例代码

注:示例代码中的参数或选项均为演示数据,仅供参考,谢谢!

// 当用户客户端基础库版本过低时,调用此接口将中断用户当前操作并弹出升级提示,不会报错!
sdkInstance.pay({
  areaId: 1001,
  areaName: "1区",
  roleId: "123456",
  roleName: "小朋友",
  roleLevel: 1,
  itemId: "com.dh.test",
  itemName: "60钻石",
  itemNum: 1, // 一般固定传1
  itemPrice: 600, // 商品单价单位为分,请注意换算!例如此示例中的600表示600分,即6元
  currency: "CNY",
  rate: 10,
  memo: "123456789123456789", // 透传参数,字符串类型;支付完成后,SDK服务器将通过支付回调原样返回给游戏服务器;这里演示透传游戏业务订单号
  remark: "", // 备用透传参数
  success: function(response) {
    // 该回调函数被触发时,仅表示当前接口调用成功,并非代表用户实际完成了支付流程,支付且发货成功应以游戏服务端下发通知为准
    console.log(response);
  },
  fail: function(error) {
    // 此处返回接口调用失败的错误信息,error.code为cancel时,表示用户主动点击了取消按钮,此时可以不向用户弹出提示
    if (error.code == "cancel") {
      return;
    }

    // 此处可向用户弹出接口返回的错误消息或统一弹出“支付失败”
    sdkInstance.modal.message(error.message);
  },
  complete: function(result) {
    // do something here...
  }
});

# 支付回调

游戏服务器需按照《服务端对接 > 登录支付 > 支付回调》文档要求,向相关运营人员提供支付回调接口,并由运营人员配置至SDK开放平台后台,用于在用户支付成功后通知游戏发放相应购买商品!

注意事项

若有接口方面疑问,请咨询SDK服务端开发:陈肖军!

Last Updated: 2025/2/10 16:44:50