登录授权
如果您的应用和AE开放平台对接时需要获取用户隐私数据(如商品、订单等),为保证用户数据的安全与隐私,您的应用需要取得用户的授权,即获取访问用户数据的授权令牌 Access Token (即原来的SessionKey)。这种情况下,您的应用需要引导用户完成使用AE帐号“登录授权”的流程。该流程采用国际通用的OAuth2.0标准协议作为用户身份验证与授权协议,支持网站、手机客户端、桌面客户端。
目前速卖通OAuth2.0服务支持采用两种方式获取Access Token(授权令牌),即 Server-side flow 和 Client-side flow ,详见如下说明。
特别注意
此文档描述的授权页面仅适用于PC端。
一、Server-side flow
此流程要求ISV应用有Web Server应用,能够保存应用本身的密钥以及状态,可以通过https直接访问AE的授权服务器。
1、请求入口地址
1)获取授权码(code)
正式环境:https://oauth.aliexpress.com/authorize
2)获取访问令牌(access_token)
正式环境:https://oauth.aliexpress.com/token
2、授权操作步骤
此处以正式环境获取acccess_token为例说明
实际进行授权操作时,测试的数据 client_id、client_secret、redirect_uri 均需要根据自己创建的应用实际数据给予替换,不能拿示例中给出的值直接进行测试,以免影响实际测试效果。下图为Server-side flow 授权方式流程图,以下按流程图逐步说明。
1)拼接授权url
拼接用户授权需访问url ,示例及参数说明如下:
https://oauth.aliexpress.com/authorize?response_type=code&client_id=23075594&redirect_uri=http://www.oauth.net/2/&state=1212&view=web&sp=ae
参数说明 |
|||
名称 |
是否必选 |
参数值 |
参数释义 |
client_id |
必选 |
|
等同于appkey,创建应用时获得。 |
response_type |
必选 |
code |
授权类型 ,值为code。 |
redirect_uri |
必选 |
可填写应用注册时回调地址域名。 |
redirect_uri指的是应用发起请求时,所传的回调地址参数,在用户授权后应用会跳转至redirect_uri。要求与应用注册时填写的回调地址域名一致或顶级域名一致 。 |
sp |
必选 |
ae |
使用AE的帐户获取授权 |
state |
可选 |
可自定义,如1212等; |
维持应用的状态,传入值与返回值保持一致。 |
view |
可选 |
web,可选web、tmall或wap其中一种,默认为web。 |
web对应PC端(淘宝logo)浏览器页面样式;tmall对应天猫的浏览器页面样式;wap对应无线端的浏览器页面样式。 |
2)引导用户登录授权
注意:如果您是Dropshipping开发者,则必须保证用户加入Dropshipping会员,请用户访问如下地址加入Dropshipping会员:https://home.aliexpress.com/dropshipper/join_drop_shipper.htm
引导用户通过浏览器访问以上授权url,将弹出如下登录页面。用户输入账号、密码点“Sign In”按钮,即可进入授权页面。
3)获取code
上图页面,若用户点“授权”按钮后,TOP会将授权码code 返回到了回调地址上,应用可以获取并使用该code去换取access_token(注意code的有效期很短,尽量使用程序(而非手工复制)获取到代码后立刻换取access_token,否则code很快失效);
若用户未点授权而是点了“取消”按钮,则返回如下结果,其中error为错误码,error_description为错误描述。分别如下图所示:
说明:
可发布服务市场(marketplace.seller.aliexpress.com)的应用,在应用上线后,如购买应用的用户,通过"我的服务--立即使用”访问(下图),系统会自动跳到授权页面(因此这种方式访问应用的,不需要拼接url),只需注意获取code即可。同时返回code时,还会返回通过state传递订购服务相关的信息,类似:
state=versionNo:1;itemCode:xxxxx (versionNo 为应用版本号、itemCode为应用收费代码)
4)换取access_token
方式1:
利用linux 的curl 命令 获取access_token(授权令牌),如下;对于应用程序,可以参考文档**示例**这里的示例代码。
curl -i -d "code=OxlukWofLrB1Db1M6aJGF8x2332458&grant_type=authorization_code&client_id=23075594&
client_secret=69a1469a1469a1469a14a9bf269a14&sp=ae&redirect_uri=http://www.oauth.net/2/ " https://oauth.aliexpress.com/token
换取access_token请求参数说明 |
|||
名称 |
是否必选 |
参数值 |
参数释义 |
client_id |
必选 |
|
等同于AppKey,创建应用时获得。 |
client_secret |
必选 |
|
等同于AppSecret,创建应用时获得。 |
grant_type |
必选 |
authorization_code |
授权类型 ,值为authorization_code |
code |
必选 |
|
上一步获取code得到 |
redirect_uri |
必选 |
|
可填写应用注册时回调地址域名。redirect_uri指的是应用发起请求时,所传的回调地址参数,在用户授权后应用会跳转至redirect_uri。要求与应用注册时填写的回调地址域名一致或顶级域名一致 。 |
sp |
必选 |
ae |
接口提供方,固定为ae |
state |
可选 |
|
可自定义,如1212等;维持应用的状态,传入值与返回值保持一致。 |
view |
可选 |
web,可选web、tmall或wap其中一种,默认为web。 |
web对应PC端(淘宝logo)浏览器页面样式;tmall对应天猫的浏览器页面样式;wap对应无线端的浏览器页面样式。 |
换取access_token返回值示例
{ "refresh_token": "5000***HHk1", "w1_valid": 1559008461793, "refresh_token_valid_time": 1527472460769, "w2_valid": 1527474260769, "user_id": "706388888", "expire_time": 1559008461793, "r2_valid": 1527731660769, "locale": "zh_CN", "r1_valid": 1559008461793, "sp": "ae", "user_nick": "cn10001234" } |
换取access_token返回参数说明 |
|||
Key |
类型 |
示例 |
说明 |
access_token |
string |
2YotnFZFEjr1zCsicMWpAA |
Access token |
expires_time |
number |
1559008461793 |
Access token过期时间(Unix时间戳,单位是毫秒) |
refresh_token |
string |
2YotnFZFEjr1zCsicMWpAA |
Refresh token,很多时候一生成就已经失效 |
refresh_token_valid_time |
number |
1527472460769 |
Refresh token过期时间(Unix时间戳,单位是毫秒) |
r1_valid |
number |
1559008461793 |
r1级别API或字段的访问过期时间(Unix时间戳,单位是毫秒) |
r2_valid |
number |
1559008461793 |
r2级别API或字段的访问过期时间(Unix时间戳,单位是毫秒) |
w1_valid |
number |
1559008461793 |
w1级别API或字段的访问过期时间(Unix时间戳,单位是毫秒) |
w2_valid |
number |
1559008461793 |
w2级别API或字段的访问过期时间(Unix时间戳,单位是毫秒) |
user_nick |
string |
cn10001234 |
AE账号 |
user_id |
string |
706388888 |
AE帐号对应的账号id(havanaId),外部用户可以忽略这个字段 |
locale |
string |
zh_CN |
地区 |
sp |
string |
ae |
接口提供方,固定为ae |
二、Client-side flow
客户端应用授权方式,适合ISV没有独立的web Server,但是能够借助浏览器或者JS脚本访问授权服务器的应用。
1、请求入口地址
正式环境:https://oauth.aliexpress.com/authorize
2、授权操作步骤
以正式环境获取acccess_token为例说明。
同时在授权过程中client_id等参数需要根据自己创建应用的实际数据给予替换,否则无法完成授权。
下图为Client-side flow 授权方式流程图,以下按流程图逐步详细说明
1)拼接授权url
https://oauth.aliexpress.com/authorize?response_type=token&client_id=23075594&state=1212&view=web&sp=ae
参数说明 |
|||
名称 |
是否必选 |
参数值 |
参数释义 |
client_id |
必选 |
|
等同于appkey,创建应用时获得。 |
response_type |
必选 |
token |
授权类型 ,值为token。 |
sp |
必选 |
ae |
接口提供方,固定为ae |
state |
可选 |
可自定义,如1212等; |
维持应用的状态,传入值与返回值保持一致。 |
view |
可选 |
web,可选web、tmall或wap其中一种,默认为web。 |
web对应PC端(淘宝logo)浏览器页面样式;tmall对应天猫的浏览器页面样式;wap对应无线端的浏览器页面样式。 |
2)导用户登录授权
这一步同Server-side flow授权方式,引导用户访问授权url 进行授权,如下。
3)获取access_token
此处上图页面点授权后,TOP会直接将access_token 返回到淘宝默认页面(和 Server-side flow 先返回code 再换access_token方式不同)此时可使用JS脚本(if(window.location.hash!=""){alert(window.location.hash)})可以获取回调页面#后面的字段,从而获取到访问令牌。
返回参数示例:
https://oauth.aliexpress.com/oauth2?view=web#access_token=6101227f5e8c230696ac93a77b3de7daacb154c6ad98106263664221&token_type=Bearer&expires_in=86400&refresh_token=6100627e3f9202c0960a6ab5bfd704939c91635892c70dd263664221&re_expires_in=86400&r1_expires_in=86400&r2_expires_in=86400&user_id=263664221&user_nick=%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717&w1_expires_in=86400&w2_expires_in=86400&state=1212&top_sign=3429C556FCD3F3FC52547DD31021592F
注:
此处参数返回除 top_sign 外,同Server-side flow授权返回参数相同,这里不再详细描述,具体可参考 Server-side flow 里面的说明。
top_sign 是系统生成签名参数,使用 Client-side flow 方式授权需要对该参数进行一致性验证。
4) 验证授权签名
即验证返回参数和 top_sign 是否一致。如上返回参数中,把井号之后除 top_sign外所有key和value按照参数的首字母顺序排列,以 key1+value+key2+value....的方式拼接在一起,再在其前后加上的AppSecret(假设AppSecret=69a1469a1469a1469a14a9bf269a14),然后转成utf-8编码,接着进行md5加密,最后全部转大写即可。
md5(utf-8:AppSecret+k1+v1+k2+v2+...+kn+vn + AppSecret)。
如以下返回参数,取 # 号之后的参数进行拼接并首尾加上AppSecret后得到如下结果:
69a1469a1469a1469a14a9bf269a14access_token6101227f5e8c230696ac93a77b3de7daacb154c6ad98106263664221token_typeBearer
expires_in86400refresh_token6100627e3f9202c0960a6ab5bfd704939c91635892c70dd263664221re_expires_in86400r1_expires_in86400
r2expires_in86400user_id263664221user_nick%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717w1_expires_in86400&w2_expires_in86400&state121269a1469a1469a1469a14a9bf269a14
进行md5加密(参考API调用示例代码)并转化成大写后得到:3429C556FCD3F3FC52547DD31021592F ,和top_sign 一致。
三、子帐号授权
主帐号登录新版卖家后台首页: sellercenter.aliexpress.com/seller/index.htm ,然后 账号及认证 -> 子账号管理-> 进行子账号授权操作。
授权完毕后,子帐号登录新版卖家后台可以看到有权限登录的第三方应用。点击图标即可登录使用。
(如果看不到我订购的服务请点击体验新版)。
如果子账号登录出现:代码【biz-auth.mainaccount-unauth-subaccount.invalid】,提示【mainaccount not auth subAccount】。这是主帐号没给子账号设置权限。请主账号登录新版卖家后台设置。
退出登录
退出流程目前只支持web访问,起到的作用是清除aliexpress.com的cookie,并取消用户的授权。
一、请求入口地址
1、正式环境:https://login.aliexpress.com
二、退出操作步骤
登录后,选择“Sign Out”按钮并点击退出登录
相关说明
一、授权时长说明
授权获得的 access_token 有效时长(expires_in )和标签类型(如IT工具、商家后台系统等)、状态(如正式环境、上线等)相关如下。
注:实际api 调用时,对应用授权时长做了更精确的控制,具体可参考(二、安全等级说明);另像“第三方IT工具”类应用开发上线后都是发布在marketplace.seller.aliexpress.com上,卖家需要订购使用,相应授权时长会和订购时长相同,如购买1个月,则取得的access_token有效时长1个月。
标签名称 |
正式环境测试 |
上线运行中 |
备注 |
第三方IT工具 |
24小时 |
同订购时长 |
申请参考这里 |
商家后台系统 |
24小时 |
固定时长1年 |
申请参考这里 |
服务商后台系统 |
24小时 |
同订购时长 |
申请参考这里 |
店铺模块前台 |
无session |
无session |
已停止接入 |
店铺模块后台 |
24小时 |
同订购时长 |
已停止接入 |
新业务 |
24小时 |
固定时长1个月 |
不开放 |
无线买家应用 |
24小时 |
24小时 |
已停止接入 |
xTao合作网站 |
24小时 |
24小时 |
已停止接入 |
二、安全等级说明
为了更加灵活的对AE开放平台开放的数据进行安全管控, 降低用户数据泄露或者被恶意修改的风险,推出了安全等级的概念。
AE开放平台对API(或者API字段)及应用分别打了r1、r2、w1、w2 和 0,1,2,3四种安全级别的标记。与 r1、r2、w1、w2对应的是在access token(session key)颁发时增加了4个过期时间:r1_expires_in、r2_expires_in、w1_expires_in、w2_expires_in。这4个值分别用来表示此access token 调用各级别API(或字段)的有效期,如下:(受安全等级限制的应用有:第三方IT工具这类应用;自用型卖家应用暂不受影响。)
安全等级 |
API级别 |
正式环境测试 |
上线运行中 |
是否可刷新 |
Refresh刷新时长 |
3级 |
R1 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
3级 |
R2 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
3级 |
W1 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
3级 |
W2 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
2级 |
R1 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
2级 |
R2 |
24小时 |
72小时 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
2级 |
W1 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
2级 |
W2 |
30分钟 |
30分钟 |
否 |
|
1级 |
R1 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
1级 |
R2 |
24小时 |
24小时 |
否 |
|
1级 |
W1 |
24小时 |
同订购时长 |
是 |
已上线应用与订购时长一致,正式环境测试24小时有效 |
1级 |
W2 |
5分钟 |
5分钟 |
否 |
|
0级 |
R1 |
30分钟 |
30分钟 |
否 |
|
0级 |
R2 |
0分钟 |
0分钟 |
否 |
|
0级 |
W1 |
30分钟 |
30分钟 |
否 |
|
0级 |
W2 |
0分钟 |
0分钟 |
否 |
|
示例代码
一、获取access_token示例
示例代码均基于sdk实现,sdk下载及使用参考 说明。
1、JAVA 示例
import java.io.IOException; props.put("sp","ae"); |
2、PHP 示例
<?php 'sp'=>'ae', |
3、.NET 示例
pout.Add("sp", "ae"); |
二、refresh_token刷新示例
方式1:
以下为基于sdk的java示例,其它语言可参考token获取方法,是类似的,同时测试时,需把test参数换成自己应用实际对应的值。
import java.io.IOException; props.put("sp","ae"); |
以上把responseJson 转化为对象,或者直接从里面提取access_token字段以及新的刷新令牌
refresh_token返回结果内容示例
{ |
常见问题
1、授权获取token时,appkey是已传入,仍报:client_id is empty 错误?
授权另一关键参数client_secret错误,会导报该错误,重点检查
2、是否一定需要沙箱先进行授权测试?
AE开发平台不支持沙箱测试
3、授权更多问题及错误码参考:查看
4、用户授权时长是否需要刷新?
不需要刷新,具体每种卖家类型的授权时长参考:查看