(1)AuthorizationCode 此流程要求ISV和商家应用有WebServer,能够保持应用本身的密钥以及状态,可以通过https直接访问京东的授权服务器。
(2)Rrfreshtoken 通过第一种流程,获取了Access token以及Rrfreshtoken(刷新令牌,对于具有“获取Refresh token权限”的应用),Accesstoken都有一定的期限,当Access token过期时,用户可以用Refresh token延长Accesstoken的时长。
首先开发者需要先在JOS注册成为开发者,然后创建 授权登陆 的应用类型,获取JOS分配给开发者的App Key和App Secret
1. 注册成为开发者
首先进入http://jos.jd.com页面,注册成为开发者
按照提示输入相关信息。
2. 创建应用类型:买家/网站应用
输入相关信息后,即可获得网站分配的app key和app secret
此流程要求ISV和商家应用有Web Server,能够保持应用本身的密钥以及状态,可以通过https直接访问京东的授权服务器。
1. 参数说明
获取授权码code参数
参数名称 | 参数选项 | 描述 |
---|---|---|
response_type | 必须 | 此流程下,该值固定为code |
client_id | 必须 | 即创建应用时的Appkey (从开发者中心申请的应用中获取) |
redirect_uri | 必须 | 应用的回调地址,必须和应用的callback地址匹配。 |
state | 可选 | 状态参数,由应用自定义,颁发授权后会原封不动返回 |
scope | 可选 | 权限参数,API组名串,多个组名时,用“,”分隔。目前支持参数:暂无 |
login | 可选 | 是否强制登陆,true为强制登陆 |
获取访问令牌Access token参数
参数名称 | 参数选项 | 描述 |
---|---|---|
grant_type | 必须 | 授权类型,此流程下,该值固定为authorization_code |
code | 必须 | 授权请求中的授权码 |
redirect_uri | 必须 | 应用的回调地址,必须和应用的callback主域名匹配。 |
client_id | 必须 | 即Appkey(从开发者中心申请的应用中获取) |
client_secret | 必须 | 即Appsecret(从开发者中心申请的应用中获取) |
scope | 短授权为必须 | 权限参数,API组名串,多个组名时,用“,”分隔,目前支持参数:read |
2. 基本流程
2.1 引导使用应用的用户登录到如下地址获取code:
https://openlogin.jd.com/oauth2/login?response_type=code&client_id=YOUR_CLIENT_ID&
redirect_uri=YOUR_REGISTERED_REDIRECT_URI&state=YOUR_CUSTOM_CODE&login=YOUR_LOGIN
释义:client_id:即创建应用获取的Appkey,从开发者中心获取;redirect_url:创建应用时填写的回调地址
2.2 用户登录授权
2.3 获取授权码code
用户同意授权,页面跳转至应用的回调地址,同时返回授权码code以及state参数。
2.4 获取访问令牌access_token
用上一步获取的code和注册应用时分配的AppSecret,通过HttpPost方式换取Token(访问令牌,即Sessionkey),JOS会以json文本的形式返回响应的值
对于程序,可以参考如下代码获取AccessToken
String url="https://auth.360buy.com/oauth/token?grant_type=authorization_code&client_id="+appKey +"&client_secret="+ appSecret +"&scope=read&redirect_uri=http://"+ url +"&code="+ code +"&state=1234"; uri = new URL(url); HttpURLConnection conn =(HttpURLConnection)uri.openConnection(); conn.setRequestProperty("Accept-Charset","utf-8"); conn.setRequestMethod("POST"); int code = conn.getResponseCode(); InputStream is =conn.getInputStream(); String jsonStr =inputStream2String(is); StringaccessToken = this.getAccessToken(jsonStr); |
最后生成的http请求url如下:
https://auth.360buy.com/oauth/token?grant_type=authorization_code&client_id=YOUR_CLIENT_ID&
redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=GET_CODE&state=YOUR_CUSTOM_CODE&client_secret=YOUR_APP_SECRET
可以从http返回结果中,得到AccessToken和Refresh_token以及uid注释:
expires_in: 失效时间(秒)
time: 授权的时间点(UNIX时间戳,单位:毫秒)
uid: 京东用户的唯一标示(可用来确认唯一用户)
参数名字 | 参数选项 | 参数值 | 参数释义 |
client_id | 必选 | | |
client_secret | 必选 | | |
grant_type | 必选 | refresh_token | 获取的访问令牌 |
refresh_token | 必选 | 授权颁发的刷新令牌 | |
scope | 可选 | 参见scope的定义 | |
state | 可选 | 维持应用的状态,传入值与返回值保持一致。 |
2. 应用示例
注释:
expires_in: 失效时间(秒)
time: 授权的时间点(UNIX时间戳,单位:毫秒)
uid: 京东用户的唯一标示(可用来确认唯一用户)