查询打赏设置

接口URL

http://api.polyv.net/live/v3/channel/donate/get

接口说明

1、接口用于获取全局或当前生效的打赏设置
2、接口支持https

支持格式

JSON

请求方式

GET

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
appId string 从API设置中获取,在直播系统登记的appId
timestamp long 13位当前时间戳
sign string 签名值
channelId int 频道号,不传为获取全局设置,否则为当前生效设置

响应成功JSON示例:

{
  "code": 200,
  "status": "success",
  "message": "",
  "data": {
    "globalSettingEnabled": "N",
    "donateCashEnabled": "Y",
    "donateGoodEnabled": "Y",
    "donateTips": null,
    "cashMin": 0,
    "cashes": [
      0.88,
      6.66,
      8.88,
      18.88,
      66.6,
      88.8
    ],
    "goods": [
      {
        "goodName": "鲜花",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/01-flower.png",
        "goodPrice": 0,
        "goodEnabled": "Y"
      },
      {
        "goodName": "咖啡",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/02-coffee.png",
        "goodPrice": 0.99,
        "goodEnabled": "Y"
      },
      {
        "goodName": "点赞",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/03-good.png",
        "goodPrice": 1.99,
        "goodEnabled": "Y"
      },
      {
        "goodName": "掌声",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/04-applaud.png",
        "goodPrice": 2.99,
        "goodEnabled": "Y"
      },
      {
        "goodName": "666",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/05-666.png",
        "goodPrice": 6.66,
        "goodEnabled": "Y"
      },
      {
        "goodName": "小星星",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/06-star.png",
        "goodPrice": 9.99,
        "goodEnabled": "Y"
      },
      {
        "goodName": "钻石",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/07-diamond.png",
        "goodPrice": 19.99,
        "goodEnabled": "Y"
      },
      {
        "goodName": "跑车",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/08-car.png",
        "goodPrice": 29.99,
        "goodEnabled": "Y"
      },
      {
        "goodName": "火箭",
        "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/09-rocket.png",
        "goodPrice": 66.66,
        "goodEnabled": "Y"
      }
    ]
  }
}

响应失败JSON示例:

未输入appId

{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}

appId不正确

{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}

时间戳错误

{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}

签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

字段说明

参数名 说明
code 返回状态码,成功为200,参数错误为400。
status 状态,成功返回success,失败返回error
message 错误提示信息,成功时为空串
data 打赏设置的相关信息
globalSettingEnabled 是否应用全局设置,获取全局设置时,该值为null
donateCashEnabled 现金打赏开关
donateGoodEnabled 道具打赏开关
donateTips 打赏提示
cashMin 最低打赏金额
cashes 打赏金额选项
goods 打赏道具选项
goodName 道具选项名
goodImg 道具选项对应的图片
goodPrice 道具选项对应的价格
goodEnabled 是否启用该道具

php请求示例

<?php
//引用config.php
include 'config.php';

$channelId="206016";

$params = array(
  'appId' => $appId,
  'timestamp' => $timestamp,
  'channelId' => $channelId
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法
$params['sign'] = $sign;

$url = "http://api.polyv.net/live/v3/channel/donate/get?".http_build_query($params);

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);

echo $res;
?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

修改微信分享设置

接口URL

http://api.polyv.net/live/v3/channel/weixin-share/update

接口说明

1、接口用于修改频道的微信分享相关设置
2、接口支持https

支持格式

JSON

请求方式

POST

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
appId string 从API设置中获取,在直播系统登记的appId
timestamp long 13位当前时间戳
sign string 签名值
channelId int 频道号
weixinShareTitle string 微信分享的标题
weixinShareDesc string 微信分享的描述

响应成功JSON示例:

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": "success"
}

响应失败JSON示例:

未输入appId

{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}

appId不正确

{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}

时间戳错误

{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}

签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

频道Id格式错误

{
    "code": 400,
    "status": "error",
    "message": "param is not digit: %s",
    "data": ""
}

频道不存在

{
    "code": 404,
    "status": "error",
    "message": "channel not found.",
    "data": ""
}

频道Id非法错误

{
    "code": 400,
    "status": "error",
    "message": "illegal channel id: %s",
    "data": ""
}

字段说明

参数名 说明
code 状态码,成功为200,签名失败为403,参数错误为400,服务端错误为500
status 成功为success,错误时为error
message 成功为"",错误时为错误描述信息
data 成功时success,错误时为""

php请求示例

<?php
//引用config.php
include 'config.php';

$params = array(
  'appId' => "填写获取到的appId",
  'timestamp' => "填写13位时间戳",
  'channelId' => "填写频道号",
  'weixinShareTitle' => "我要改标题",
  'weixinShareDesc' => "我要改描述"
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法


$url="http://api.polyv.net/live/v3/channel/weixin-share/update";

function post($url, $post_data = '', $timeout = 5){
   $ch = curl_init();
   curl_setopt ($ch, CURLOPT_URL, $url);
   curl_setopt ($ch, CURLOPT_POST, 1);
   if($post_data != ''){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
   }

   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   curl_setopt($ch, CURLOPT_HEADER, false);
   $file_contents = curl_exec($ch);
   curl_close($ch);
   return $file_contents;
}

$params["sign"] = $sign;
echo post($url, $params);
?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

获取微信分享设置

接口URL

http://api.polyv.net/live/v3/channel/weixin-share/get

接口说明

1、获取频道的微信分享设置信息
2、接口支持https协议

具体功能请查看 微信分享设置

支持格式

JSON

请求方式

 GET

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
channelId int 频道号
appId string 从API设置中获取,在直播系统登记的appId
sign string 签名,为32位大写的MD5值
timestamp string 当前13位毫秒级时间戳,3分钟内有效

响应成功JSON示例:

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": {
        "channelId": 108888,
        "channelName": "多码率测试频道号",
        "coverImg": "//livestatic.videocc.net/uploaded/images/2017/12/ewe26lgx61.png",
        "weixinShareTitle": "微信分享的标题",
        "weixinShareDesc": "微信分享的描述"
    }
}

响应异常JSON示例:

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

字段说明

参数名 说明
code 请求状态响应码
status 请求状态
message 错误信息
channelId 频道号
channelName 频道名称
coverImg 微信分享图标,即频道的直播图标
weixinShareTitle 微信分享的标题
weixinShareDesc 微信分享的描述

php请求示例

<?php

//引用config.php
include 'config.php';

//接口需要的参数(非sign)赋值
$timestamp = 1528708015437;
$appId = "test";
$channelId = 108888;

$params = array(
    'channelId'=>$channelId,
    'appId'=>$appId,
    'timestamp'=>$timestamp,
  );

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法
//接口请求url
$url = "http://api.polyv.net/live/v3/channel/weixin-share/get?channelId=$channelId&appId=$appId&timestamp=$timestamp&sign=$sign";

//输出接口请求结果
echo file_get_contents($url);

?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

设置道具打赏

接口URL

http://api.polyv.net/live/v3/channel/donate/update-good

接口说明

1、接口用于设置频道或者全局道具打赏(带上频道ID为设置频道道具打赏,不带频道ID默认为全局道具打赏设置)
2、通用参数通过普通url参数传递(channelId, timestamp, appId, sign),设置打赏参数的json通过请求体的方式传递
3、接口支持https

支持格式

JSON

请求方式

POST

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
appId string 从API设置中获取,在直播系统登记的appId
timestamp long 13位当前时间戳
sign string 签名值
channelId int 频道号,不传为全局设置
goods 对象数组 请求体参数,道具打赏对象数组,道具对象数量必须大于0小于10
enabled string 请求体参数,道具打赏开关,不传默认开启,值为 Y/N , Y为开启

#道具对象参数

参数名 必选 类型 说明
goodName string 道具名称,不能超过5个字符
goodImg string 道具图片,不能超过120个字符(图片地址可以使用下面json字符串中的默认地址,或者通过上传图片接口上传获取图片地址)
goodPrice double 道具打赏价格
goodEnabled string 道具开关,值为 Y/N , Y为开启

注:这里的channelId,appId,timestamp,sign必须通过url传参,json数据通过请求体传参,如:

http://api.polyv.net/live/v3/channel/donate/update-good?channelId={{channelId}}&appId={{appId}}&timestamp={{timestamp}}&sign={{sign}}

请求体json拼接

{
  "enabled": "Y",
  "goods": [
    {
      "goodName": "鲜花333",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/01-flower.png",
      "goodPrice": 0,
      "goodEnabled": "Y"
    },
    {
      "goodName": "咖啡",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/02-coffee.png",
      "goodPrice": 0.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "点赞",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/03-good.png",
      "goodPrice": 1.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "掌声",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/04-applaud.png",
      "goodPrice": 2.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "666",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/05-666.png",
      "goodPrice": 6.66,
      "goodEnabled": "Y"
    },
    {
      "goodName": "小星星",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/06-star.png",
      "goodPrice": 9.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "钻石",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/07-diamond.png",
      "goodPrice": 19.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "跑车",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/08-car.png",
      "goodPrice": 29.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "火箭233",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/09-rocket.png",
      "goodPrice": 66.66,
      "goodEnabled": "Y"
    }
  ]
}

响应成功JSON示例:

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": true
}

响应失败JSON示例:

#参数错误

{
    "code": 400,
    "status": "error",
    "message": "param validate error",
    "data": 400
}

#未输入appId

{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}

#appId不正确

{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}

#时间戳错误

{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}

#签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

#channelId非法错误

{
    "code": 403,
    "status": "error",
    "message": "illegal channel id: 10001",
    "data": ""
}

#json为空或者json解析错误

{
    "code": 400,
    "status": "error",
    "message": "param validate error",
    "data": ""
}

#json中的goods数量限制

{
    "code": 400,
    "status": "error",
    "message": "goods over limit",
    "data": ""
}

#json中的goods的名称字符限制

{
    "code": 400,
    "status": "error",
    "message": "goods name over limit",
    "data": ""
}

#json中的goods的图片地址字符限制

{
    "code": 400,
    "status": "error",
    "message": "goods image length over limit",
    "data": ""
}

#json中的goods的价格数据类型错误

{
    "code": 400,
    "status": "error",
    "message": "number range error",
    "data": ""
}

字段说明

参数名 说明
code 状态码,成功为200,签名失败为403,参数错误为400,服务端错误为500
status 成功为success,错误时为error
message 成功为"",错误时为错误描述信息
data 成功时为true,错误时为""

java请求示例

import com.live.util.EncryptionUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    private static RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(15000)
            .setConnectionRequestTimeout(15000).build();

    public static void main(String[] args) {

        String url = "http://api.polyv.net/live/v3/channel/donate/update-good";
        int channelId = 209796;
        String appId = "XXXXXX";
        String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        Map<String, String> map = new HashMap<>();
        long timestamp = System.currentTimeMillis();
        map.put("appId", appId);
        map.put("timestamp", String.valueOf(timestamp));
        map.put("channelId", String.valueOf(channelId));

        String sign = getSign(map, key);
        map.put("sign", sign);
        String body = "{\"goods\":[{\"goodName\":\"鲜花333\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/01-flower.png\",\"goodPrice\":0,\"goodEnabled\":\"Y\"},{\"goodName\":\"咖啡\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/02-coffee.png\",\"goodPrice\":0.99,\"goodEnabled\":\"Y\"},{\"goodName\":\"点赞\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/03-good.png\",\"goodPrice\":1.99,\"goodEnabled\":\"Y\"},{\"goodName\":\"掌声\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/04-applaud.png\",\"goodPrice\":2.99,\"goodEnabled\":\"Y\"},{\"goodName\":\"666\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/05-666.png\",\"goodPrice\":6.66,\"goodEnabled\":\"Y\"},{\"goodName\":\"小星星\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/06-star.png\",\"goodPrice\":9.99,\"goodEnabled\":\"Y\"},{\"goodName\":\"钻石\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/07-diamond.png\",\"goodPrice\":19.99,\"goodEnabled\":\"Y\"},{\"goodName\":\"跑车\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/08-car.png\",\"goodPrice\":29.99,\"goodEnabled\":\"Y\"},{\"goodName\":\"火箭233\",\"goodImg\":\"//livestatic.videocc.net/uploaded/images/webapp/channel/donate/09-rocket.png\",\"goodPrice\":66.66,\"goodEnabled\":\"Y\"}]}";
        String content = sendHttpPost(url, map, body);
        System.out.println(content);

    }

    /**
     * 发送 post请求
     * @param httpUrl 地址
     * @param maps 参数
     */
    public static String sendHttpPost(String httpUrl, Map<String, String> maps, String body) {
        StringBuilder url = new StringBuilder();
        url.append(httpUrl).append("?");
        for (Map.Entry<String, String> map : maps.entrySet()) {
            url.append(map.getKey()).append("=").append(map.getValue()).append("&");
        }
        String urlStr = url.toString().substring(0, url.length() - 1);
        // 创建httpPost
        HttpPost httpPost = new HttpPost(urlStr);
        try {
            StringEntity entity = new StringEntity(body, Charset.forName("UTF-8"));
            httpPost.setEntity(entity);
        } catch (Exception e) {
            // ...
        }
        return sendHttpPost(httpPost);
    }

    /**
     * 发送Post请求
     * @param httpPost
     * @return
     */
    private static String sendHttpPost(HttpPost httpPost) {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        HttpEntity entity;
        String responseContent = null;
        try {
            // 创建默认的httpClient实例.
            httpClient = HttpClients.createDefault();
            httpPost.setConfig(requestConfig);
            // 执行请求
            response = httpClient.execute(httpPost);
            entity = response.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            // ...
        } finally {
            try {
                // 关闭连接,释放资源
                if (response != null) {
                    response.close();
                }
                if (null != httpPost) {
                    httpPost.releaseConnection();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                // ...
            }
        }
        return responseContent;
    }

    /**
     * 根据map里的参数构建加密串
     * @param map
     * @param secretKey
     * @return
     */
    protected static String getSign(Map<String, String> map, String secretKey) {
        Map<String, String> params = paraFilter(map);
        // 处理参数,计算MD5哈希值
        String concatedStr = concatParams(params);
        String plain = secretKey + concatedStr + secretKey;
        String encrypted = EncryptionUtils.md5Hex(plain);

        // 32位大写MD5值
        return encrypted.toUpperCase();
    }

    /**
     * 对params根据key来排序并且以key1=value1&key2=value2的形式拼接起来
     * @param params
     * @return
     */
    private static String concatParams(Map<String, String> params) {
        List<String> keys = new ArrayList<>(params.keySet());
        Collections.sort(keys);

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);

            sb.append(key).append(value);
        }

        return sb.toString();
    }

    /**
     * 除去数组中的空值和签名参数
     * @param sArray 签名参数组
     * @return 去掉空值与签名参数后的新签名参数组
     */
    private static Map<String, String> paraFilter(Map<String, String> sArray) {

        Map<String, String> result = new HashMap<>();

        if (sArray == null || sArray.size() <= 0) {
            return result;
        }

        for (String key : sArray.keySet()) {
            String value = sArray.get(key);
            if (value == null || value.equals("") || key.equalsIgnoreCase("sign")
                    || key.equalsIgnoreCase("sign_type")) {
                continue;
            }
            result.put(key, value);
        }

        return result;
    }

}

php请求示例

<?php
//引用config.php
include 'config.php';

$params = array(
  'appId' => $appId,
  'timestamp' => $timestamp,
  'channelId' => "209796"
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法

$json = '{
  "enabled": "Y",
  "goods": [
    {
      "goodName": "鲜花333",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/01-flower.png",
      "goodPrice": 0,
      "goodEnabled": "Y"
    },
    {
      "goodName": "咖啡",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/02-coffee.png",
      "goodPrice": 0.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "点赞",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/03-good.png",
      "goodPrice": 1.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "掌声",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/04-applaud.png",
      "goodPrice": 2.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "666",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/05-666.png",
      "goodPrice": 6.66,
      "goodEnabled": "Y"
    },
    {
      "goodName": "小星星",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/06-star.png",
      "goodPrice": 9.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "钻石",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/07-diamond.png",
      "goodPrice": 19.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "跑车",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/08-car.png",
      "goodPrice": 29.99,
      "goodEnabled": "Y"
    },
    {
      "goodName": "火箭233",
      "goodImg": "//livestatic.videocc.net/uploaded/images/webapp/channel/donate/09-rocket.png",
      "goodPrice": 66.66,
      "goodEnabled": "Y"
    }
  ]
}';

$params["sign"] = $sign;
$url="http://api.polyv.net/live/v3/channel/donate/update-good?".http_build_query($params);

function post($url, $post_data = '', $timeout = 5){
   $ch = curl_init();
   curl_setopt ($ch, CURLOPT_URL, $url);
   curl_setopt ($ch, CURLOPT_POST, 1);
   if($post_data != ''){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
   }

   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   curl_setopt($ch, CURLOPT_HEADER, false);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($post_data)));
   $file_contents = curl_exec($ch);
   curl_close($ch);
   return $file_contents;
}

echo post($url,$json);
?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

设置现金打赏

接口URL

http://api.polyv.net/live/v3/channel/donate/update-cash

接口说明

1、接口用于设置频道或者全局现金打赏(带上频道ID为设置频道现金打赏,不带频道ID默认为全局现金打赏设置)
2、通用参数通过普通url参数传递(channelId, timestamp, appId, sign),设置打赏参数的json通过请求体的方式传递
3、接口支持https

支持格式

JSON

请求方式

POST

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
appId string 从API设置中获取,在直播系统登记的appId
timestamp long 13位当前时间戳
sign string 签名值
channelId int 频道号,不传为全局设置
cashes double数组 请求体参数,现金打赏数额数组,数组的长度必须为6
cashMin double 请求体参数,现金打赏自定义最小金额
enabled string 请求体参数,现金打赏开关,不传默认开启,值为 Y/N , Y为开启

注:这里的channelId,appId,timestamp,sign必须通过url传参,json数据通过请求体传参,如:

http://api.polyv.net/live/v3/channel/donate/update-cash?channelId={{channelId}}&appId={{appId}}&timestamp={{timestamp}}&sign={{sign}}

请求体json拼接

{
   "cashes": [0.88,6.66,8.88,18.11,66.60,88.80],
   "cashMin": 0.02,
   "enabled": "Y"
}

响应成功JSON示例:

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": true
}

响应失败JSON示例:

#参数错误

{
    "code": 400,
    "status": "error",
    "message": "param validate error",
    "data": 400
}

#未输入appId

{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}

#appId不正确

{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}

#时间戳错误

{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}

#签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

#channelId非法错误

{
    "code": 403,
    "status": "error",
    "message": "illegal channel id: 10001",
    "data": ""
}

#json为空或者json解析错误

{
    "code": 400,
    "status": "error",
    "message": "param validate error",
    "data": ""
}

#json中的cashes和cashMin的数字类型校验错误

{
    "code": 400,
    "status": "error",
    "message": "number range error",
    "data": ""
}

字段说明

参数名 说明
code 状态码,成功为200,签名失败为403,参数错误为400,服务端错误为500
status 成功为success,错误时为error
message 成功为"",错误时为错误描述信息
data 成功时为true,错误时为""

java请求示例

import com.live.util.EncryptionUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by huangyufeng on 2017/7/27.
 */
public class Demo {

    private static RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(15000)
            .setConnectionRequestTimeout(15000).build();

    public static void main(String[] args) {

        String url = "http://api.live.polyv.net/v3/channel/donate/update-cash";
        int channelId = 209796;
        String appId = "xxxxxxx";
        String key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        Map<String, String> map = new HashMap<>();
        long timestamp = System.currentTimeMillis();
        map.put("appId", appId);
        map.put("timestamp", String.valueOf(timestamp));
        map.put("channelId", String.valueOf(channelId));

        String sign = getSign(map, key);
        map.put("sign", sign);
        String body = "{\"cashes\": [0.11,6.66,8.88,18.11,66.60,88.80],\"cashMin\": 0.02,\"enabled\": \"Y\"}";
        String content = sendHttpPost(url, map, body);
        System.out.println(content);

    }

    /**
     * 发送 post请求
     * @param httpUrl 地址
     * @param maps 参数
     */
    public static String sendHttpPost(String httpUrl, Map<String, String> maps, String body) {
        StringBuilder url = new StringBuilder();
        url.append(httpUrl).append("?");
        for (Map.Entry<String, String> map : maps.entrySet()) {
            url.append(map.getKey()).append("=").append(map.getValue()).append("&");
        }
        String urlStr = url.toString().substring(0, url.length() - 1);
        // 创建httpPost
        HttpPost httpPost = new HttpPost(urlStr);
        try {
            StringEntity entity = new StringEntity(body, Charset.forName("UTF-8"));
            httpPost.setEntity(entity);
        } catch (Exception e) {
            // ...
        }
        return sendHttpPost(httpPost);
    }

    /**
     * 发送Post请求
     * @param httpPost
     * @return
     */
    private static String sendHttpPost(HttpPost httpPost) {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        HttpEntity entity;
        String responseContent = null;
        try {
            // 创建默认的httpClient实例.
            httpClient = HttpClients.createDefault();
            httpPost.setConfig(requestConfig);
            // 执行请求
            response = httpClient.execute(httpPost);
            entity = response.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            // ...
        } finally {
            try {
                // 关闭连接,释放资源
                if (response != null) {
                    response.close();
                }
                if (null != httpPost) {
                    httpPost.releaseConnection();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                // ...
            }
        }
        return responseContent;
    }

    /**
     * 根据map里的参数构建加密串
     * @param map
     * @param secretKey
     * @return
     */
    protected static String getSign(Map<String, String> map, String secretKey) {
        Map<String, String> params = paraFilter(map);
        // 处理参数,计算MD5哈希值
        String concatedStr = concatParams(params);
        String plain = secretKey + concatedStr + secretKey;
        String encrypted = EncryptionUtils.md5Hex(plain);

        // 32位大写MD5值
        return encrypted.toUpperCase();
    }

    /**
     * 对params根据key来排序并且以key1=value1&key2=value2的形式拼接起来
     * @param params
     * @return
     */
    private static String concatParams(Map<String, String> params) {
        List<String> keys = new ArrayList<>(params.keySet());
        Collections.sort(keys);

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);

            sb.append(key).append(value);
        }

        return sb.toString();
    }

    /**
     * 除去数组中的空值和签名参数
     * @param sArray 签名参数组
     * @return 去掉空值与签名参数后的新签名参数组
     */
    private static Map<String, String> paraFilter(Map<String, String> sArray) {

        Map<String, String> result = new HashMap<>();

        if (sArray == null || sArray.size() <= 0) {
            return result;
        }

        for (String key : sArray.keySet()) {
            String value = sArray.get(key);
            if (value == null || value.equals("") || key.equalsIgnoreCase("sign")
                    || key.equalsIgnoreCase("sign_type")) {
                continue;
            }
            result.put(key, value);
        }

        return result;
    }

}

php请求示例

<?php
//引用config.php
include 'config.php';

$params = array(
  'appId' => $appId,
  'timestamp' => $timestamp,
  'channelId' => "209796"
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法

$json = '{
    "cashes": [0.88,6.66,8.88,18.11,66.60,88.80],
    "cashMin": 0.02,
    "enabled": "Y"
}';

$params["sign"] = $sign;
$url="http://api.polyv.net/live/v3/channel/donate/update-cash?".http_build_query($params);

function post($url, $post_data = '', $timeout = 5){
   $ch = curl_init();
   curl_setopt ($ch, CURLOPT_URL, $url);
   curl_setopt ($ch, CURLOPT_POST, 1);
   if($post_data != ''){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
   }

   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   curl_setopt($ch, CURLOPT_HEADER, false);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($post_data)));
   $file_contents = curl_exec($ch);
   curl_close($ch);
   return $file_contents;
}

echo post($url,$json);
?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...