安全认证
功能: Oauth2.0认证
资源URL:
POST: v1/oauth/token
请求参数:
参数名 | 类型 | 说明 |
---|---|---|
grant_type | string | 申请模式。client_credentials:客户端模式,refresh_token:刷新token,authorization_code:用户授权模式 |
scope | string(可选) | 申请权限列表,空格分隔,默认为public |
_ | string | 当前时间,ISO8601格式,10分钟内有效。测试环境不检查 |
nostr | string | 随机字符串,6位,数字与字母组合,区分大小写 |
refresh_token | string(刷新时必须) | 申请token时下发的refresh_token字段 |
auth_code | string(用户申请权限必须) | 接入方下发的auth_code,用于获取用户信息 |
Scope 取值范围
Scope取值 | 访问权限 | 说明 |
---|---|---|
public | 默认 | 获取产品类型,获取ETA、价格预估等 |
rides.read | 可选 | 获取用户的行程信息等 |
rides.request | 可选 | 请求、取消、更新行程等 |
profile | 可选 | 获取用户信息等 |
注: 如果接入方是代替用户叫车(用户与滴滴无直接交互),则scope必须包含完整的三项:public,rides.read,rides.request
请求token:
curl -X POST -H "Content-Type: application/json"
-H "Authorization: Bearer domain|{sign}"
-d '{"grant_type":"client_credentials","_":"2016-07-01T10:00:00+0800""nostr":"123abc"}'
'https://api.xiaojukeji.com/v1/oauth/token'
刷新token:
curl -X POST -H "Authorization: Bearer domain|{sign}"
-H "Content-Type: application/json"
-d '{"grant_type":"refresh_token","refresh_token":"43713d0303-49c60a08fe-835c9fc1fe","_":"2016-07-01T11:00:00+0800","nostr":"123abc"}'
'https://api.xiaojukeji.com/v1/oauth/token'
用户token:
curl -X POST -H "Authorization: Bearer domain|{sign}"
-H "Content-Type: application/json"
-d '{"grant_type":"authorization_code","auth_code":"43713d0303-49c60a08fe-835c9fc1fe","_":"2016-07-01T11:00:00+0800","nostr":"123abc"}'
'https://api.xiaojukeji.com/v1/oauth/token'
正常返回:
参数名 | 类型 | 说明 |
---|---|---|
access_token | string | 授权token,请求其他接口时必须由header提交。平台token可以多个同时有效,用户token只最后一个有效 |
refresh_token | string | 刷新token,在access_token过期时使用,该token只一次有效,刷新之后会分配新的refresh_token,无有效期限制 |
expires_in_second | int | access_token有效时间,单位:秒 |
token_type | string | token类型,bear/mac,目前只支持bear类型 |
scope | string | token权限等级,与申请时一致 |
注: 申请token有频次限制,平台 <= 10次/天,个人 <= 5次/天,刷新 <= 10次/天,超过则封禁24小时
返回结果:
http状态
200表示请求正确
非200表示请求出错
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"access_token": "didiCB5DEFD8086CE8EAC49CFDCFFA3BF94E66BFC287113521F868B9257E8782D0DB978B81A04133BA5968D9B15B6A4655A9B3B8E7E856ED69BC1FF5848DC784C5080523D74F1AA6B2AC310219BAD3CDE24DF60E61A83B67565B0FC63DE417858FF4",
"refresh_token": "bd01a0d243-e4a056f463-138c7a00fd",
"expires_in_second": 259200,
"token_type": "bearer",
"scope": "public rides.read rides.request"
}
说明:
- 请求数据格式必须为json
- header中需包含接入方id和签名,Authorization: bearer test|{sign},bearer表示请求token类型,test为分配的接入方id,与签名sign用”|”连接
- 签名算法
php版本
function generalCreateSign( $aData = array(), $sKey = '' )
{
if ( empty( $aData ) || ! is_string( $sKey ) ) { //签名数据不能为空,签名key必须为字符串
return FALSE;
}
ksort( $aData ); //签名数据按键值字典顺序排序
$str = '';
foreach ( $aData as $k => $v ) {
if ( empty( $v ) && $v !== 0 ) { //空值键不参与签名
continue;
}
if ( is_array( $v ) ) { //如果键值是数组,编码成json(中文将编码成UTF-8)
$v = json_encode( $v );
}
$str .= trim( $k ) . '=' . trim( $v ) . '&'; //键1=值1&键2=值2...
}
$str = trim( $str, '&' ); //去除字符串两端的&符号
return md5( md5( $str ) . $sKey ); //2次md5,key为给接入方分配的签名key
}