添加频道商品
更新时间:2026-01-12 14:16:50
接口描述
1、添加频道商品库商品
2、(channelId, timestamp, appId)参与sign签名,并和sign一起通过url传递,请求体参数不参与签名,通过post请求体传递【请设置请求头contentType:application/json】
3、接口支持https协议
接口URL
http://api.polyv.net/live/v3/channel/product/add
请求方式
POST
接口约束
1、接口同时支持HTTP 、HTTPS ,建议使用HTTPS 确保接口安全,接口调用有频率限制,详细请查看
2、当商品类型为普通商品时,商品名称、商品封面链接、商品实际价格、商品上下架状态、商品链接类型必传,并根据商品链接类型传入对应链接;当商品类型为金融商品时,商品名称、商品上下架状态、商品链接类型必传,并根据商品链接类型传入对应链接
请求参数描述
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| appId | true | String | 账号appId【详见获取密钥】 |
| timestamp | true | Long | 当前13位毫秒级时间戳,3分钟内有效 |
| sign | true | String | 签名,为32位大写的MD5值,生成签名的appSecret密钥作为通信数据安全的关键信息,严禁保存在客户端直接使用,所有API都必须通过客户自己服务器中转调用POLYV服务器获取响应数据【详见签名生成规则】 |
| channelId | true | String | 频道号 |
请求体参数描述
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| productType | false | String | 商品类型,可选值有: normal: 普通商品 finance: 金融商品 position:职位商品 不传时默认为 normal |
| cover | false | String | 普通商品(productType为normal)时,商品封面链接,必传且长度范围:1-500 金融商品(productType为finance)时,产品封面,非必填 职位商品(productType为position)时,职位封面,非必填 cover和ext选择其中一个字段传,如果同时传以ext为准 |
| name | true | String | 普通商品(productType为normal)时,商品名称,必填 金融商品(productType为finance)时,产品名称,必填 职位商品(productType为position)时,职位名称,必填 注:接口可支持1-100字符,直播后台设置仅支持1-50个字符 |
| status | true | Integer | 商品上下架状态 1:上架状态 2:下架状态 |
| linkType | true | Integer | 商品链接类型 10:通用链接 11:多平台链接 |
| link | false | String | 通用链接,商品链接,链接地址长度为1-500 当请求参数linkType=10时,该参数必填 当请求参数linkType=11时,该参数为非必填 |
| pcLink | false | String | 多平台链接,pc端跳转链接,链接地址长度为1-500 |
| mobileLink | false | String | 多平台链接,移动web端链接 |
| wxMiniprogramLink | false | String | 多平台链接,小程序内页面路径及参数(对于path属性,所声明的页面路径必须添加.html后缀,如pages/home/index.html) |
| wxMiniprogramOriginalId | false | String | 多平台链接,小程序端原始Id |
| wxMiniprogramAppId | false | String | 多平台链接,小程序端appId |
| mobileAppLink | false | String | 多平台链接,移动App端链接 |
| androidLink | false | String | 多平台链接,移动APP-安卓系统原生页面链接 |
| iosLink | false | String | 多平台链接,移动APP-苹果系统原生页面链接 |
| params | false | String | 自定义参数,该参数以String类型的json对象接收,请求时需要转义,见下方请求体参数示例 普通商品(productType为normal)时示例: {"id":21,"color":"blue","level":1},非必填金融商品(productType为finance)时示例: {"id":21,"color":"blue","level":1},非必填职位商品(productType为position)时必填且必须上传treatment(薪资/待遇)参数,例如: {"treatment":"7~8k"} |
| productDesc | false | String | 普通商品(productType为normal)时,商品描述,非必填 金融商品(productType为finance)时,产品描述,非必填 职位商品(productType为position)时,职位描述,必填 |
| features | false | String | 该参数以String类型的json对象接收,请求时需要转义,见下方请求体参数示例 普通商品(productType为normal)时,产品标签,json数组,例如: ["tab1", "tab2"]金融商品(productType为finance)时,产品标签,json数组,例如: ["tab1", "tab2"]职位商品(productType为position)时,职位标签,json数组,例如: ["tab1", "tab2", "tab3"],职位商品标签不足三个时用空字符串代替 |
| btnShow | false | String | 职位商品(productType为position)时,按钮显示文案,必填 其他非必填,默认值:去购买 |
| yield | false | String | 金融商品(productType为finance)参数,产品收益率/价格 |
| originId | false | String | 平台商品id,(有值则平台商品库复制新建频道商品,此时其他字段只有status为必填) |
| strategy | false | String | originId非空时的复制平台商品的策略,可选值: copy-复制, ref-引用(推荐使用此值),默认值为copy (引用平台商品库的商品:平台商品库改动商品字段,会自动同步到频道商品库中 拷贝平台商品库的商品:平台商品库改动商品字段,不会自动同步到频道商品库中) |
| productDetail | false | String | 商品详情 |
| ext | false | String | 扩展信息:JSON对象字符串:{"coverList":["封面图地址,最多15个"], "videoList":[{"videoSource":"视频来源", "videoId":"视频ID"}]} 【详情见EXT】cover和ext选择其中一个字段传,如果同时传以ext为准 |
| tagIds | false | String | 商品标签id列表:JSON数组字符串, 格式如: [100,102,103] |
| - | - | - | 以下为普通商品专用参数 (productType=normal) |
| priceType | false | String | 商品实际价格类型,可选值有: AMOUNT: 金额 CUSTOM: 自定义 不传时默认为 AMOUNT |
| realPrice | false | Float | 商品实际价格-金额,priceType=AMOUNT 时必传,最高精确度为两位小数,如 12.34 |
| customPrice | false | String | 商品实际价格-自定义,priceType=CUSTOM 时必传,最多20个字符 |
| originalPriceType | false | String | 商品原始价格(划线价格)类型,可选值有: AMOUNT: 金额 CUSTOM: 自定义 默认为 AMOUNT |
| price | false | Float | 商品原始价格(划线价格)-金额,originalPriceType=AMOUNT 时生效,最高精确度为两位小数,如 12.34 |
| customOrignalPrice | false | String | 商品原始价格(划线价格)-自定义,originalPriceType=CUSTOM 时生效,最多20个字符 备注:如果 price 和 customOriginalPrice 都为空,则表示不启用原始价格(划线价格) |
| - | - | - | 以上为普通商品专用参数 (productType=normal) |
EXT
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| coverList | true | Array | 封面图地址数组,最多15个 |
| videoList | false | Array | 视频数组,最多1个【详情见ChannelProductExtVideo】需要开通素材库才能用 |
| jumpWay | false | String | 购买方式为外链购买-通用链接的跳转方式: POP_UP-弹出框打开、NEW_WINDOW-新窗口打开、CURRENT_WINDOW-当前窗口打开 |
ChannelProductExtVideo
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| videoId | true | String | 视频ID |
| videoSource | true | String | 视频来源: MATERIAL_LIBRARY-素材库 |
示例
http://api.polyv.net/live/v3/channel/product/add?appId=frlr1zazn3&sign=8C89A574637594B0CB524039FC6D66C9&channelId=2288633×tamp=1622177434141
请求体参数
{
"name": "测试添加金融产品1",
"status": "1",
"linkType": 10,
"link": "http://live.polyv.net",
"btnShow": "测试按钮显示",
"strategy":"copy",
"productDesc": "测试产品描述",
"yield": "10.01%",
"features": "[\"tab1\", \"tab2\"]",
"params": "{\"id\":21,\"color\":\"blue\",\"level\":1}",
"productType": "finance",
"productDetail" : "<p>这是商品详情!</p>"
}
响应参数描述
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 响应状态码,200为成功返回,非200为失败【详见全局错误说明】 |
| status | String | 响应状态文本信息 |
| message | String | 响应描述信息,当code为400或者500的时候,辅助描述错误原因 |
| data | Object | 请求成功时为商品信息【详见Data参数描述】,请求失败时为空 |
Data参数描述
| 参数名 | 类型 | 说明 |
|---|---|---|
| productId | Integer | 商品productId |
| userId | String | POLYV用户ID,和保利威官网一致,获取路径:官网->登录->直播(开发设置) |
| channelId | String | 频道号 |
| name | String | 商品名称 |
| productType | String | 商品类型,可能的值有: normal: 普通商品 finance: 金融商品 position:职位商品 |
| cover | String | 商品封面链接 |
| link | String | 商品通用类型商品链接 |
| status | Integer | 商品上下架状态 , 1:上架状态 2:下架状态 |
| createdTime | Long | 创建商品时间,13位毫秒级时间戳 |
| lastModified | Long | 更新商品时间,13位毫秒级时间戳 |
| rank | Integer | 商品排序号 |
| type | String | 平台标志,默认live,其他无效 |
| linkType | Integer | 商品链接类型, 10:通用链接 11:多平台链接 |
| pcLink | String | 多平台链接,PC端跳转链接 |
| mobileLink | String | 多平台链接,移动WEB端跳转链接 |
| wxMiniprogramLink | String | 多平台链接,小程序端跳转链接 |
| wxMiniprogramOriginalId | String | 多平台链接,小程序端ID |
| wxMiniprogramAppId | String | 多平台链接,小程序端appID |
| mobileAppLink | String | 多平台链接,移动APP端跳转链接 |
| androidLink | String | 多平台链接,移动APP-安卓系统原生页面链接 |
| iosLink | String | 多平台链接,移动APP-苹果系统原生页面链接 |
| params | String | 自定义参数,json对象 |
| btnShow | String | 按钮显示文案 |
| features | String | 普通商品(productType为normal)时,产品标签,json数组,例如:["tab1", "tab2"]金融商品(productType为finance)时,产品标签,json数组,例如: ["tab1", "tab2"]职位商品(productType为position)时,职位标签,json数组,例如: ["tab1", "tab2"] |
| productDesc | String | 产品描述,支持特殊字符 |
| yield | String | 产品收益率/价格 |
| productDetail | String | 商品详情,返回的是个内容存放的地址:例如 https://liveimages.videocc.net/product-info/product-detail/4d57ea01de/704007d1fdfd4cb2a5b3d3a842418831.json url存放的就是商品详情内容 |
| ext | String | 扩展信息:JSON对象字符串:{"coverList":["封面图地址,最多15个"], "videoList":[{"videoSource":"视频来源", "videoId":"视频ID"}]} 【详情见EXT】 |
| - | - | 以下为普通商品专用参数 (productType=normal) |
| priceType | String | 商品实际价格类型,可能的值有: AMOUNT: 金额 CUSTOM: 自定义 |
| realPrice | Float | 商品实际价格-金额,最高精确度为两位小数,如 12.34 |
| customPrice | String | 商品实际价格-自定义 |
| originalPriceType | String | 商品原始价格(划线价格)类型,可能的值有: AMOUNT: 金额 CUSTOM: 自定义 |
| price | Float | 商品原始价格(划线价格)-金额,最高精确度为两位小数,如 12.34 |
| customOrignalPrice | String | 商品原始价格(划线价格)-自定义备注:如果 price 和 customOriginalPrice 都为空,则表示不启用原始价格(划线价格) |
| - | - | 以上为普通商品专用参数 (productType=normal) |
商品详情productDetail url里存放内容示例
{
"productDetail": "<p>这是商品详情</p>"
}
Java请求示例
快速接入基础代码请下载相关依赖源码, 点击下载源代码 ,下载后加入到自己的源码工程中即可。测试用例中的HttpUtil.java 和 LiveSignUtil.java 都包含在下载文件中。
强烈建议您使用直播Java SDK完成API的功能对接,直播Java SDK 对API调用逻辑、异常处理、数据签名、HTTP请求线程池进行了统一封装和优化。
private static final Logger log = LoggerFactory.getLogger(ChannelOperateTest.class);
/**
* 添加商品
* @throws IOException
*/
@Test
public void testAddChannelProduct() throws IOException, NoSuchAlgorithmException {
//公共参数,填写自己的实际参数
String appId = super.appId;
String appSecret = super.appSecret;
String userId = super.userId;
String timestamp = String.valueOf(System.currentTimeMillis());
//业务参数
String channelId = "2288633";
String url = "http://api.polyv.net/live/v3/channel/product/add";
//http 调用逻辑
Map<String, String> requestMap = new HashMap<>();
requestMap.put("appId", appId);
requestMap.put("timestamp", timestamp);
requestMap.put("channelId", channelId);
requestMap.put("sign",LiveSignUtil.getSign(requestMap, appSecret));
url=HttpUtil.appendUrl(url,requestMap);
String json = "{\"name\":\"测试添加金融产品1\",\"status\":\"1\",\"linkType\":10,\"link\":\"http://live.polyv.net\",\"btnShow\":\"测试按钮显示\",\"productDesc\":\"测试产品描述\",\"yield\":\"10.01%\",\"features\":\"[\\\"tab1\\\", \\\"tab2\\\"]\",\"productType\":\"finance\", \"strategy\":\"copy\"}";
String response = HttpUtil.postJsonBody(url, json,null);
log.info("测试添加商品:{}",response);
//do somethings
}
响应示例
系统全局错误说明详见全局错误说明
成功示例
{
"code": 200,
"status": "success",
"message": "",
"data": {
"productId": 134827,
"userId": "1b448be323",
"channelId": 2272655,
"name": "测试添加金融产品1",
"price": null,
"cover": "",
"link": "http://live.polyv.net",
"status": 1,
"createdTime": 1661390909000,
"lastModified": 1661390909000,
"rank": 55,
"realPrice": 0,
"type": "live",
"linkType": 10,
"pcLink": "",
"mobileLink": "",
"androidLink": null,
"iosLink": null,
"otherLink": null,
"wxMiniprogramLink": "",
"wxMiniprogramOriginalId": "",
"wxMiniprogramAppId": "",
"mobileAppLink": "",
"params": "{\"id\": 21, \"color\": \"blue\", \"level\": 1}",
"productType": "finance",
"btnShow": "测试按钮显示",
"features": "[\"tab1\", \"tab2\"]",
"productDesc": "测试产品描述",
"yield": "10.01%",
"productDetail": "https://liveimages.videocc.net/product-info/product-detail/4d57ea01de/704007d1fdfd4cb2a5b3d3a842418831.json"
}
}
异常示例
{
"code": 400,
"status": "error",
"message": "invalid signature.",
"data": ""
}
