虎牙开放平台文档

小程序内购技术接入说明

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

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

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

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

说明

  • 主播在每次使用付费模块时,开发者都需要调用该API进行使用权限检查。
  • 当接口返回true时,开发者即可允许主播使用该付费模块。
  • 当接口返回值isCanUse为false时,平台会弹出对应的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

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(); }