今日水印相机api技术文档
联系方式:17360234063(手机,微信)
工作时间:工作日 10:00~20:00
1 简介
1.1 什么是今日水印相机api
开放平台支持今日水印相机用户自有系统接入,照片资源与水印信息等数据可同步至自有系统,获得对数据的二次开发的能力,从而满足各类定制化需求。
1.2 今日水印相机api能做什么
初步开放以下功能,更多功能正在逐步开发中。 - 获取照片数据 - 获取水印数据 - 团队组织架构
1.3 今日水印相机api的安全保障说明
开放平台 api 数据传输全程加密(密钥按月更新,可以支持更高安全标准的密钥动态下发),用户通过开放平台 api 传输的数据全程不存储、不落库,保证用户数据隐私和安全,系统全流程符合国家三级等保标准,系统无被入侵风险,数据无泄漏风险。
2. 接入流程图
目前支持两种接入方式:主动拉取数据,webhook推送数据
2.1 主动拉取数据

2.2 webhook推送数据
通过提供webhook的domain,与开放平台建立绑定关系。一旦有新数据更新时,会自动将增量数据推送至自建系统。

3. 开放平台加签流程
对接沟通后,我们会给提供跟团队绑定的唯一key和secret。
3.1 加签流程
以v2/department/sublist接口为例:
- 接口请求参数为:
{
"departmentID": 1
}
- 将该请求参数序列化并进行一次签名,目前仅支持HmacSha256算法,签名函数如下:
// data是加密的内容
func sign(data string, groupSecret string) (ret string) {
hmacObj := hmac.New(sha256.New, []byte(groupSecret))
hmacObj.Write([]byte(data))
ret = base64.StdEncoding.EncodeToString(hmacObj.Sum(nil))
return ret
}
- 把groupKey、参数签名(第二步的结果)、timestamp拼接为一个字符串
timestamp := time.Now().Unix()
groupKey := "groupKey"
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
sign,
strconv.FormatInt(timestamp, 10),
)
- 把第三步拼接后的字符串再进行一次签名,并得到最终签名。
signature := sign(str, "groupSecret")
- 把对应的信息设置至header头中。
req, _ := http.NewRequest(http.MethodGet, "url", nil)
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", strconv.FormatInt(timestamp, 10))
req.Header.Set("Signature", signature)
完整Http客户端代码如下:
func main() {
data := map[string]interface{}{
"departmentID": 1,
}
buf, _ := json.Marshal(data)
groupKey := "groupKey" // 需申请
groupSecret := "groupSecret" // 需申请
dataSign := sign(string(buf), groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
// sign为加签流程中定义的函数
signature := sign(str, groupSecret)
url := "https://openapi.xhey.top/v2/department/sublist"
client := &http.Client{}
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(buf))
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
_, _ = client.Do(req)
}
func sign(source string, groupSecret string) string {
hmacObj := hmac.New(sha256.New, []byte(groupSecret))
hmacObj.Write([]byte(source))
return base64.StdEncoding.EncodeToString(hmacObj.Sum(nil))
}
Python版本
# -*- coding: utf-8 -*-
import json
import requests
import hashlib
import time
import base64
import hmac
# 计算签名
def generate_signature(data, secret_key):
hmac_obj = hmac.new(secret_key.encode('utf-8'), data.encode('utf-8'), hashlib.sha256)
return base64.b64encode(hmac_obj.digest()).decode('utf-8')
# 请求数据
data = {
"departmentID": 1,
}
json_data = json.dumps(data)
group_secret = "groupSecret"
group_key, timestamp = "groupKey", str(int(time.time()))
data_sign = generate_signature(json_data, group_secret)
str_to_sign = "groupKey={0}&sign={1}×tamp={2}".format(group_key, data_sign, timestamp)
signature = generate_signature(str_to_sign, group_secret)
url = "https://openapi.xhey.top/v2/department/sublist"
# 构建请求头
headers = {
"GroupKey": group_key,
"Timestamp": timestamp,
"Signature": signature
}
# 发送HTTP POST请求
response = requests.post(url, data=json_data, headers=headers)
3.2 Webhook推送
前提:配置了webhook地址的团队也必须申请groupKey以及groupSecret,否则无法进行签名验证。
- 获取header头中的Timestamp、GroupKey、Signature。
- 校验Timestamp、GroupKey是否合法。(Timestamp校验规则由接入方自行定义)
- 获取当前请求参数,并通过GroupKey对应的GroupSecret生成DataSign。
- GroupKey、DataSign、Timestamp拼接成一个字符串并通过GroupSecret生成最终的Signature
- 校验第四步生成的Signature是否与header中的Signature一致
参考代码:
body, _ := ioutil.ReadAll(c.Request.Body)
timestamp := c.GetHeader("Timestamp")
// 校验时间戳
groupKey := c.GetHeader("GroupKey")
// 通过groupKey获取groupSecret
dataSign := sign(string(body), "groupSecret")
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, "groupSecret")
return signature == c.GetHeader("Signature")
4. API总览
- 获取团队成员id列表
- 获取团队下一级部门列表
- 获取子部门列表
- 查询部门信息
- 获取部门成员列表
- 用户信息查询
- 批量查询用户信息
- 获取团队照片
- 多维度查询团队照片
- 根据照片id获取团队照片水印数据
- 根据时间获取团队照片水印数据
- 创建商品识别任务
- 获取商品识别结果
5. API列表
5.1 获取团队成员id列表
获取团队成员id列表
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/group/user/idList
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | Integer | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | []String | ["open_6e13763f_68d4_49d1_9178_06998191a5c8"] | 返回数据 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/group/user/idList
请求示例(Golang API)
url := "https://openapi.xhey.top/v2/group/user/idList"
groupSecret := "groupSecret"// 需申请
groupKey := "groupKey"// 需申请
dataSign := sign("", groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": ["open-06ns8591-02pr-941q-n81r-snn8340598r5","open-3q3p3182-p7s6-90nr-4044-s5nq3ro9n6n5"],
"timestamp": 1629099324
}
5.2 获取团队下一级部门列表
调用本接口获取团队下的所有直属子部门列表。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/group/sublist
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | []Object | 返回内容 | |
| |—id | Integer | 17 | 部门id |
| |—groupID | Integer | 42180013 | 团队id |
| |—name | String | 后勤处 | 部门名称 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/group/sublist
请求示例(Golang API)
url := "https://openapi.xhey.top/v2/group/sublist"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign("", groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": [{
"id": 1,
"groupID": 42180013,
"name": "后勤处"
}, {
"id": 4,
"groupID": 42180013,
"name": "测试部门"
}],
"timestamp": 1629101164
}
5.3 获取某部门的子部门列表
通过部门id调用本接口,获取该部门下的所有直属子部门列表。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/department/sublist
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| departmentID | Integer | 是 | 241 | 父部门id |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | []Object | 返回内容 | |
| |—id | Integer | 981090726 | 部门id |
| |—parentID | Integer | 241 | 父部门id |
| |—name | String | 后勤处 | 部门名称 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/department/sublist
请求示例(Golang API)
reqStr := `{
"departmentID": 46
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/department/sublist"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": [{
"id": 18,
"parentID": 17,
"name": "保安部门"
},{
"id": 73,
"parentID": 17,
"name": "测试部门2"
}],
"timestamp": 1629101550
}
5.4 查询部门信息
通过部门id调用本接口,获取该部门的详情信息。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/department/info
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| departmentID | Integer | 是 | 241 | 父部门id |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—id | Integer | 981090726 | 部门id |
| |—parentID | Integer | 241 | 父部门id |
| |—avatar | String | https://net-cloud.xhey.top/group/photo/a3bc63de58978dcb328ed84115d122c9.jpg | 部门头像 |
| |—name | String | 后勤处 | 部门名称 |
| |—containSubDept | Boolean | false | 是否包含下级部门 |
| |—memberNum | Integer | 166 | 部门成员数 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/department/info
请求示例(Golang API)
reqStr := `{
"departmentID": 46
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/department/info"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"id": 17,
"parentID": 3,
"avatar": "https://net-cloud.oss-cn-beijing.aliyuncs.com/icon/department-av.jpg",
"name": "后勤处",
"containSubDept": false,
"memberNum": 166
},
"timestamp": 1629101848
}
5.5 获取部门成员列表
通过部门id调用本接口,获取该部门的详情信息。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/department/userList
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| departmentID | Integer | 是 | 17 | 部门id |
| pageSize | Integer | 否 | 100 | 支持分页查询,每页条目数,如果不传,默认值为1000 |
| pageNo | Integer | 否 | 1 | 支持分页查询,分页页码,如果不传,默认值为1 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | []Object | 返回内容 | |
| |—hasMore | Boolean | true | 是否还有下一页数据 |
| |—nextPageNo | Integer | 2 | 下一页的页码 |
| |—users | []Object | 成员信息列表 | |
| |——userID | Integer | open_6e13763f_68d4_49d1_9178_06998191a5c8 | 用户id |
| |——nickname | String | zackhuang | 昵称 |
| |——headImgUrl | String | https://net-cloud.xhey.top/group/headimg/avatar_default_1_d0b9ef45-a1de-42f8-82f6-8f4d674a8b07.jpeg | 头像地址 |
| |——mobile | String | 18604xxxxxx | 手机号码 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/department/userList
请求示例(Golang API)
reqStr := `{
"departmentID": 46,
"pageSize": 100,
"pageNo": 1
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/department/userList"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"hasMore": false,
"nextPageNo": 0,
"users": [{
"userID": "open-81415183-2024-961s-n43s-4s98o566pr34",
"nickname": "zackhuang",
"headImgUrl": "https://net-cloud.xhey.top/group/headimg/avatar_default_1_44c84097-f99c-4603-aaf5-49ff10b1b8a0.jpeg",
"mobile": "18801611111"
}]
},
"timestamp": 1629102955
}
5.6 团队成员信息查询
通过用户id调用本接口,获取用户的详情信息。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/user/info
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| userID | String | 是 | open_6e13763f_68d4_49d1_9178_06998191a5c8 | 用户id |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—userID | String | open_6e13763f_68d4_49d1_9178_06998191a5c8 | 用户id |
| |—nickname | String | zackhuang | 昵称 |
| |—headImgUrl | String | https://net-cloud.xhey.top/group/headimg/avatar_default_1_d0b9ef45-a1de-42f8-82f6-8f4d674a8b07.jpeg | 头像地址 |
| |——mobile | String | 18604xxxxxx | 手机号码 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/user/info
请求示例(Golang API)
reqStr := `{
"userID": "open-991733sq-3pqr-988q-o816-5n98r988sqrn"
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/user/info"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"userID": "open-991733sq-3pqr-988q-o816-5n98r988sqrn",
"nickname": "zackhuang",
"headImgUrl": "https://net-cloud.xhey.top/group/headimg/avatar_default_1.jpeg",
"mobile": "18602222221"
},
"timestamp": 1629102431
}
5.7 批量查询团队成员信息
批量传入用户id,获取用户详细信息 最大支持一次查询1000条员工信息
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/user/infos
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| userIDs | []String | 是 | ["open_6e13763f_68d4_49d1_9178_06998191a5c8","open_6e13763f_68d4_49d1_9178_06998191a5c8"] | 用户id |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—userInfos | []Object | 成员信息集合 | |
| |———userID | String | open_6e13763f_68d4_49d1_9178_06998191a5c8 | 用户id |
| |———nickname | String | zackhuang | 昵称 |
| |———headImgUrl | String | https://net-cloud.xhey.top/group/headimg/avatar_default_1_d0b9ef45-a1de-42f8-82f6-8f4d674a8b07.jpeg | 头像地址 |
| |————mobile | String | 18604xxxxxx | 手机号码 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/user/infos
请求示例(Golang API)
reqStr := `{
"userIDs": ["open-991733sq-3pqr-988q-o816-5n98r988sqrn"]
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/user/infos"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"userInfos":[{
"userID": "open-991733sq-3pqr-988q-o816-5n98r988sqrn",
"nickname": "zackhuang",
"headImgUrl": "https://net-cloud.xhey.top/group/headimg/avatar_default_1.jpeg",
"mobile": "18602222221"
}]
},
"timestamp": 1629102431
}
5.8 获取团队照片
通过筛选条件获取团队下的照片。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/group/photo
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| startTime | Integer | 否 | 1623826153 | Unix时间戳,筛选条件的开始时间点 |
| endTime | Integer | 否 | 1629096554 | Unix时间戳,筛选条件的结束时间点 |
| userID | []String | 否 | ["open-06ns8591-02pr-941q-n81r-snn8340598r5","open-3q3p3182-p7s6-90nr-4044-s5nq3ro9n6n5"] | 用户id列表 |
| mediaType | Integer | 否 | 0 | 资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源 |
| pageSize | Integer | 否 | 100 | 支持分页查询,每页条目数,如果不传,默认值为1000 |
| pageNo | Integer | 否 | 1 | 支持分页查询,分页页码,如果不传,默认值为1 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—hasMore | Boolean | true | 是否还有下一页数据 |
| |—nextPageNo | Integer | 2 | 下一页的页码 |
| |—photos | []Object | 水印数据数组 | |
| |——id | Integer | 981090726 | 照片id |
| |——mediaUrl | String | https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg | 资源地址(用户上传的原图) |
| |——mediaSimpleUrl | String | https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto,w_300 | 简版资源地址 照片类型时为缩略图,视频类型时为首祯图片 |
| |——mediaType | Integer | 0 | 资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源 |
| |——time | Integer | 1627612 | 拍照时间,Unix时间戳 |
| |——userID | String | open-0q325626-s606-93qr-33q9-n535snnoqn77 | 拍照人id |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/group/photo
请求正文
{
"startTime": 1625483483,
"endTime": 1628161884,
"userID": ["open_6e13763f_68d4_49d1_9178_06998191a5c8","open_6e13763f_68d4_49d1_9178_06998191a5c8"],
"mediaType": 0,
"pageSize":100,
"pageNo":1
}
请求示例(Golang API)
reqStr := `{
"startTime": 1625483483,
"endTime": 1628161884,
"userID": ["open_6e13763f_68d4_49d1_9178_06998191a5c8","open_6e13763f_68d4_49d1_9178_06998191a5c8"],
"mediaType": 0,
"pageSize":10,
"pageNo":1
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/group/photo"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"hasMore": true,
"nextPageNo": 2,
"photos": [{
"id": 981090726,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto",
"mediaType": 0,
"time": 1627612397,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77"
}, {
"id": 981090725,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/7b4b1def-da53-470e-baec-7b5ed4945aed.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto",
"mediaType": 0,
"time": 1626056664,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77"
}, {
"id": 981090724,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/d08a25b5-576c-49eb-8e6d-d34e3b537068.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto",
"mediaType": 0,
"time": 1626056654,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77"
}]
},
"timestamp": 1629100265
}
5.9 多维度查询团队照片
通过筛选条件获取团队下的照片。 目前最大支持查询1000条数据,超出时只显示1000条
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/group/photo/search
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| startTime | Integer | 否 | 1623826153 | Unix时间戳,筛选条件的开始时间点 开始时间与结束时间最长支持180天,不传值的情况下默认为当前时间的180天之前 |
| endTime | Integer | 否 | 1629096554 | Unix时间戳,筛选条件的结束时间点 开始时间与结束时间最长支持180天,不传值的情况下默认为当前时间 |
| userIds | []String | 否 | ["open-06ns8591-02pr-941q-n81r-snn8340598r5","open-3q3p3182-p7s6-90nr-4044-s5nq3ro9n6n5"] | 用户id列表 |
| mediaType | Integer | 否 | 0 | 资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源 |
| watermarkContent | []string | 否 | ["水印内容"]|水印中携带的关键词信息,最多支持三个关键词,每个关键词最长支持15个字符 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—photos | []Object | 水印数据数组 | |
| |——id | Integer | 981090726 | 照片id |
| |——mediaUrl | String | https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg | 资源地址 |
| |——mediaSimpleUrl | String | https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto,w_300 | 简版资源地址 照片类型时为缩略图,视频类型时为首祯图片 |
| |——mediaType | Integer | 0 | 资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源 |
| |——time | Integer | 1627612 | 拍照时间,Unix时间戳 |
| |——userID | String | open-0q325626-s606-93qr-33q9-n535snnoqn77 | 拍照人id |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/group/photo/search
请求正文
{
"startTime": 1625483483,
"endTime": 1628161884,
"UserIds":["open_6e13763f_68d4_49d1_9178_06998191a5c8","open_6e13763f_68d4_49d1_9178_06998191a5c8"],
"mediaType": 0,
"watermarkContent":["水印关键词"]
}
请求示例(Golang API)
reqStr := `{
"startTime": 1625483483,
"endTime": 1628161884,
"userIds":["open_6e13763f_68d4_49d1_9178_06998191a5c8","open_6e13763f_68d4_49d1_9178_06998191a5c8"],
"mediaType": 0,
"watermarkContent":["水印关键词"]
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/group/photo/search"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"photos": [{
"id": 981090726,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto",
"mediaType": 0,
"time": 1627612397,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77"
}, {
"id": 981090725,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/7b4b1def-da53-470e-baec-7b5ed4945aed.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto",
"mediaType": 0,
"time": 1626056664,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77"
}, {
"id": 981090724,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/d08a25b5-576c-49eb-8e6d-d34e3b537068.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto",
"mediaType": 0,
"time": 1626056654,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77"
}]
},
"timestamp": 1629100265
}
5.10 根据照片id获取团队照片水印数据
通过照片ID列表,获取对应的水印数据。经纬度坐标系为gcj02。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/group/watermark/byPhotoId
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| photoID | []Integer | 是 | [981090726,981090735,981090728] | 照片id列表 |
| pageSize | Integer | 否 | 100 | 支持分页查询,每页条目数,如果不传,默认值为1000 |
| pageNo | Integer | 否 | 1 | 支持分页查询,分页页码,如果不传,默认值为1 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—hasMore | Boolean | true | 是否还有下一页数据 |
| |—nextPageNo | Integer | 2 | 下一页的页码 |
| |—watermarks | []Object | 水印数据数组 | |
| |——watermarkID | Integer | 1444928478914561 | 水印id,用于多维度查询照片数据 |
| |——photoID | Integer | 981090726 | 照片id |
| |——userID | String | open-0q325626-s606-93qr-33q9-n535snnoqn77 | 拍照人id |
| |——watermarkName | String | 时间地点天气 | 水印名称 |
| |——time | Integer | 1627612 | 拍照时间,Unix时间戳 |
| |——addr | String | 成都市·天荟 | 拍照地点 |
| |——weather | String | 晴 11° 北风≤3级 | 天气 |
| |——lng | String | 104.065727 | 经度 |
| |——lat | String | 30.554810 | 纬度 |
| |——altitude | String | 50.7 | 海拔高度,单位 ‘米’ |
| |——extends | []Object | 981090726 | 照片id |
| |———title | String | 工程名称 | 水印中的自定义条目标题 |
| |———content | String | 工程记录 | 水印中的自定义条目内容 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/group/watermark/byPhotoId
请求正文
{
"photoID": [981090726,981090735,981090728,981090718,981090716],
"pageSize": 100,
"pageNo": 1
}
请求示例(Golang API)
reqStr := `{
"photoID": [981090726,981090735,981090728,981090718,981090716],
"pageSize": 100,
"pageNo": 1
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/group/watermark/byPhotoId"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"hasMore": false,
"nextPageNo": 0,
"watermarks": [{
"watermarkID": 1444928478913901,
"photoID": 981090716,
"userID": "open-6oq698q3-04ps-99s8-o21o-43058r291507",
"watermarkName": "时间地点天气",
"time": 1625732,
"addr": "成都市·天荟",
"weather": "晴 17° 西南风≤3级",
"lng": "104.065598",
"lat": "30.554556",
"altitude": "51.0",
"extends": []
}, {
"watermarkID": 1444928478914289,
"photoID": 981090718,
"userID": "open-06ns8591-02pr-941q-n81r-snn8340598r5",
"watermarkName": "时间地点天气",
"time": 1625732,
"addr": "成都市·天荟",
"weather": "晴 17° 西南风≤3级",
"lng": "104.065552",
"lat": "30.554632",
"altitude": "50.5",
"extends": [{
"title": "工程名称",
"content": "工程记录"
}]
}, {
"watermarkID": 1444928478914561,
"photoID": 981090726,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77",
"watermarkName": "时间地点天气",
"time": 1627612,
"addr": "成都市·天荟",
"weather": "晴 11° 北风≤3级",
"lng": "104.065727",
"lat": "30.554810",
"altitude": "50.7",
"extends": []
}]
},
"timestamp": 1629093972
}
5.11 根据时间范围获取团队照片水印数据
通过开始和结束时间的范围,获取对应的水印数据。经纬度坐标系为gcj02。
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/group/watermark/byTime
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| startTime | Integer | 是 | 1623826153 | Unix时间戳,筛选条件的开始时间点 |
| endTime | Integer | 是 | 1629096554 | Unix时间戳,筛选条件的结束时间点 |
| pageSize | Integer | 否 | 100 | 支持分页查询,每页条目数,如果不传,默认值为1000 |
| pageNo | Integer | 否 | 1 | 支持分页查询,分页页码,如果不传,默认值为1 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—hasMore | Boolean | true | 是否还有下一页数据 |
| |—nextPageNo | Integer | 2 | 下一页的页码 |
| |—watermarks | []Object | 水印数据数组 | |
| |——watermarkID | Integer | 1444928478914561 | 水印id,用于多维度查询照片数据 |
| |——photoID | Integer | 981090726 | 照片id |
| |——userID | String | open-0q325626-s606-93qr-33q9-n535snnoqn77 | 拍照人id |
| |——watermarkName | String | 时间地点天气 | 水印名称 |
| |——time | Integer | 1627612 | 拍照时间,Unix时间戳 |
| |——addr | String | 成都市·天荟 | 拍照地点 |
| |——weather | String | 晴 11° 北风≤3级 | 天气 |
| |——lng | String | 104.065727 | 经度 |
| |——lat | String | 30.554810 | 纬度 |
| |——altitude | String | 50.7 | 海拔高度,单位 ‘米’ |
| |——extends | []Object | 981090726 | 照片id |
| |———title | String | 工程名称 | 水印中的自定义条目标题 |
| |———content | String | 工程记录 | 水印中的自定义条目内容 |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/group/watermark/byTime
请求正文
{
"startTime": 1623826153,
"endTime": 1629096554,
"pageSize": 100,
"pageNo": 1
}
请求示例(Golang API)
reqStr := `{
"startTime": 1623826153,
"endTime": 1629096554,
"pageSize": 100,
"pageNo": 1
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/group/watermark/byTime"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200,
"msg": "success",
"data": {
"hasMore": false,
"nextPageNo": 0,
"watermarks": [{
"watermarkID": 1444928478914521,
"photoID": 981090716,
"userID": "open-6oq698q3-04ps-99s8-o21o-43058r291507",
"watermarkName": "时间地点天气",
"time": 1625732,
"addr": "成都市·天荟",
"weather": "晴 17° 西南风≤3级",
"lng": "104.065598",
"lat": "30.554556",
"altitude": "51.0",
"extends": []
}, {
"watermarkID": 1444928478915527,
"photoID": 981090718,
"userID": "open-06ns8591-02pr-941q-n81r-snn8340598r5",
"watermarkName": "时间地点天气",
"time": 1625732,
"addr": "成都市·天荟",
"weather": "晴 17° 西南风≤3级",
"lng": "104.065552",
"lat": "30.554632",
"altitude": "50.5",
"extends": [{
"title": "工程名称",
"content": "工程记录"
}]
}, {
"watermarkID": 1444928478915527,
"photoID": 981090726,
"userID": "open-0q325626-s606-93qr-33q9-n535snnoqn77",
"watermarkName": "时间地点天气",
"time": 1627612,
"addr": "成都市·天荟",
"weather": "晴 11° 北风≤3级",
"lng": "104.065727",
"lat": "30.554810",
"altitude": "50.7",
"extends": []
}]
},
"timestamp": 1629093972
}
5.12 创建商品识别任务
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/sku/check/task/create
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| imageUrl | String | 是 | https://net-cloud.xhey.top/SKU/71c506de1f1541f2aa0dcf60af07778f.jpg | 待识别图片地址 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—taskID | String | 4e9da3a6-7724-11ee-a826-0000028ce680 | 识别任务ID |
| timestamp | Integer | 1629092630 | 请求时间,Unix时间戳 |
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/sku/check/task/create
请求正文
{
"imageUrl": "https://net-cloud.xhey.top/SKU/71c506de1f1541f2aa0dcf60af07778f.jpg"
}
请求示例(Golang API)
reqStr := `{
"imageUrl": "https://net-cloud.xhey.top/SKU/71c506de1f1541f2aa0dcf60af07778f.jpg"
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/sku/check/task/create"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200, // -10004团队商品为空
"msg": "success",
"data": {
"taskID": "03c01878-7794-11ee-be54-000000007530"
},
"timestamp": 1698718809
}
5.13 获取识别结果
基本信息
请求方式:POST
请求地址:https://openapi.xhey.top/v2/sku/check/task/get
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| taskID | String | 是 | 03c01878-7794-11ee-be54-000000007530 | 识别任务ID |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | String | 200 | 状态码 |
| msg | String | success | 状态码对应的提示内容 |
| data | Object | 返回内容 | |
| |—status | Integer | 1 | 识别状态 0识别中 1识别完成 2识别失败 |
| |—display | []Object | 识别结果 | |
| |—-skuCode | String | 40 | sku编号 |
| |—-skuNum | Integer | 2 | sku个数 |
| |—-skuName | String | 无糖可乐500ml | sku详细名称 |
| |—-instances | []Object | sku在图片中的详细信息 | |
| |—--bbox | []Integer | [368,1006,431,1131] | sku的图像位置 |
| |—--tag | []string | ["front"] | sku的标签 |
timestamp | Integer | 1629092630 | 请求时间,Unix时间戳
示例
请求示例(HTTP)
POST https://openapi.xhey.top/v2/sku/check/task/get
请求正文
{
"taskID": "6353e466-7706-11ee-943d-000000007530"
}
请求示例(Golang API)
reqStr := `{
"taskID": "6353e466-7706-11ee-943d-000000007530"
}`
reader := bytes.NewReader(([]byte)(reqStr))
url := "https://openapi.xhey.top/v2/sku/check/task/get"
groupSecret := "groupSecret" // 需申请
groupKey := "groupKey" // 需申请
dataSign := sign(reqStr, groupSecret)
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
str := fmt.Sprintf("groupKey=%s&sign=%s×tamp=%s",
groupKey,
dataSign,
timestamp,
)
signature := sign(str, groupSecret)
req, _ := http.NewRequest("POST", url, reader)
req.Header.Add("Content-Type", "application/json")
req.Header.Set("GroupKey", groupKey)
req.Header.Set("Timestamp", timestamp)
req.Header.Set("Signature", signature)
client := &http.Client{}
defer client.CloseIdleConnections()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
var buf bytes.Buffer
_, err = buf.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
返回示例
{
"code": 200, // -10003识别任务ID不存在
"msg": "success",
"data": {
"status": 1,
"display": [
{
"skuCode": "41",
"instances": [
{
"bbox": [
368,
1006,
431,
1131
],
"tag": [
"front"
]
},
{
"bbox": [
496,
997,
562,
1128
],
"tag": [
"front"
]
}
],
"skuNum": 2,
"skuName": "茶憨憨冰凤梨茶"
}
]
},
"timestamp": 1698670838
}
6.webhook 定义
webhook 请求 header 携带鉴权信息
接收参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| groupID | String | 11971798 | 团队号 |
| photo | Object | 资源信息 | |
| |—id | Integer | 981090726 | 资源id |
| |—mediaUrl | String | https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg | 资源地址 |
| |—mediaSimpleUrl | String | https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto,w_300 | 简版资源地址 照片类型时为缩略图,视频类型时为首祯图片 |
| |—mediaType | Integer | 0 | 资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源 |
| |—time | Integer | 1627612 | 拍照时间,Unix时间戳 |
| |—userID | String | open-0q325626-s606-93qr-33q9-n535snnoqn77 | 拍照人id |
| |—userName | String | 拍摄人 | 拍照人昵称 |
| watermark | Object | 水印信息 | |
| |—watermarkID | Integer | 1444928478914561 | 水印id,用于多维度查询照片数据 |
| |-watermarkIdentification | String | 182ba62d-257e-11ec-5660-3f95007345e9 | 水印标识 |
| |—photoID | Integer | 981090726 | 照片id |
| |—userID | String | open-0q325626-s606-93qr-33q9-n535snnoqn77 | 拍照人id |
| |—watermarkName | String | 时间地点天气 | 水印名称 |
| |—time | Integer | 拍摄时间,Unix时间戳 | |
| |—addr | String | 成都市·天荟 | 拍摄地址 |
| |—weather | String | 晴 11° 北风≤3级 | 天气 |
| |—lng | String | 104.065727 | 经度 |
| |—lat | String | 30.554810 | 纬度 |
| |—altitude | String | 50.7 | 海拔高度,单位 ‘米’ |
| |—extends | []Object | 水印自定义内容 | |
| |———title | String | 工程名称 | 水印中的自定义条目标题 |
| |———content | String | 工程记录 | 水印中的自定义条目内容 |
返回参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| status | Integer | 200 | 接收到消息返回200认为发送成功,否则会一直重试 |
| message | String | 失败时返回的特殊消息 |
请求正文
{
"groupID":11971798,
"photo": {
"id": 29043766,
"mediaUrl": "https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg",
"mediaSimpleUrl":"https://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg?x-oss-process=video/snapshot,t_0,m_fast,ar_auto,w_300",
"mediaType": 0,
"time": 1631761794,
"userID": "open-4814n211-8789-95p3-o84o-972159218n8s",
"userName":"拍摄人"
},
"watermark": {
"watermarkID":1444928478914561,
"watermarkIdentification":"182ba62d-257e-11ec-5660-3f95007345e9",
"photoID": 29043766,
"userID": "open-4814n211-8789-95p3-o84o-972159218n8s",
"watermarkName": "工程记录",
"time": 1631761794,
"addr": "北京市·上地佳园",
"weather": "晴 28° 西北风2级",
"lng": "113.133652",
"lat": "29.376331",
"altitude": "46.8",
"extends": []
}
}
返回示例
{
"code": 200,
"msg": ""
}
7. 状态码列表
当code值不等于200时,返回数据的data为null
| code值 | 类型 | 错误内容 |
|---|---|---|
| 200 | Integer | success |
| 2001 | Integer | you can query a maximum of 1000 records, please be precise with your query conditions |
| 400 | Integer | param error |
| 401 | Integer | verify error |
| 403 | Integer | forbidden |
| 404 | Integer | not found |
| 500 | Integer | service error |
| 4007 | Integer | group key or secret not right |
| 4008 | Integer | you can query a maximum of 1000 personnel information at a time |
| 4009 | Integer | time param error |
| 4010 | Integer | you can query longest of 180 days data |
| 4011 | Integer | you can use a maximum of three keywords to search |
| 4012 | Integer | one keyword contain a maximum of 15 characters |
| 4013 | Integer | not support watermark ids query |