亚马逊SP-API对接-网站授权
-
亚马逊sp-api文档地址:https://developer-docs.amazon.com/sp-api
-
授权:
SCPN授权
1.我们发起授权操作
2.销售合作伙伴审核并同意我们的请求,并回调我们系统,并添加以下查询参数:amazon_callback_uri amazon_state selling_partner_id(销售合作伙伴ID)
3.我们系统处理完毕重定向到亚马逊接口 携带参数 redirect_uri amazon_state state
4.亚马逊处理后重定向回我们系统(注册应用程序时指定的第一个) 并添加参数spapi_oauth_code
5.我们系统处理完成,spapi_oauth_code参数通过https://api.amazon.com/auth/o2/token 换取 access_token
6.后续操作api使用access_token
网页授权
1.我们的系统设置一个授权按钮,销售合作伙伴点击按钮
2.我们的系统重定向到亚马逊登录系统并携带参数redirect_uri,state
3.销售合作伙伴登录成功后,亚马逊回通过redirect_uri 携带的路径并拼接参数state,selling_partner_id,mws_auth_token,spapi_oauth_code 回调我们系统
4.我们系统处理完成,spapi_oauth_code参数通过https://api.amazon.com/auth/o2/token 换取 access_token
5.后续操作api使用access_token
自我授权
1.销售合作伙伴去亚马逊页面选择要授权的用户,同意授权之后,会生成访问令牌spapi_oauth_code
2.线下给到我们,spapi_oauth_code参数通过https://api.amazon.com/auth/o2/token 换取 access_token
3.后续操作api使用access_token -
网页授权步骤
按钮跳转地址:https://sellercentral.amazon.com/apps/authorize/consent?application_id=[appid]&state=[我们系统生成]&redirect_uri=[回调地址]
亚马逊回调地址:https://[回调地址]?state=[我们系统生成]&selling_partner_id=[销售合作伙伴ID]&spapi_oauth_code=[换取刷新token的code]
处理spapi_oauth_code:通过参数spapi_oauth_code调用https://api.amazon.com/auth/o2/token 换取 refresh_token
保存数据: 由于access_token有时效性,所以此次只保存refresh_token
注:[回调地址]在亚马逊平台配置,默认会通过application_id去检索回调地址。也可以在按钮跳转地址加入redirect_uri参数去指定
调用代码:
public Map getRefreshToken(String spapi_oauth_code, RestTemplate restTemplate) {
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
headers.add("Host","api.amazon.com");
String param= "grant_type=authorization_code&code="+spapi_oauth_code+"&client_id=xxxx&client_secret=xxx";
HttpEntity httpEntity = new HttpEntity<>(param, headers);
logger.error("授权请求参数:{}{}",JsonUtil.objectToString(headers),param);
ResponseEntity<Map> response = restTemplate.postForEntity("https://api.amazon.com/auth/o2/token", httpEntity, Map.class);
Map body = response.getBody();
body.put("param",param);
logger.debug("授权返回参数:{}",JsonUtil.objectToString(body));
return body;
}
- 总结:本次授权是合作伙伴授权给我们,授权成功后,我们能够拿到合作伙伴的数据。此次文档仅供参考