目录
1.1. Marketplace Appstore workflow
OAUTH_LOGIN_URI & OAUTH_REDIRECT_URI
4. Marketplace Appstore workflow
Step 3. The seller signs into your website
对接亚马逊 SP-API(Selling Partner API) 第三章:对接 SDK
1. 授权销售伙伴 API 应用程序
销售伙伴可以使用下列其中一个工作流程授权您的应用程序:
1.1. Marketplace Appstore workflow
从商城应用商店详情页面启动的 OAuth 授权工作流程。
1.2. Website workflow(推荐使用)
从您自己的网站启动的 OAuth 授权工作流程。
1.3. 自行授权(仅限店铺本身为开发者)
获取 Refresh token
2. 全局变量(后续将会使用绿色加粗字体表示)
AMAZON_ENDPOINT
Selling region | Endpoint |
---|---|
North America (Canada, US, Mexico, and Brazil marketplaces) | Amazon |
Europe (Spain, UK, France, Netherlands, Germany, Italy, Sweden, Poland, Turkey, U.A.E, and India marketplaces) | https://sellercentral-europe.amazon.com |
Far East (Singapore, Australia, and Japan marketplaces) | 日本:Amazon 备注:其他区域我没帐号了。不能提供准确的 endpoint。 这个应该跟亚马逊后台的域名是一致的。 |
APPLICATION_ID
OAUTH_LOGIN_URI & OAUTH_REDIRECT_URI
关于这两个我有句MMP一定要讲!这两个是可以随便填,但是要保证域名是一样的。不能是下图。(这个地方花了我两天时间!!!)并且是https开头的。

CLIENT_ID & CLIENT_SECRET
3. OAuth authorization URIs
构建授权链接,让各个店铺去登录这个链接完成授权。
链接结构如下:
{AMAZON_ENDPOINT}/apps/authorize/consent?{APPLICATION_ID}
Example:
注意要点
3.1. 每个亚马逊区域都需要一个单独的授权链接。
3.2. 如果是测试,链接需要加上 version=beta,且应用程序必须为草稿状态。
4. Marketplace Appstore workflow
Step 1. The seller initiates authorization from the Marketplace Appstore
这个我没找到【Authorize Now】按钮在哪里和有什么作用.. --> 答案见评论。
Step 2. The seller consents to authorize your application
Request
3. OAuth authorization URIs 拼接的链接
授权页面如下:
Response
{OAUTH_LOGIN_URI}/?amazon_callback_uri={amazon_callback_uri}&amazon_state={amazon_state}&version=beta&selling_partner_id={selling_partner_id}
参数 | 描述 |
---|---|
amazon_callback_uri | 用于将浏览器重定向到亚马逊的 URI。 |
amazon_state | 亚马逊生成的状态值,用于防范跨站点请求伪造攻击。 |
selling_partner_id | 授权您的应用程序的卖家的卖家编号。 |
Step 3. The seller signs into your website
Step 4. Amazon sends you the authorization information
step 3 和 step 4 似乎是一套的,分别解释了请求和相应的格式。
Request
{amazon_callback_uri}?redirect_uri={OAUTH_REDIRECT_URI}&amazon_state={amazon_state}&state={随机码}&version=beta
Response
{OAUTH_REDIRECT_URI}?spapi_oauth_code={spapi_oauth_code}&state={你传的state是什么,接收的就是什么}&selling_partner_id={selling_partner_id}
参数 | 描述 |
---|---|
state | 您在上一步中传递的状态值。 |
selling_partner_id | 授权您的应用程序的卖家的卖家编号。 |
mws_auth_token | 不一定会有。您在为调用亚马逊商城网络服务创建查询字符串时使用的 MWSAuthToken 值。只有当卖家授权混合销售伙伴 API 应用程序时,才会传递 mws_auth_token 参数。 |
spapi_oauth_code | 您用来交换 LWA 刷新令牌的“使用亚马逊账户登录”(LWA) 授权码。 |
BUG 合集
1. 每次请求的时候都会一闪而过这个页面,然后才报错。我一度以为是我手速不够快,超过了15秒去点击 click reconfirm 的链接导致授权失败。
实际上,这个页面仅表示授权进行到这一步,并且卡在授权这个地方而已。
下面两个 Error Code 的问题,我是通过文档的 Issues 得出的解决方案,仅供参考。
issues 里面提到的 case,如果不是自己开的是无法查看的。(不用费心思找了)
2. MD5100
这个似乎是 OAUTH_LOGIN_URI 和 OAUTH_REDIRECT_URI 填的时候,LOGIN的域名不在 REDIRECT中才出现的。
3. MD9999
BUG 可能原因:application 的 IAM RAM 填成用户的。
这个似乎是你已经激活了校验,但是实际上并没有得到相应的返回值。
至于判断激活了校验的依据是:可以看到 App & Service --> manage your apps 里面的状态变成了 active。
4. MD1000
Step 5. Your application exchanges the LWA authorization code for an LWA refresh token
cURL
POST /auth/o2/token HTTP/l.l Host: api.amazon.com Content-Type: application/x-www-form-urlencoded;charset=UTF-8 grant_type=authorization_code&code={spapi_oauth_code}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}
参数 | 描述 |
---|---|
grant_type | 请求的访问授权类型。必须是 authorization_code。 |
code | 您在Step 4. Amazon sends you the authorization information中收到的 LWA 授权码。即 {spapi_oauth_code} |
redirect_uri | 您的应用程序的重定向 URI。(可选) |
client_id | {CLIENT_ID} |
client_secret | {CLIENT_SECRET} |
Response
{ "access_token": "Atza|qwert", "token_type": "bearer", "expires_in": 3600, "refresh_token": "Atzr|asdfg" }
参数 | 描述 |
---|---|
access_token | 授权您的应用程序代表卖家采取某些操作的令牌。 |
token_type | 返回的令牌类型。应该是 bearer。 |
expires_in | 访问令牌失效之前的秒数。(1小时有效期) |
refresh_token | (必须保存)可以交换为新访问令牌的长期令牌。(access_token 过期后,可以刷新出新的 access_token) |
BUG 合集
1. The request has an invalid grant parameter : code
大概率是code 过期了。好像是 5 分钟的有效期?
5. Website workflow
Step 0. Set up an "Authorize" button
按区域(三个)的不同添加按钮。重定向的链接是 3. OAuth authorization URIs
Step 1. The seller initiates authorization from your website
Step 2. The seller consents to authorize the application
Step 3. Amazon sends you the authorization information
Step 1-3 解释
Request
3. OAuth authorization URIs 拼接的链接并且添加 state 状态值(随机生成即可)
Reponse
{OAUTH_REDIRECT_URI}?spapi_oauth_code={spapi_oauth_code}&state={你传的state是什么,接收的就是什么}&selling_partner_id={selling_partner_id}
Step 4. Your application exchanges the LWA authorization code for a LWA refresh token
同 Marketplace Appstore workflow 的 Step 5。
6. Self authorization
6.1. 应用商店 --> 开发应用程序
6.2. 生成刷新令牌
每次点击按钮都会生成一个新的令牌。
总结
1. 获取 refresh_token 的方式有三种。店铺授权、网站授权和自行授权。自行授权需要店铺本身是开发者。
2. 对比店铺授权和网站授权。
网站授权方式会简单一点。相对店铺授权来说少一次操作。后续对多个帐号的授权情况,网站授权会方便很多。
两种方式授权的实际效果暂时不知道有什么区别。
3. 流程设计:使用【网站授权】
3.1. LWA Application OAUTH_REDIRECT_URI 设计成自己的接口。
3.2. 让运营将店铺的 seller id(selling_partner_id) 维护到系统中。并自动拼接 OAuth authorization URIs。
3.3. 在 OAUTH_REDIRECT_URI 接口中根据 spapi_oauth_code 直接请求 refresh_token。并根据 selling_partner_id 将 refresh_token 更新到相应的记录中。
3.4. 这样运营就只需要到亚马逊后台登录帐号即可完成授权操作。