tt.requestGamePayment
收藏我的收藏
基础库 1.0.0 开始支持本方法,这是一个异步方法。
发起支付
前提条件 | |
业务背景 | 无 |
使用限制 | •异常情况下,充值有可能存在游戏币延迟到账问题,建议游戏在收到支付结果回调后,向服务端轮询最新游戏币余额,间隔 3 秒,持续约 1 分钟,可以根据返回值的 save_amt 的变化来确定是否充值成功。 同时也存在一些异常情况,导致充值成功后结果回调失败,因此建议游戏在启用游戏时主动查询游戏币余额,并且提供给用户主动刷新余额的功能。(不要将查询余额作为进入游戏的必要条件,查询失败时,可在显示余额的界面显示异常,不要拒绝用户进入游戏,更不要直接显示 0) 强烈建议请求中填入 customId 和 extraInfo 字段(字段意义见下方表格),如果未填,支付结果回调将不包含游戏开发者的订单号,导致开发者无法确定回调是对应哪个订单,从而影响游戏道具发放。如果遇到此类问题,开发者可调用queryPayState 接口进行订单状态确认。 |
注意事项 | 无 |
相关教程 | 无 |
语法
tt.requestGamePayment(options)
参数说明
options 为 object 类型,属性如下:
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
mode | string | | 是 | 支付的类型,枚举值
| 1.0.0 |
env | number | 0 | 是 | 环境配置,枚举值
| 1.0.0 |
currencyType | string | | 是 | 币种,枚举值
| 1.0.0 |
platform | string | | 是 | 申请接入时的平台,目前仅支持"android" | 1.0.0 |
buyQuantity | number | | 否 | 金币购买数量,金币数量必须满足:金币数量*金币单价 = 限定价格等级(详见下方 buyQuantity 说明部分。开发者可以在字节小游戏平台的“支付”tab 设置游戏币单价)
| 1.0.0 |
zoneId | string | 1 | 否 | 游戏服务区 id,开发者自定义。游戏不分大区则默认填写"1"。如果应用支持多角色,则角色 ID 接在分区 ID 后,用"_"连接 | 1.0.0 |
customId | string | | 是 | 1.55.0 | |
extraInfo | string | | 否 | 1.55.0 | |
goodType | number | 0 | 否 | 支付场景,详见下方 goodType 说明 | 3.47.0 |
orderAmount | number | | 否 | goodType为道具直购场景时必传,代表道具现金价格,单位为【分】
| 3.47.0 |
goodName | string | | 否 | goodType为道具直购场景时,代表道具名称,长度限制小于等于10个字符,用于区分道具类型 | 3.47.0 |
success | function | | 否 | 接口调用成功的回调函数 | 1.0.0 |
fail | function | | 否 | 接口调用失败的回调函数 | 1.0.0 |
complete | function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | 1.0.0 |
buyQuantity 说明
购买游戏币的数量,开发者可以在字节小游戏平台的“支付”tab 设置游戏币单价,换算为人民币时必须符合指定价格档位,计算公式为:buyQuantity * 游戏币单价 = 限定价格等级。如:游戏币单价为 0.1 元,一次购买数量至少是 10 个,详见小游戏接入流程说明。
限定价格等级(单位:元) | 1 3 6 8 12 18 25 30 40 45 50 60 68 73 78 88 98 108 118 128 148 168 188 198 328 648 998 1288 1998 2998 |
goodType 说明
由于 goodType 需要基础库版本 3.47.0 及以上支持,可使用 tt.canIUse('requestGamePayment.object.goodType')进行兼容判断,开发者需要确保与其他支付方式实现版本兼容。
值 | 说明 |
0 | 默认值,表示游戏币场景 |
1 | 游戏币场景 |
2 | 道具直购场景 |
回调成功
object 类型,属性如下:
属性名 | 类型 | 说明 | 最低支持版本 |
errMsg | string | requestGamePayment:ok | 1.0.0 |
回调失败
object 类型,属性如下:
属性名 | 类型 | 说明 | 最低支持版本 |
errMsg | string | "requestGamePayment:fail " + 错误详情 | 1.0.0 |
errCode | number | 错误码,对应信息可参考错误码说明 | 1.0.0 |
错误码说明
errCode | errMsg | 说明 | 最低支持版本 |
-1 | requestGamePayment:fail 支付失败 | 用户支付失败 | 1.0.0 |
-1 | requestGamePayment:fail internal error | 1.0.0 | |
-2 | requestGamePayment:fail 支付取消 | 用户取消支付 | 1.0.0 |
3 | requestGamePayment:fail error_tip_start_cash_register_fail | 1.0.0 | |
4 | requestGamePayment:fail 网络异常 | 用户网络异常 | 1.0.0 |
-15002 | requestGamePayment:fail 请求参数不合法 | 请求参数不合法 | 1.0.0 |
-15006 | requestGamePayment:fail app 没有支付权限 | 1.0.0 | |
-15098 | requestGamePayment:fail 当前用户未通过实名认证 | 当前用户未通过实名认证 | 1.0.0 |
-15099 | requestGamePayment:fail 当前用户累计支付金额超过限制 | 当前用户累计支付金额超过限制 | 1.0.0 |
-15101 | requestGamePayment:fail customId 为空或者不唯一 | customId 为空或者不唯一 | 1.0.0 |
-16000 | requestGamePayment:fail 用户未登录 | 用户未登录 | 1.0.0 |
-20002 | requestGamePayment:fail 交易存在风险 | 交易存在风险,被风控策略拦截 | 1.0.0 |
21113 | requestGamePayment:fail face authentication failed | 检测到疑似未成年下单,拉起人脸核验,人脸验证不通过 | 1.0.0 |
扫码体验
无
代码示例
道具直购场景
if (tt.canIUse("requestGamePayment.object.goodType")) { // 道具直购场景 tt.requestGamePayment({ goodType: 2, // 道具直购 orderAmount: 10, // 道具现金价值,单位分 goodName: "道具名称", // 道具名称 currencyType: "CNY", zoneId: "1", customId: "QWERTYUIDFxxxxx", extraInfo: "123", mode: "game", // 支付类型 env: 0, // 支付环境 platform: "android", extraInfo: '{"userId":"12xxx6","version":"v0.0.0","price":"30"}', // extraInfo为字符串类型 success(res) { console.log("调用函数成功"); }, fail(res) { console.log("调用函数失败"); }, complete(res) { console.log("调用完成"); }, }); }
游戏币场景
tt.requestGamePayment({ mode: "game", // 支付类型 env: 0, // 支付环境 platform: "android", currencyType: "CNY", // 币种:目前仅为 "CNY" buyQuantity: 600, // 购买数量,必须满足:金币数量*金币单价 = 限定价格等级(详见金币限定等级) zoneId: "1", customId: "QWERTYUIDFxxxxx", // 开发者自定义唯一订单号。如不填,支付结果回调将不包含此字段,将导致游戏开发者无法发放游戏道具, 基础库版本低于1.55.0没有此字段 extraInfo: '{"userId":"12xxx6","version":"v0.0.0","price":"30"}', // extraInfo为字符串类型 success(res) { console.log("调用函数成功"); }, fail(res) { console.log("调用函数失败"); }, complete(res) { console.log("调用完成"); }, });
Bug & Tip
测试说明
在IDE中调用支付接口 | 在开发者工具中调用支付接口时,可验证接口传入参数有效性。 参数校验通过后模拟器将展示支付二维码,对应真机上表现为拉起收银台 | | 此二维码只用作能力模拟,无法真实进行扫码支付 |
在IDE中使用Mock面板 | 在开发者工具中调用支付相关JSAPI时,可通过该能力Mock多个支付场景,帮助开发者快速调试接口。 | 抖音开发者工具4.4.1版本及以上支持该功能,只用作能力模拟,无法真实进行支付 | |
扫码/真机调试(推荐) | 完整测试支付链路,使用开发者工具中的【预览/真机调试】功能,扫码后可在真机上拉起收银台 | |
|