小程序内购技术接入说明
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.主播使用预付费类商品模块

终端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)
})
输入
其中输入参数的结构为
| 字段 | 类型 | 说明 |
|---|
| 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 |
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();
}