虎牙开放平台文档

小程序内购技术接入说明

1.商品收费类型

直接付费(预付费购买):

  • 可以设置多种有效时长(天)的购买价格。
  • 主播使用时,会进行有效期的检查。首次使用时(有效期结束后)点击时,会弹出购买窗口。
  • 该方式推荐您为小程序中的独立功能设置直接付费使用,如皮肤、道具、特权等

礼物收益付费(月结后付费)

  • 可以设置多种礼物收益分成阶梯(金豆),每个阶梯对应一个费率(%)。
  • 该付费模式需要填写对应的封顶值,当月收益分成大于封顶值,则按照封顶值收取主播费用。
  • 主播使用时,会弹出确定弹窗,主播每达到一个阶梯后,下次点击使用后会展示主播当前的收益和费用情况,确认后可继续使用。
  • 该方式推荐您为小程序中的进阶玩法设置以礼物收益付费的协议,如全新的剧情、特殊的玩法、酷炫的效果等

2.接入流程

  • 1.开发者在开发者中心申请商品,平台审核通过。
  • 2.开发者开发支持付费模块的版本,并且接入下述的SDK API
  • 3.开发者开发完毕后,提交审核,平台进行上线前审核和测试。
  • 4.平台审核测试通过后,开发者即可发布该版本为线上版本。

3.终端支持:

WEBAPP【iOS】APP【安卓】PC客户端助手【iOS】助手【安卓】PC开播端
终端版本5.0.10以上5.0.10以上4.14.6以上
SDK版本1.10.0以上1.10.0以上1.10.0以上

4.功能时序图

  • 1.主播使用预付费类商品模块 avatar
  • 2.主播使用后付费类商品模块 avatar

终端SDK接口">5.终端SDK接口

(1)检查主播是否可以使用当前付费模块

hyExt.revenue.checkStreamerCanUseGoods({goodsUuid: 'xxxxxxxxxxx'})

说明

  • 主播在每次使用付费模块时,开发者都需要调用该API进行使用权限检查。
  • 当接口返回true时,开发者即可允许主播使用该付费模块。
  • 当接口返回值isCanUse为false时,平台会弹出对应的H5页面供主播操作:
    • ①当商品为一次性买断商品,若主播尚未购买,或者购买的商品到达使用有效期,此时会弹出付费购买的H5页面供主播购买。
    • ②当商品为礼物收益类商品时,主播在当前月份内,首次使用、礼物收益到达每个阶梯、费用到达封顶值、存在欠费,此时会弹出相应的H5页面供主播操作。
  • 适用的商品类型:直接付费(预付费购买),礼物收益付费(月结后付费)

适用平台

平台是否适用
WEB
虎牙直播APP
虎牙直播PC客户端
虎牙直播PC主播端
虎牙助手APP

例子

hyExt.revenue.checkStreamerCanUseGoods({ goodsUuid: 'xxxxxxxxxxx' }).then(({ isCanUse }) => { hyExt.logger.info('检查成功:' + isCanUse) }).catch(err => { hyExt.logger.warn('检查失败:' + err.message) })

输入

参数类型说明
reqObject输入参数

其中输入参数的结构为

字段类型说明
goodsUuidString商品id

输出

参数类型说明
promisePromise返回Promise

其中resolve的数据为

参数类型说明
respObject返回结果

其中返回结果的结构为

字段类型说明
isCanUseBoolean是否可用

(2)判断当前主播指定的商品的使用有效期

hyExt.revenue.checkStreamerGoodsExpire({goodsUuid: 'xxxxxxxxxxx'})

说明

  • 判断当前主播指定的商品的使用有效期
  • 适用的商品类型:直接付费(预付费购买)

适用平台

平台是否适用
WEB
虎牙直播APP
虎牙直播PC客户端
虎牙直播PC主播端
虎牙助手APP

例子

hyExt.revenue.checkStreamerGoodsExpire({ goodsUuid: 'xxxxxxxxxxx' }).then(({ {expire, hadBuy} }) => { hyExt.logger.info('获取主播的商品有效期成功', expire, hadBuy) }).catch(err => { hyExt.logger.warn('获取主播的商品有效期失败:' + err.message) })

输入

参数类型说明
reqObject输入参数

其中输入参数的结构为

字段类型说明
goodsUuidString商品id

输出

参数类型说明
promisePromise返回Promise

其中resolve的数据为

参数类型说明
respObject返回结果

其中返回结果的结构为

字段类型说明
expireInteger主播指定商品的失效日期时间戳,没有购买过则返回-1
hadBuyBoolean是否有购买过

(3)弹出商品购买的H5面板

hyExt.revenue.popupGoodsBuyPanel({goodsUuid: 'xxxxxxxxxxx'})

说明

  • 弹出商品购买的H5面板
  • 适用的商品类型:直接付费(预付费购买)

适用平台

平台是否适用
WEB
虎牙直播APP
虎牙直播PC客户端
虎牙直播PC主播端
虎牙助手APP

例子

hyExt.revenue.popupGoodsBuyPanel({ goodsUuid: 'xxxxxxxxxxx' }).then(() => { hyExt.logger.info('弹出商品购买窗口成功') }).catch(err => { hyExt.logger.warn('弹出商品购买窗口失败:' + err.message) })

输入

参数类型说明
reqObject输入参数

其中输入参数的结构为

字段类型说明
goodsUuidString商品id

输出

参数类型说明
promisePromise返回Promise

(4)开启付费模块礼物收益上报

hyExt.revenue.startModuleGiftRevenueStat({goodsUuid: 'xxxxxxxxxxx',giftIds: '20275|20277|20206'})

说明

  • 开发者需要在主播使用礼物收益类付费模块前,调用startModuleGiftRevenueStat开启上报。
  • goodsUuid和giftIds为必填项。
  • 使用该API前请先向官方申请开通该SDK的权限
  • 适用的商品类型:礼物收益付费(月结后付费)

适用平台

平台是否适用
Web
虎牙直播APP
虎牙直播PC客户端
虎牙直播PC主播端
虎牙助手APP

例子

hyExt.revenue.startModuleGiftRevenueStat({ goodsUuid: 'xxxxxxxxxxx', giftIds: '20275|20277|20206' }).then(() => { hyExt.logger.info('开始统计成功') }).catch(err => { hyExt.logger.warn('开始统计失败:' + err.message) })

输入

参数类型说明
reqObject输入参数

其中输入参数的结构为

字段类型说明
goodsUuidString商品id
giftIdsString礼物id,多个用竖线分隔

输出

参数类型说明
promisePromise返回Promise

其中resolve的数据为空

(5)结束付费模块礼物收益上报

hyExt.revenue.endModuleGiftRevenueStat({goodsUuid: 'xxxxxxxxxxx'})

说明

  • 开发者需要在主播停止使用收益类付费模块后,调用endModuleGiftRevenueStat停止上报。
  • 使用该API前请先向官方申请开通该SDK的权限
  • 适用的商品类型:礼物收益付费(月结后付费)

适用平台

平台是否适用
Web
虎牙直播APP
虎牙直播PC客户端
虎牙直播PC主播端
虎牙助手APP

例子

hyExt.revenue.endModuleGiftRevenueStat({ goodsUuid: 'xxxxxxxxxxx' }).then(() => { hyExt.logger.info('停止统计成功') }).catch(err => { hyExt.logger.warn('停止统计失败:' + err.message) })

输入

参数类型说明
reqObject输入参数

其中输入参数的结构为

字段类型说明
goodsUuidString商品id

输出

参数类型说明
promisePromise返回Promise

其中resolve的数据为空

6.支付回调接入

说明

  • 平台支持开发者配置GET和POST的回调接口。
  • 平台回调开发者配置的接口时,会在Http的Header里增加一个authorization的签名的头信息。
  • 回调配置的URL是GET请求,则上述的数据会拼接在URL里
  • 回调配置的URL是POST请求,则上述的数据会在请求的Body里,content-type为application/json
  • 回调的参数类型统一按字符串处理

#####(1)平台回调的数据

  • goodsUuid:小程序的商品uuid
  • orderTime:下单时间(格式:yyyyMMddHHmmss)
  • orderId:订单ID
  • extUuid:小程序的uuid
  • profileId:主播的unionId
  • expenseLevel:主播购买的商品的等级
  • timestamp:时间戳,精确到秒

#####(2)签名算法

  • JAVA示例代码:
/** * 生成虎牙支付回调的签名 * @param appId 开发者的appId * @param extSecret 小程序的秘钥 * @param timestamp 当前的时间戳 * @param data 支付回调的JSON字符串,JSON里的字段类型统一使用String,例如: * {"goodsUuid":"xxxxxxx", * "orderTime":"20210316170234", * "orderId":"21031617023426027961", * "extUuid":"xxxxxx", * "profileId":"zzzzzzzzzzzzz", * "expenseLevel":"1", * "timestamp":"1615885355"} * */ private String getHuyaPayCallBackSign(String appId, String extSecret, Long timestamp, String data) { String checkData = String.format("%s%s%s%s", appId, timestamp, data, extSecret); logger.info("getHuyaPayCallBackSign:{}", checkData); return DigestUtils.md5DigestAsHex(checkData.getBytes(StandardCharsets.UTF_8)).toUpperCase(); }