快应用OPPO账号服务端API
一、API 概览
API |
描述 |
/jitsopen/api/oauth2/v1.0/token |
根据授权码获取token |
/jitsopen/api/oauth2/v1.0/token |
根据refreshToken刷新token |
/jitsopen/api/oauth2/v1.0/userinfo |
根据token获取用户信息 |
二、调用方式
2.1 服务域名
https://jits.open.oppomobile.com
2.2 通信协议
支持通过 HTTP 通道进行请求通信
2.3 请求方法
支持 HTTP POST 方法发送请求,请求参数包含在请求的 URL 中
2.4 签名算法
说明:
api_sign计算规则为涉及请求参数(包含get参数和POST参数( 值为NULL的参数不参与签名),例如请求参数k1=v1,参数k2=v2)
详细算法如下:
step 1:请求参数(去除appId 、sign、timestamp 这三个参数)按照参数名字母升序排列
step 2:请求参数根据&拼接字符串string。(例如,拼接成k1=v1&k2=v2)
step 3:字符串string之后拼接timestamp,appId和appSecret。(例如,接上一步,k1=v1&k2=v2×tamp={timestamp}&appId={appId}&appSecret={appSecret})
step 4:对step3得到的字符串进行MD5哈希(32位小写)得到sign,然后转换为十六进制字符串作为参数传递
例子:
1) 分配调用方appId=5f4dbf2e5629d8cc19e7d51874266678 appSecret=a198fe96c4cadb744ed57b3ad563f037
2)请求传递参数:
GET参数为: c=1&b=2
POST参数为: a=3 d=4
3)当前系统时间戳:timestamp=1510277528
4)则 byte[] sign=md5(a=3&b=2&c=1&d=4×tamp=1510277528&appId=5f4dbf2e5629d8cc19e7d51874266678&appSecret=a198fe96c4cadb744ed57b3ad563f037)
5)String strSign = fromBytesToHex(sign);
算法参考实现(点击下载):
三、接口详细定义
3.1 根据授权码获取token
3.1.1 接口详情
请求URI |
/jitsopen/api/oauth2/v1.0/token |
|||
HTTP Method |
POST |
|||
说明 |
客户端获取授权码后,服务端可通过授权码向授权服务器请求access_token |
|||
请求 |
||||
Header |
值 |
|||
Content-Type |
application/json |
|||
参数 |
类型 |
是否 必需 |
说明 |
|
appId |
字符串 |
必需 |
快应用在开放平台申请的appId |
|
code |
字符串 |
必需 |
授权码 |
|
scope |
字符串 |
必需 |
请求的授权范围不能包含任何资源所有者最初未许可的范围。若省略,被视为与资源所有者最初许可的范围相同 |
|
timestamp |
长整型 |
必需 |
时间戳,当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数 |
|
sign |
字符串 |
必需 |
签名,签名算法见2.4的描述 |
|
成功响应 |
||||
HTTP状态码 |
200 |
|||
Header |
值 |
说明 |
||
Content-Type |
application/json |
|
||
Cache-Control |
no-store |
|
||
Pragma |
no-cache |
|
||
对象 |
字段 |
类型 |
是否 必有 |
说明 |
code |
|
字符串 |
必有 |
返回码,请求成功的话,返回“200” |
msg |
|
字符串 |
可选 |
提示信息 |
data
|
accessToken |
字符串 |
必有 |
授权服务器颁发的访问令牌 |
tokenType |
字符串 |
必有 |
令牌的类型,大小写不敏感,目前支持“Bearer” |
|
expiresIn |
长整型 |
必有 |
token过期时间,单位:秒 |
|
refreshToken |
字符串 |
可选 |
刷新token |
|
scope |
字符串 |
必有 |
授权范围 |
|
openId |
字符串 |
可选 |
标识用户身份的openId |
|
错误响应 |
||||
HTTP状态码 |
200 |
|||
Header |
值 |
说明 |
||
Content-Type |
application/json |
|
||
Cache-Control |
no-store |
|
||
Pragma |
no-cache |
|
||
字段 |
字段 |
类型 |
是否 必有 |
说明 |
code |
|
字符串 |
必有 |
错误码 |
msg |
|
字符串 |
必有 |
错误提示信息 |
data |
|
对象 |
可选 |
返回的数据对象 |
3.1.2 正常响应示例:
{
"code":"200",
"msg": "success",
"data": {
"accessToken":"23fkewhf234lsjgxfaxufkk5f98",
"tokenType": "Bearer",
"expiresIn": 3600,
"refreshToken": "3423fwefwef984234h42323ffsffe",
"scope":"profile",
"openId":""
}
}
3.2 刷新token
3.2.1 接口详情
请求URI |
/jitsopen/api/oauth2/v1.0/token |
|||
HTTP Method |
POST |
|||
说明 |
服务端通过前面获得的refreshToken来刷新token |
|||
请求 |
||||
Header |
值 |
|||
Content-Type |
application/json |
|||
参数 |
类型 |
是否必需 |
说明 |
|
appId |
字符串 |
必需 |
快应用在开放平台申请的appId |
|
refreshToken |
字符串 |
必需 |
刷新token码 |
|
scope |
字符串 |
必需 |
请求的授权范围不能包含任何资源所有者最初未许可的范围。若省略,被视为与资源所有者最初许可的范围相同 |
|
timestamp |
长整型 |
必需 |
时间戳,当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数 |
|
sign |
字符串 |
必需 |
签名,签名算法见2.4的描述 |
|
成功响应 |
||||
HTTP状态码 |
200 |
|||
Header |
值 |
说明 |
||
Content-Type |
application/json |
|
||
Cache-Control |
no-store |
|
||
Pragma |
no-cache |
|
||
对象 |
字段 |
类型 |
是否必有 |
说明 |
code |
|
字符串 |
必有 |
返回码,请求成功的话,返回“200” |
msg |
|
字符串 |
可选 |
提示信息 |
data
|
accessToken |
字符串 |
必有 |
授权服务器颁发的访问令牌 |
tokenType |
字符串 |
必有 |
令牌的类型,大小写不敏感,目前支持“Bearer” |
|
expiresIn |
长整型 |
必有 |
token过期时间,单位:秒 |
|
refreshToken |
字符串 |
可选 |
刷新token |
|
scope |
字符串 |
必有 |
授权范围 |
|
openId |
字符串 |
可选 |
标识用户身份的openId |
|
错误响应 |
||||
HTTP状态码 |
200 |
|||
Header |
值 |
说明 |
||
Content-Type |
application/json |
|
||
Cache-Control |
no-store |
|
||
Pragma |
no-cache |
|
||
字段 |
字段 |
类型 |
是否必有 |
说明 |
code |
|
字符串 |
必有 |
错误码 |
msg |
|
字符串 |
必有 |
错误提示信息 |
data |
|
对象 |
可选 |
返回的数据对象 |
3.2.2 正常响应示例:
{
"code":"200",
"msg": "success",
"data": {
"accessToken":"23fkewhf234lsjgxfaxufkk5f98",
"tokenType": "Bearer",
"expiresIn": 3600,
"refreshToken": "3423fwefwef984234h42323ffsffe",
"scope":"profile",
"openId":""
}
}
3.3 获取用户基本信息
3.3.1 接口详情
请求URI |
/jitsopen/api/oauth2/v1.0/userinfo |
|||
HTTP Method |
POST |
|||
说明 |
服务端通过前面获得的accessToken来获取用户信息 |
|||
请求 |
||||
Header |
值 |
|||
Content-Type |
application/json |
|||
参数 |
类型 |
是否必需 |
说明 |
|
appId |
字符串 |
必需 |
快应用在开放平台申请的appId |
|
token |
字符串 |
必需 |
accessToken,访问令牌 |
|
timestamp |
长整型 |
必需 |
时间戳,当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数 |
|
sign |
字符串 |
必需 |
签名,签名算法见2.4的描述 |
|
成功响应 |
||||
HTTP状态码 |
200 |
|||
Header |
值 |
说明 |
||
Content-Type |
application/json |
|
||
Cache-Control |
no-store |
|
||
Pragma |
no-cache |
|
||
对象 |
字段 |
类型 |
是否必有 |
说明 |
code |
|
字符串 |
必有 |
返回码,请求成功的话,返回“200” |
msg |
|
字符串 |
可选 |
提示信息 |
data
|
nickName |
昵称 |
必有 |
授权服务器颁发的访问令牌 |
avatars |
json对象 |
必有 |
{ "defaultAvatar" : "https://xxx.xxxx.xxx/a.gif" //默认头像 } |
|
错误响应 |
||||
HTTP状态码 |
200 |
|||
Header |
值 |
说明 |
||
Content-Type |
application/json |
|
||
Cache-Control |
no-store |
|
||
Pragma |
no-cache |
|
||
字段 |
字段 |
类型 |
是否必有 |
说明 |
code |
|
字符串 |
必有 |
错误码 |
msg |
|
字符串 |
必有 |
错误提示信息 |
data |
|
对象 |
可选 |
返回的数据对象 |
3.3.2 正常响应示例:
{
"code":"200",
"msg": "success",
"data": {
"nickName":"ksfifa",
"avatars": {
"defaultAvatar" :"https://xxx.xxxx.xxx/a.gif"
}
}
}
更多建议: