如果您想对接当当网的用户信息,需要获取一些与用户紧密相关的信息(如用户的昵称、邮箱、custID),为保证用户数据的安全性与隐私性,您的应用需要取得用户的同意,即引导用户去授权。在这种情况下,您的应用需要使用“用户使用当帐号登录并授权”流程。
当当采用国际通用的OAuth2.0协议,作为用户身份验证与授权协议。支持对网站、手机客户端、桌面客户端等不同类型的应用的授权。若要了解更多关于 OAuth2.0 的技术说明文档,可参看官方网站(http://oauth.net/2/) 。目前当当网站接入OAuth2.0服务只支持一种 Access Token(授权令牌)的方式:
Server-side flow:此流程要求ISV应用有Web Server应用,能够保存应用本身的密钥以及状态,可以通过http直接访问当当的授权服务器。
1. redirect_uri及callback定义规则
redirect_uri指的是应用发起请求时,所传的回调地址参数,在用户授权后应用会跳转至redirect_uri。
callback指的是应用注册时填写的回调地址链接或者网站接入时所验证的域名地址。
相关的规则是:
(1)对于Server-side flow,redirect_uri是必选参数,并且要求redirect_uri与callback的顶级域名一致。
(2)在不可预知错误的情况下,返回到默认错误页面。
2. scope定义规则
scope指的是应用发起请求时,所请求的API调用权限范围。
为空表示所有权限。
3. View参数
可选值:web
Web对应普通的PC端(当当logo)浏览器页面样式。
4.Access Token
Access Token即用户授权后颁发的session key
此流程需要您有自己的web服务器,能够保存应用本身的密钥以及状态,可以通过http直接访问当当的授权服务器。
授权过程分为两个步骤:
(1) 通过用户授权获取授权码Code; (获取授权码 :http://oauth.dangdang.com/authorize)
(2) 用上一步获取的Code和应用密钥(AppSecret)通过Http Post方式换取Token。(获取访问令牌: http://oauth.dangdang.com/token)
1. 参数说明
1.1 获取授权码参数
参数名字 |
参数选项 |
参数值 |
参数释义 |
---|---|---|---|
appId |
必选 |
|
应用ID |
responseType |
必选 |
code |
响应类型 |
redirectUrl |
必选 |
|
|
state |
可选 |
|
维持应用的状态,传入值与返回值保持一致 |
view |
可选 |
默认为web |
|
1.2 返回值说明
参数名字 | 参数选项 | 示例 | 参数释义 |
---|---|---|---|
code |
正常结果 |
4A868CF11F142DC7663F90DBF9C37077 |
授权码 |
error |
异常时返回 |
|
错误码 |
error_description |
异常时返回 |
|
错误描述 |
1.3 获取访问令牌参数
参数名字 | 参数选项 | 参数值 | 参数释义 |
---|---|---|---|
appId |
必选 |
|
应用ID |
grantType |
必选 |
code |
换取方式 |
code |
必选 |
|
授权码 |
appSecret |
必选 |
|
应用密钥 |
refreshToken |
可选 |
|
刷新令牌码 |
redirectUrl |
必选 |
|
|
view |
可选 |
默认为web |
|
state |
可选 |
|
维持应用的状态,传入值与返回值保持一致 |
1.4 获取访问令牌的返回值以redirect_uri中的参数形式返回
Key | 选项 | 示例 | 说明 |
---|---|---|---|
accessToken |
必选 |
4A868CF11F142DC7663F90 |
访问令牌 |
expires_in |
必选 |
yyyy-MM-dd hh:mm:ss |
令牌到期时间 |
refresh_token |
必选 |
4A868CF11F142DC7663F90 |
刷新令牌 |
re_expires_in |
必选 |
|
刷新令牌过期时间 |
re_expires_time |
必选 |
|
刷新令牌到期时间 |
custId |
必选 |
|
顾客ID |
nickname |
必选 |
|
顾客昵称 |
|
必选 |
|
顾客邮箱 |
sign |
必选 |
|
由shop_id,app_id,edition_id,edition_end_date经过加密生成的签名 |
2. 应用示例
2.1 请求授权用户登录
http://oauth.dangdang.com/authorize?appId=123&redirectUrl=http://www.clientserver.com&responseType=code&state=yourstate&view=web
2.2 请求授权用户授权(用户登录后)
出现授权页面后,用户可以选择“授权”。
若用户选择“授权”,则页面跳转至应用的回调地址,同时返回授权码code以及state参数。
返回URL如下图所示:
2.3获取访问令牌
http://oauth.dangdang.com/token?appId=123&shopId=121&code=53226E0D5C4FFAA2E353B41824FA5307&appSecret=
5FDD35D3A94D73514CD6F1A5B58AED53&redirectUrl=http://www.clientserver.com/process_code.do&grantType=code&view=web&state=yourstate
然后把responseJson 转化为对象,或者直接从里面提取:accessToken字段。
返回结果内容示例:
{
"shop_id":"121",
"accessToken":"0A8A014439F745224352C0D44B4AD8EC",
"re_expires_time":"2013-08-26 17:46:49",
"re_expires_in":"5183998",
"state":"yourstate",
"expires_in":"2013-07-27 18:07:52",
"refresh_token":"89C7AB20DF3EACFC06446AF9732907B6",
"view":"web",
"custID":1156565,
"nickname":"张三",
"email":"zhangsan@dangdang.com",
"sign":"DF31862TY5CBB64RT180008E2F7E41E4"
}
错误信息 | 错误原因 |
---|---|
appId can not be empty |
appId不能为空 |
redirectUrl can not be empty |
redirectUrl不能为空 |
responseType can not be empty |
responseType不能为空 |
appSecret can not be empty |
appSecret不能为空 |
code can not be empty |
code不能为空 |
grantType can not be empty |
grantType不能为空 |
refreshToken can not be empty |
refreshToken不能为空 |
OAUTH SERVER ERROR:xxxxx |
系统内部错误,请重试 |
Copyright © 当当网 2004-2012, All Rights Reserved