跳到主要内容

今日水印相机api技术文档

联系方式:17360234063(手机,微信)

工作时间:工作日 10:00~20:00

png2

1 简介

1.1 什么是今日水印相机api

开放平台支持今日水印相机用户自有系统接入,照片资源与水印信息等数据可同步至自有系统,获得对数据的二次开发的能力,从而满足各类定制化需求。

1.2 今日水印相机api能做什么

初步开放以下功能,更多功能正在逐步开发中。 - 获取照片数据 - 获取水印数据 - 团队组织架构

1.3 今日水印相机api的安全保障说明

开放平台 api 数据传输全程加密(密钥按月更新,可以支持更高安全标准的密钥动态下发),用户通过开放平台 api 传输的数据全程不存储、不落库,保证用户数据隐私和安全,系统全流程符合国家三级等保标准,系统无被入侵风险,数据无泄漏风险。

2. 接入流程图

目前支持两种接入方式:主动拉取数据,webhook推送数据

2.1 主动拉取数据

png2

2.2 webhook推送数据

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

3. 开放平台加签流程

对接沟通后,我们会给提供跟团队绑定的唯一key和secret。

3.1 加签流程

以v2/department/sublist接口为例:

  1. 接口请求参数为:
{
"departmentID": 1
}
  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
}
  1. 把groupKey、参数签名(第二步的结果)、timestamp拼接为一个字符串
timestamp := time.Now().Unix()
groupKey := "groupKey"
str := fmt.Sprintf("groupKey=%s&sign=%s&timestamp=%s",
groupKey,
sign,
strconv.FormatInt(timestamp, 10),
)
  1. 把第三步拼接后的字符串再进行一次签名,并得到最终签名。
signature := sign(str, "groupSecret")
  1. 把对应的信息设置至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&timestamp=%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}&timestamp={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,否则无法进行签名验证。

  1. 获取header头中的Timestamp、GroupKey、Signature。
  2. 校验Timestamp、GroupKey是否合法。(Timestamp校验规则由接入方自行定义)
  3. 获取当前请求参数,并通过GroupKey对应的GroupSecret生成DataSign。
  4. GroupKey、DataSign、Timestamp拼接成一个字符串并通过GroupSecret生成最终的Signature
  5. 校验第四步生成的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&timestamp=%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

返回参数

名称类型示例值描述
codeInteger200状态码
msgStringsuccess状态码对应的提示内容
data[]String["open_6e13763f_68d4_49d1_9178_06998191a5c8"]返回数据
timestampInteger1629092630请求时间,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&timestamp=%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

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
data[]Object返回内容
|—idInteger17部门id
|—groupIDInteger42180013团队id
|—nameString后勤处部门名称
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
departmentIDInteger241父部门id

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
data[]Object返回内容
|—idInteger981090726部门id
|—parentIDInteger241父部门id
|—nameString后勤处部门名称
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
departmentIDInteger241父部门id

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—idInteger981090726部门id
|—parentIDInteger241父部门id
|—avatarStringhttps://net-cloud.xhey.top/group/photo/a3bc63de58978dcb328ed84115d122c9.jpg部门头像
|—nameString后勤处部门名称
|—containSubDeptBooleanfalse是否包含下级部门
|—memberNumInteger166部门成员数
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
departmentIDInteger17部门id
pageSizeInteger100支持分页查询,每页条目数,如果不传,默认值为1000
pageNoInteger1支持分页查询,分页页码,如果不传,默认值为1

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
data[]Object返回内容
|—hasMoreBooleantrue是否还有下一页数据
|—nextPageNoInteger2下一页的页码
|—users[]Object成员信息列表
|——userIDIntegeropen_6e13763f_68d4_49d1_9178_06998191a5c8用户id
|——nicknameStringzackhuang昵称
|——headImgUrlStringhttps://net-cloud.xhey.top/group/headimg/avatar_default_1_d0b9ef45-a1de-42f8-82f6-8f4d674a8b07.jpeg头像地址
|——mobileString18604xxxxxx手机号码
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
userIDStringopen_6e13763f_68d4_49d1_9178_06998191a5c8用户id

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—userIDStringopen_6e13763f_68d4_49d1_9178_06998191a5c8用户id
|—nicknameStringzackhuang昵称
|—headImgUrlStringhttps://net-cloud.xhey.top/group/headimg/avatar_default_1_d0b9ef45-a1de-42f8-82f6-8f4d674a8b07.jpeg头像地址
|——mobileString18604xxxxxx手机号码
timestampInteger1629092630请求时间,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&timestamp=%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

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—userInfos[]Object成员信息集合
|———userIDStringopen_6e13763f_68d4_49d1_9178_06998191a5c8用户id
|———nicknameStringzackhuang昵称
|———headImgUrlStringhttps://net-cloud.xhey.top/group/headimg/avatar_default_1_d0b9ef45-a1de-42f8-82f6-8f4d674a8b07.jpeg头像地址
|————mobileString18604xxxxxx手机号码
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
startTimeInteger1623826153Unix时间戳,筛选条件的开始时间点
endTimeInteger1629096554Unix时间戳,筛选条件的结束时间点
userID[]String["open-06ns8591-02pr-941q-n81r-snn8340598r5","open-3q3p3182-p7s6-90nr-4044-s5nq3ro9n6n5"]用户id列表
mediaTypeInteger0资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源
pageSizeInteger100支持分页查询,每页条目数,如果不传,默认值为1000
pageNoInteger1支持分页查询,分页页码,如果不传,默认值为1

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—hasMoreBooleantrue是否还有下一页数据
|—nextPageNoInteger2下一页的页码
|—photos[]Object水印数据数组
|——idInteger981090726照片id
|——mediaUrlStringhttps://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg资源地址(用户上传的原图)
|——mediaSimpleUrlStringhttps://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简版资源地址 照片类型时为缩略图,视频类型时为首祯图片
|——mediaTypeInteger0资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源
|——timeInteger1627612拍照时间,Unix时间戳
|——userIDStringopen-0q325626-s606-93qr-33q9-n535snnoqn77拍照人id
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
startTimeInteger1623826153Unix时间戳,筛选条件的开始时间点 开始时间与结束时间最长支持180天,不传值的情况下默认为当前时间的180天之前
endTimeInteger1629096554Unix时间戳,筛选条件的结束时间点 开始时间与结束时间最长支持180天,不传值的情况下默认为当前时间
userIds[]String["open-06ns8591-02pr-941q-n81r-snn8340598r5","open-3q3p3182-p7s6-90nr-4044-s5nq3ro9n6n5"]用户id列表
mediaTypeInteger0资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源
watermarkContent[]string["水印内容"]|水印中携带的关键词信息,最多支持三个关键词,每个关键词最长支持15个字符

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—photos[]Object水印数据数组
|——idInteger981090726照片id
|——mediaUrlStringhttps://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg资源地址
|——mediaSimpleUrlStringhttps://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简版资源地址 照片类型时为缩略图,视频类型时为首祯图片
|——mediaTypeInteger0资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源
|——timeInteger1627612拍照时间,Unix时间戳
|——userIDStringopen-0q325626-s606-93qr-33q9-n535snnoqn77拍照人id
timestampInteger1629092630请求时间,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&timestamp=%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列表
pageSizeInteger100支持分页查询,每页条目数,如果不传,默认值为1000
pageNoInteger1支持分页查询,分页页码,如果不传,默认值为1

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—hasMoreBooleantrue是否还有下一页数据
|—nextPageNoInteger2下一页的页码
|—watermarks[]Object水印数据数组
|——watermarkIDInteger1444928478914561水印id,用于多维度查询照片数据
|——photoIDInteger981090726照片id
|——userIDStringopen-0q325626-s606-93qr-33q9-n535snnoqn77拍照人id
|——watermarkNameString时间地点天气水印名称
|——timeInteger1627612拍照时间,Unix时间戳
|——addrString成都市·天荟拍照地点
|——weatherString晴 11° 北风≤3级天气
|——lngString104.065727经度
|——latString30.554810纬度
|——altitudeString50.7海拔高度,单位 ‘米’
|——extends[]Object981090726照片id
|———titleString工程名称水印中的自定义条目标题
|———contentString工程记录水印中的自定义条目内容
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
startTimeInteger1623826153Unix时间戳,筛选条件的开始时间点
endTimeInteger1629096554Unix时间戳,筛选条件的结束时间点
pageSizeInteger100支持分页查询,每页条目数,如果不传,默认值为1000
pageNoInteger1支持分页查询,分页页码,如果不传,默认值为1

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—hasMoreBooleantrue是否还有下一页数据
|—nextPageNoInteger2下一页的页码
|—watermarks[]Object水印数据数组
|——watermarkIDInteger1444928478914561水印id,用于多维度查询照片数据
|——photoIDInteger981090726照片id
|——userIDStringopen-0q325626-s606-93qr-33q9-n535snnoqn77拍照人id
|——watermarkNameString时间地点天气水印名称
|——timeInteger1627612拍照时间,Unix时间戳
|——addrString成都市·天荟拍照地点
|——weatherString晴 11° 北风≤3级天气
|——lngString104.065727经度
|——latString30.554810纬度
|——altitudeString50.7海拔高度,单位 ‘米’
|——extends[]Object981090726照片id
|———titleString工程名称水印中的自定义条目标题
|———contentString工程记录水印中的自定义条目内容
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
imageUrlStringhttps://net-cloud.xhey.top/SKU/71c506de1f1541f2aa0dcf60af07778f.jpg待识别图片地址

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—taskIDString4e9da3a6-7724-11ee-a826-0000028ce680识别任务ID
timestampInteger1629092630请求时间,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&timestamp=%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参数

名称类型是否必填示例值描述
taskIDString03c01878-7794-11ee-be54-000000007530识别任务ID

返回参数

名称类型示例值描述
codeString200状态码
msgStringsuccess状态码对应的提示内容
dataObject返回内容
|—statusInteger1识别状态 0识别中 1识别完成 2识别失败
|—display[]Object识别结果
|—-skuCodeString40sku编号
|—-skuNumInteger2sku个数
|—-skuNameString无糖可乐500mlsku详细名称
|—-instances[]Objectsku在图片中的详细信息
|—--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&timestamp=%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 携带鉴权信息

接收参数

名称类型示例值描述
groupIDString11971798团队号
photoObject资源信息
|—idInteger981090726资源id
|—mediaUrlStringhttps://net-cloud.xhey.top/group/photo/87485164-6394-4b9d-966e-05ac786b5160.jpg资源地址
|—mediaSimpleUrlStringhttps://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简版资源地址 照片类型时为缩略图,视频类型时为首祯图片
|—mediaTypeInteger0资源类型,0-照片 1-视频,如果不传该值,将会查询满足0或1的资源
|—timeInteger1627612拍照时间,Unix时间戳
|—userIDStringopen-0q325626-s606-93qr-33q9-n535snnoqn77拍照人id
|—userNameString拍摄人拍照人昵称
watermarkObject水印信息
|—watermarkIDInteger1444928478914561水印id,用于多维度查询照片数据
|-watermarkIdentificationString182ba62d-257e-11ec-5660-3f95007345e9水印标识
|—photoIDInteger981090726照片id
|—userIDStringopen-0q325626-s606-93qr-33q9-n535snnoqn77拍照人id
|—watermarkNameString时间地点天气水印名称
|—timeInteger拍摄时间,Unix时间戳
|—addrString成都市·天荟拍摄地址
|—weatherString晴 11° 北风≤3级天气
|—lngString104.065727经度
|—latString30.554810纬度
|—altitudeString50.7海拔高度,单位 ‘米’
|—extends[]Object水印自定义内容
|———titleString工程名称水印中的自定义条目标题
|———contentString工程记录水印中的自定义条目内容

返回参数

名称类型示例值描述
statusInteger200接收到消息返回200认为发送成功,否则会一直重试
messageString失败时返回的特殊消息

请求正文

{
"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值类型错误内容
200Integersuccess
2001Integeryou can query a maximum of 1000 records, please be precise with your query conditions
400Integerparam error
401Integerverify error
403Integerforbidden
404Integernot found
500Integerservice error
4007Integergroup key or secret not right
4008Integeryou can query a maximum of 1000 personnel information at a time
4009Integertime param error
4010Integeryou can query longest of 180 days data
4011Integeryou can use a maximum of three keywords to search
4012Integerone keyword contain a maximum of 15 characters
4013Integernot support watermark ids query