小程序内购技术接入说明
1.商品收费类型
直接付费(预付费购买):
- 可以设置多种有效时长(天)的购买价格。
- 主播使用时,会进行有效期的检查。首次使用时(有效期结束后)点击时,会弹出购买窗口。
- 该方式推荐您为小程序中的独立功能设置直接付费使用,如皮肤、道具、特权等
礼物收益付费(月结后付费)
- 可以设置多种礼物收益分成阶梯(金豆),每个阶梯对应一个费率(%)。
- 该付费模式需要填写对应的封顶值,当月收益分成大于封顶值,则按照封顶值收取主播费用。
- 主播使用时,会弹出确定弹窗,主播每达到一个阶梯后,下次点击使用后会展示主播当前的收益和费用情况,确认后可继续使用。
- 该方式推荐您为小程序中的进阶玩法设置以礼物收益付费的协议,如全新的剧情、特殊的玩法、酷炫的效果等
2.接入流程
- 1.开发者在开发者中心申请商品,平台审核通过。
- 2.开发者开发支持付费模块的版本,并且接入下述的SDK API。
- 3.开发者开发完毕后,提交审核,平台进行上线前审核和测试。
- 4.平台审核测试通过后,开发者即可发布该版本为线上版本。
3.终端支持:
| WEB | APP【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.主播使用预付费类商品模块

- 2.主播使用后付费类商品模块

终端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)
})
输入
其中输入参数的结构为
字段 | 类型 | 说明 |
---|
goodsUuid | String | 商品id |
输出
参数 | 类型 | 说明 |
---|
promise | Promise | 返回Promise |
其中resolve的数据为
其中返回结果的结构为
字段 | 类型 | 说明 |
---|
isCanUse | Boolean | 是否可用 |
(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)
})
输入
其中输入参数的结构为
字段 | 类型 | 说明 |
---|
goodsUuid | String | 商品id |
输出
参数 | 类型 | 说明 |
---|
promise | Promise | 返回Promise |
其中resolve的数据为
其中返回结果的结构为
字段 | 类型 | 说明 |
---|
expire | Integer | 主播指定商品的失效日期时间戳,没有购买过则返回-1 |
hadBuy | Boolean | 是否有购买过 |
(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)
})
输入
其中输入参数的结构为
字段 | 类型 | 说明 |
---|
goodsUuid | String | 商品id |
输出
参数 | 类型 | 说明 |
---|
promise | Promise | 返回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)
})
输入
其中输入参数的结构为
字段 | 类型 | 说明 |
---|
goodsUuid | String | 商品id |
giftIds | String | 礼物id,多个用竖线分隔 |
输出
参数 | 类型 | 说明 |
---|
promise | Promise | 返回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)
})
输入
其中输入参数的结构为
字段 | 类型 | 说明 |
---|
goodsUuid | String | 商品id |
输出
参数 | 类型 | 说明 |
---|
promise | Promise | 返回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)签名算法
/**
* 生成虎牙支付回调的签名
* @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();
}