1、WebServiceAPI Key配置中的域名白名单如何使用?
域名白名单适用于浏览器端JSONP方式调用WebserviceAPI服务:
(1)仅白名单中的域名才可使用此key调用WebService服务
(2)留空侧不限制调用来源
(3)每行填写一个域名,填写的域名及其子域名都会同时得到授权,如:qq.com,则qq.com下的子域名map.qq.com也可以使用此key
非授权域名使用您的key调用WebServiceAPI时会被拒绝,同时会返回本次请求来源域名,以便您更正配置:
{
"status": 110,
"message": "请求来源未被授权(本次请求来源为:lbs.qq.com),请检查key配置。"
}
2、WebServiceAPI Key配置中的授权IP如何使用?
用于限制此key的调用来源IP,以防key被盗用,优点:配置简单,无需开发,但IP地址有变化时,必须同时修改配置。
(1)配置填写方法:
进入Key管理界面,找到要设置的Key进入设置界面,启用产品勾选WebServiceAPI后,会出现相应安全设置,点击“授权IP”进行设置
a. 每行填写一条,留空则不限制。
b. 支持填写单一授权IP,例:202.106.0.99
c. 支持授权IP段,起始IP-结束IP。例(IPv4):202.106.0.20-202.106.0.26
(2)如何准确得知我的IP地址:
首先您可询问您的网络供应商获悉,另外您可以通过IP定位接口,在接口返回结果中会包含您的服务器IP
(3)非授权IP使用您的key调用WebServiceAPI时会被拒绝,同时会返回本次请求来源IP,以便更正配置:
{
"status": 112,
"message": "IP未被授权(本次请求来源IP为:202.106.0.20),请检查key配置。"
}
3、WebServiceAPI Key配置中签名校验如何使用?
与授权IP方式比较,使用SN校验稍有开发量,但不必担心服务器换IP的问题。
选中SN校验后,会生成SecretKey (SK),用于请求地图WebServiceAPI时计算签名,将签名做为参数(sig)附带到请求中,腾讯服务器会在收到请求后,使用相同的方式生成签名,并与请求中附带的签名进行比对,当一致时即为校验通过,反之则拒绝。
SecretKey (SK) 要注意保密,如有泄漏应尽快重新重成。
4、WebServiceAPI(GET方法)签名计算
(1)通用概念:
a. 请求路径:调用接口时的路径,如:/ws/geocoder/v1,末尾是否带 / 均可,不做要求,但需要保持一致,比如调用路径用了/ws/geocoder/v1,签名计算的时候也要用/ws/geocoder/v1
b. SecretKey (SK):在腾讯位置服务控制台 > Key配置中,勾选WebServiceAPI的 SN校验时自动生成的随机字串,用于计算签名(sig)
c. sig:签名计算结果
通过以下示例讲解(本例为调用逆地址解析请求的url):
(2)GET请求分为:域名,请求路径和参数三个部分,用于签名计算的有:
请求路径:/ws/geocoder/v1
请求参数:location=28.7033487,115.8660847&key=5Q5BZ-5EVWJ-SN5F3-K6QBZ-B3FAO-*****
a. 首先对参数进行排序:按参数名升序(本例结果为key在前,location在后):
key=5Q5BZ-5EVWJ-SN5F3-K6QBZ-B3FAO-RVBWM&location=28.7033487,115.8660847
b. 签名计算(sig):
请求路径+”?”+请求参数+SK进行拼接,并计算拼接后字符串md5值(字符必须为小写),即为签名(sig):
要求:请求参数必须是未进行任何编码(如urlencode)的原始数据
md5("/ws/geocoder/v1?key=5Q5BZ-5EVWJ-SN5F3-*****&location=28.7033487,115.8660847SWvT26ypwq5Nwb5RvS8cLi6NSoH8HlJX")
本例计算得到结果为:90da272bfa19122547298e2b0bcc0e50
c. 生成最终请求:将计算得到的签名sig,放到请求中(参数名即为:sig):
https://apis.map.qq.com/ws/geocoder/v1?key=5Q5BZ-5EVWJ-SN5F3-K6QBZ-B3FAO-*****&location=28.7033487,115.8660847&sig=90da272bfa19122547298e2b0bcc0e50
注意:计算 sig 要使用原始参数值,不要进行任何编码,但最终发送时的参数,是需要时行url编码的
5、WebServiceAPI和地点云API 的 POST接口(application/json)如何计算签名?
(1)通用概念:
a. 请求路径:调用接口时的路径,如:/place_cloud/data/create,末尾是否带 / 均可,不做要求
b. SecretKey (SK):在腾讯位置服务控制台 > Key配置中,勾选WebServiceAPI的 SN校验时自动生成的随机字串,用于计算签名(sig)
c. sig:签名计算结果
(2)下文以地点云API的 [创建地点数据接口] 为例计算签名:
// POST请求地址
https://apis.map.qq.com/place_cloud/data/create
// 请求头:content-type:application/json
//Post方法提交数据
{
"key":"5Q5BZ-5EVWJ-SN5F3-K6QBZ-*****",
"table_id":"5d405395d230bf1d9416be10",
"data":[
{
"ud_id":"156985",
"title":"海淀区苏州街营业部",
"location":{
"lat":39.983988,
"lng":116.307709
},
"x":{
"price":15.5
}
}
]
}
a. 参数排序:按JSON对象中的一级属性名字符升序排序,本例结果为:data,key,table_id
再将每个一级属性的 Value 转成最短JSON string形式:
data
[{“ud_id”:“156985”,“title”:“海淀区苏州街营业部”,“location”:{“lat”:39.983988,“lng”:116.307709},“x”:{“price”:“no price”}}]
key
5Q5BZ-5EVWJ-SN5F3-K6QBZ-*****
table_id
5d405395d230bf1d9416be10
b. 拼接成Querystring型的字符串:
data=[{"ud_id":"156985","title":"海淀区苏州街营业部","location":{"lat":39.983988,"lng":116.307709},"x":{"price":15.5}}]&key=5Q5BZ-5EVWJ-SN5F3-K6QBZ-*****&table_id=5d405395d230bf1d9416be10
c. 签名计算(sig):
请求路径+”?”+请求参数+SK进行拼接,并计算拼接后字符串md5值(字符必须为小写),即为签名(sig):
要求:请求参数必须是未进行任何编码(如urlencode)的原始数据
md5('/place_cloud/data/create?data=[{"ud_id":"156985","title":"海淀区苏州街营业部","location":{"lat":39.983988,"lng":116.307709},"x":{"price":15.5}}]&key=5Q5BZ-5EVWJ-SN5F3-K6QBZ-*****&table_id=5d405395d230bf1d9416be10KIpUE64TiqLuF2vBJCLOvkFVy0we0Ypp')
本例计算得到结果为:782f2ca97e6592741049823787203e9c
d. 发送请求:
//URL与请求头
POST /place_cloud/data/create?sig=782f2ca97e6592741049823787203e9c HTTP/1.1
Host: sdkgw.noscan.sparta.html5.qq.com
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 257
Content-Type: application/json
//Post Body
{"key": "5Q5BZ-5EVWJ-SN5F3-K6QBZ-B3FAO-RVBWM", "table_id": "5d405395d230bf1d9416be10", "data": [{"ud_id": "156985", "title": "\u6d77\u6dc0\u533a\u82cf\u5dde\u8857\u8425\u4e1a\u90e8", "location": {"lat": 39.983988, "lng": 116.307709}, "x": {"price": 15.5}}]}
发送的data里的JSON并不需要是最小形式,可以使用空格。
e. 返回结果:
{
'status': 0,
'message': '成功',
'request_id': 'a98aec8aa0de7a2905ad347d85b188',
'result': {
'count': 1,
'failure': [],
'success': [
{
'id': '5d405d2918d433170478b790',
'row_idx': 0,
'ud_id': '156985'
}
]
}
}