调用说明
请求结构
请求结构简介
1.API 服务说明
号码对外开放接口 采用域名进行访问: pnvs.baidubce.com
2.通信协议
API 调用采用HTTP协议。
3.请求参数
百度智能云 API 的每个请求都需要指定两类参数:即公共请求参数以及接口请求参数。其中公共请求参数是每个接口都要用到的请求参数,而接口请求参数是各个接口所特有的,具体见各个接口的“请求参数”描述。
参数类型 | 参数说明 |
---|---|
URI | 通常用于指明操作实体,如:POST /haoma-cloud/openapi/phone-tag/1.0 |
Query参数 | URL中携带的请求参数 |
HEADER | 通过HTTP头域传入,如:x-bce-date |
RequestBody | 通过JSON格式组织的请求数据体 |
4.API 版本号
参数 | 类型 | 参数位置 | 描述 | 是否必须 |
---|---|---|---|---|
version | string | URL参数 | API 版本号,当前API 版本为 1.0 | 是 |
5.字符编码
可解析内容,所有 request/response body 内容目前均使用 UTF-8 编码,后续会支持更多 encoding 类型。
公共头
公共请求头
参数名称 | 描述 |
---|---|
Authorization | 包含Access Key与请求签名。 |
Content-Type | application/json; charset=utf-8。 |
x-bce-date | 表示日期的字符串,符合 API 规范。 |
Host | 表示请求 API 的域名。 |
x-bce-content-sha256 | 表示内容部分的SHA256签名的十六进制字符串。 这里内容指HTTP Request Payload Body。 即 Content 部分在被 HTTP encode之前的原始数据。 |
公共响应头
参数名称 | 描述 |
---|---|
Content-Type | application/json; charset=utf-8。 |
x-bce-request-id | 云数据库 RDS 后端生成,并自动设置到响应头域中。 |
接口特殊请求参数说明
接口请求参数与具体的接口有关,不同的接口支持的接口请求参数也不同
以空号检测为例,支持的接口请求参数如下:
参数名称 | 类型 | 是否必须 | 参数位置 | 描述 |
---|---|---|---|---|
appkey | string | 是 | RequestBody参数 | 主渠道信息,申请服务时颁发 |
subkey | string | 否 | RequestBody参数 | 子渠道信息 |
phone | string | 是 | RequestBody参数 | 号码sha1 即sha1(phone) |
其中各字段说明如下:
字段 | 说明 |
---|---|
参数名称 | 该接口支持的请求参数名,用户可以在使用此接口时将其作为接口请求参数。 |
类型 | 此接口参数的数据类型。 |
是否必须 | 标志此参数是否是必须的,若为“是”;,则表明调用该接口必须传入此参数;若为“否”,表示可以不传入。 |
参数位置 | 此接口参数的所属位置。 |
描述 | 简要描述了此接口请求参数的内容。 |
最终请求形式
最终的请求由以下几部分组成:
1.请求域名: 如北京区域的域名为pnvs.baidubce.com。
2.请求路径: 各个接口请求路径不同,详见具体接口详情。
3.请求方式: 支持RESTful风格的请求方式,本接口文档中仅涉及到POST请求方式。
4.请求头: 包括鉴权信息在内的各个公共请求头。详细参考公共头。
5.最终请求参数串: 包括接口路径参数(请求路径中问号后面的部分)和接口请求参数。
6.请求body体:根据接口规定的RequestBody参数结构组成的json结构体。 示例:
POST haoma-cloud/openapi/phone-tag/1.0 HTTP/1.1
HOST: pnvs.baidubce.com
Content-Type: application/json
Authorization: bce-auth-v1/2a05b5a19e494c5c9823d64ef5104ffb/2021-04-22T03:42:25Z/18000/x-bce-date;host/493a98de1efb44112fc9852863b6d1c883a12f3699ef7e90812fb833b4300cf4
{
"appkey": "appkey",
"phone": "f8544b96dfe56ea79e2914997572ec2386b28128"
}
返回结果
正确返回结果
{
"code":"10000",
"msg":"success",
"result":{
"phone":"f8544b96dfe56ea79e2914997572ec2386b28128",
"phone_status":"8"
}
}
错误返回结果
请求错误时通过code返回具体的错误信息,遵循如下格式:
参数名 | 类型 | 说明 |
---|---|---|
code | String | 错误码 |
msg | String | 错误描述 |
result | Object | 出错情况下一般返回空 |
空号检测错误返回码说明
错误码 | 错误描述 | HTTP状态码 | 中文解释 |
---|---|---|---|
10000 | success | 200 | 请求成功 |
10001 | param is required | 200 | 参数缺失 |
10002 | param is invalid | 200 | 参数无效 |
20001 | internal server error | 200 | 内部错误 |
30001 | client_ip is invalid | 200 | IP不合法 |
签名认证
号码对外OpenAPI 会对每个访问的请求进行身份认证,以保障用户的安全。安全认证采用Acess Key与请求签名机制。Acess Key 由Acess Key ID 和 Secret Acess Key 组成,均为字符串,由百度智能云官方颁发给用户。其中Acess Key ID 用于标识用户身份, Acess Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。
对于每个HTTP请求,用户需要使用下文所描述的方式生成一个签名字符串,并将认证字符串放在HTTP请求的Authorization头域里。
签名字符串格式
bce-auth-v{version}/{accessKeyId}/{timestamp}/{expireTime}/{signedHeaders}/{signature}
签名申请步骤
关于AK/SK的获取,请参看获取AK/SK
签名生成算法
有关签名生成算法的具体介绍,请参看鉴权认证机制。
其他说明
密码加密传输规范定义
所有涉及密码的接口参数都需要加密,禁止明文传输。密码一律采用AES-128-ECB加密算法进行加密,用SK的前16位作为密钥,用PKCS5Padding算法进行长度补全。此外,加密后生成的二进制字节流需要转成十六进制,并以字符串的形式传到服务端。
加密过程可参考以下代码,以Python为例,进行说明:
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
"""
若引入包Cipher后提示不存在该包,则安装pycryptodome包
"""
def encrypt(secretkey, password):
"""Encrypt adminpass by AES-128-ECB/PKCS5Padding, the key is secretkey."""
pendding = 16 - len(password) % 16
password += chr(pendding) * (pendding)
return b2a_hex(AES.new(secretkey[:16], AES.MODE_ECB).encrypt(password))
def decrypt(secretkey, password):
"""Decrypt adminpass by AES-128-ECB/PKCS5Padding, the key is secretkey."""
decrypted = AES.new(secretkey[:16], AES.MODE_ECB).decrypt(a2b_hex(password))
pendding = ord(decrypted[len(decrypted) - 1])
return decrypted[:-pendding]
日期与时间规范
日期与时间的表示有多种方式。为统一起见,除非是约定俗成或者有相应规范的,凡需要日期时间表示的地方一律采用UTC时间,遵循ISO 8601,并做以下约束:
1.表示日期一律采用YYYY-MM-DD方式,例如2014-06-01表示2014年6月1日
2.表示时间一律采用hh:mm:ss方式,并在最后加一个大写字母Z表示UTC时间。例如23:00:10Z表示UTC时间23点0分10秒。
3.凡涉及日期和时间合并表示时,在两者中间加大写字母T,例如2014-06-01T23:00:10Z表示UTC时间2014年6月1日23点0分10秒。