标准联合登陆
#
合作方对接文档:合作方需要给京东提供字段 :
- client_id
- client_secret
- appId (可选)
由合作方基于Oauth2.0协议, 提供三个接口 :
- 获取授权码
- 通过授权码获取accessToken
- 通过AccessToken获取用户openId及手机号
联调时可先联调接口2,3
#
大体流程:#
用户视角:1.点击京东链接【可选的前置流程】
2.进入合作方授权页,点击授权
3.自动进入京东登录页,正常登陆
4.自动进入落地的H5页
#
接口详情:#
1.【可选的前置流程】用户点击[京东链接],跳转至合作方授权页适用: 最终落地页是由京东侧动态下发的情况
优势: 京东侧下发的落地页可以灵活变动
京东侧会通过接口或者线下提供链接地址:
https://京东域名/render/渠道标识?returnUrl={编码后的落地页链接}
当用户点击京东侧render链接的时候, 将重定向到合作方授权页,并附带参数:
重定向至合作方授权页地址如:https://合作方域名/oauth/authorize
链接路径上将携带参数(京东侧传给合作方):
参数名 | 类型 | 固定值 | 是否必填 | 说明 |
---|---|---|---|---|
client_id | String | 否 | 是 | 合作方提供的client_id |
response_type | String | code | 是 | 固定值 |
redirect_uri | String | 否 | 是 | 合作方需重定向地址, 合作方可以无需关心它是如何构成的,当作链接字符串 用户授权后,只需要把code拼接到该字符串上并重定向就行 |
appId | String | 否 | 否[可选] | 用于同渠道数据隔离或应用隔离 |
即如:
https://合作方域名/oauth/authorize?client_id={合作方分配给京东的clientid}&redirect_uri={获取到code以后重定向到京东的地址}&response_type=code
#
2. 用户在合作方授权页面上对JD进行授权。用户在合作方页面上对JD进行授权, 同意授权后, 将code参数传递给京东链接即可。
合作方的授权页注意项:
- 由合作方控制用户需要点击授权或者跳过,以便合作方掌握时长间隔、账号风控等。如果之前已经授权过的需要跳过授权页面。
- 每次访问都应该经过此页。
- 授权码应当是一次性且有时限的。
如果有前置流程,拼接code值后,重定向地址为:
{returnUrl}&code={此处为合作方应当拼接的code}
如果没有前置流程,京东侧直接提供固定的returnUrl链接,合作方授权页同意后,带着授权码code直接重定向跳转到该链接即可
例如中国移动合作: https://ares-general.healthjd.com/oauth/callback/chinamobile?callbackUrl=https%3A%2F%2Fm.jd.com%2F&code= {此处为合作方应当拼接的code}
#
3. 用户跳转回jd地址后, JD通过授权码查询accesstoken:用户跳转回jd地址后, JD通过授权码查询accesstoken:
请求方式:GET
参数名 | 类型 | 固定值 | 是否必填 | 说明 |
---|---|---|---|---|
code | String | 否 | 是 | 授权码 |
client_id | String | 否 | 是 | ID,合作方分配提供 |
client_secret | String | 否 | 是 | 密钥,合作方分配提供 |
grant_type | String | authorization_code | 是 | 请求类型,固定值 |
redirect_uri | String | 否 | 是 |
示例:
method: Get
https://合作方域名/oauth/token?grant_type=authorization_code&code={合作方的code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}
参数:code={授权码}client_id={client_id}client_secret={client_secret}grant_type=authorization_coderedirect_uri={redirect_uri}
响应返回值
参数 | 类型 | 说明 |
---|---|---|
data | Map | 数据 |
--accessToken | String | token |
--expireInSeconds | Integer | 过期时间 |
code | String | 请求返回码 |
message | String | 请求返回信息 |
requestId | String | 请求唯一标识 |
示例:
{"data": { "accessToken": "", "expireInSeconds": 1800},"code": "0000","message": "成功","requestId": "a504dee9-826b-41c9-b3ee-cef797868706"}
#
4. JD通过AccessToken查询UserInfo请求方式:POST
参数名 | 类型 | 固定值 | 是否必填 | 说明 |
---|---|---|---|---|
appId | String | 否 | 否 | 可选Appid |
accessToken | String | 否 | 是 | Token |
示例:
method: POST
https://合作方域名/oauth/user/info
JSON参数:
{"appId":"xxx(可选)","accessToken":"xxx"}
响应返回:
参数 | 类型 | 说明 |
---|---|---|
data | Map | 数据 |
--mobilePhone | String | 手机号 |
--openId | String | 合作方用户唯一标识 |
--name | String | 用户名称 |
示例:
{"data": { "mobilePhone":"xxx", "openId":"xxx", "name":"xxx" }}
说明:
唯一id String openId;
姓名 String name;
唯一手机号 String mobilePhone;