2在AWS里面创建IAM用户,这里的用户将会用于亚马逊后台创建应用程序中使用
填写用户名后选择编程使用
策略是给用户开通权限,不同的策略代表了不同的权限,根据实际自行选择,这里为了简单选择直接使用现有策略,选择管理员访问AdministratorAccess
审核之后创建账户,点击下载.csv,下载的文件一定要保存、保存、保存好,只会让下载一次,忘记了就需要重新添加账户
点击新创建的用户
复制出用户 ARN(亚马逊后台创建应用程序中使用此处的ARN)
注意亚马逊卖家后台应用程序可以使用用户ARN也可以使用角色ARN 3 亚马逊后台填写开发人员资料(注意防关联)点击转至"开发人员资料"
第一次进入这个页面会特别慢,需要等好久才可以显示,特别是使用内部的浏览器的时候,大概需要等个3分钟页面才会显示
数据访问最好选用对外公开,亚马逊对2022年04月25日以后创建的私有开发者做出了限制,(无法进行网站授权)因为本人公司是18年注册的所以是选择的私人开发者,后续可能需要根据亚马逊政策做出调整(转成公共开发者)4创建新的app客户端(注意防关联)
5授权
销售伙伴可以使用下列其中一个工作流程授权您的应用程序:
1.1. Marketplace Appstore workflow从商城应用商店详情页面启动的 OAuth 授权工作流程。 1.2. Website workflow(推荐使用)
从您自己的网站启动的 OAuth 授权工作流程。 1.3. 自行授权(仅限店铺本身为开发者)
我采取的是开发者店铺自授权,其他店铺网站授权的方式
授权成功后得到刷新令牌 REFRESH_TOKEN(拿到令牌代表可以访问API拿到此店铺数据)
有其他店铺的需要
登录其他店铺卖家后台之后在网址输入授权url(注意每个店铺都应该在其独立IP登录防止店铺关联)
没登录后台会提示要登录
构建授权URL
applicationID为应用程序ID ,state值是自定义的 , version=beta代表应用程序为草稿状态不加这个会使应用转为发布状态
在网址栏输入授权链接后跳出授权页面,如果是登录状态直接勾选后确认就行了(下图为未登录状态)
确认之后亚马逊会重定向一个URL、返回的URL构造为如下所示:
将链接中spapi相关值记录下来(后面要用) 以下操作需要在授权五分钟内完成,过期需要重新授权打开PostMan,headers添加
Content-Type:application/x-www-form-urlencoded;charset=UTF-8 Host:api.amazon.com 替换body中的code值为上面获取的SPAPI相关的值 CLIENT_ID,CLIENT_SECRET值是LWA凭证账号与密码(在开发者中心里的应用程序处查看)如下图所示
拿到此处返回的REFRESH_TOKEN就代表完成了该店铺的授权 6JAVA测试SPAPI(需要SDK)SDK获取方式很多,网上官网都有
测试订单
public class OrdersV0ApiTest {
private static final String ROLE_ARN = "arn:aws:iam::xxx";
private static final String APP_CLIENT_ID = "amzn1.application-oa2xxxx";
private static final Strin APP_CLIENT_SECRET="1da61e15dff9a0775d903ec62ae58a360cxxxxx";
private static final String REFRESH_TOKEN="Atzr|IwEBIBmcR1mFuQa1Wrsmwhwe420CQ-KCRuzMQnQHG0MDS1E-SpSwrYwKEWeneYPTRDpo-k6emzGRPxLtZeimyuQ6RnvGuQSyKsvzsZcTsDM-jZJPe9_3ihPWxON15oAoXzva-PYMbXN-CEd4YROn_dhP9u36y5jhzmpO2ovV5w0AYFU9A7-8IyOAhxxx";
private static final String USER_ACCESS_KEY_ID = "AKIAWNxxx;
private static final String USER_SECRET_ACCESS_KE = "TFvcpdabWcDELCvDHUWZuXFAVZfixx";
@Test
public void getOrdersTest() throws ApiException {
//配置AWS凭据提供程序
AWSAuthenticationCredentialsProvider awsAuthenticationCredentialsProvider = AWSAuthenticationCredentialsProvider.builder()
//创建IAM职权的时候会生成这个ARN
.roleArn(ROLE_ARN)
//唯一值,可以使用UUID
.roleSessionName(getRandomNonce())
.build();
//配置AWS身份验证凭据 注意这个地方的region分北美,欧洲,远东三个AWS区域
AWSAuthenticationCredentials awsAuthenticationCredentials = AWSAuthenticationCredentials.builder()
//注册成为开发者时生成的AWS访问密钥ID
.accessKeyId(USER_ACCESS_KEY_ID)
//注册成为开发者时生成的AWS访问密钥
.secretKey(USER_SECRET_ACCESS_KEY)
//注意,这里的region分北美(us-east-1),欧洲(eu-west-1),远东(us-west-2)
.region("us-east-1")
.build();
//配置您的LWA凭据
LWAAuthorizationCredentials lwaAuthorizationCredentials = LWAAuthorizationCredentials.builder()
//查看开发者信息的时候可看到LWA的客户端编码
.clientId(APP_CLIENT_ID)
//查看开发者信息的时候可看到LWA的客户端秘钥
.clientSecret(APP_CLIENT_SECRET)
//根据上面的客户端编码和客户端秘钥请求客户端令牌
.refreshToken(REFRESH_TOKEN)
.endpoint("https://api.amazon.com/auth/o2/token")
.build();
OrdersV0Api ordersV0Api = new OrdersV0Api.Builder()
.awsAuthenticationCredentialsProvider(awsAuthenticationCredentialsProvider)
.lwaAuthorizationCredentials(lwaAuthorizationCredentials)
.awsAuthenticationCredentials(awsAuthenticationCredentials)
//注意,这里的endpoint分北美,欧洲,远东三个地域,每个区域的链接是不一样的
//北美,https://sellingpartnerapi-na.amazon.com
//欧洲,https://sellingpartnerapi-eu.amazon.com
//远东,https://sellingpartnerapi-fe.amazon.com
.endpoint("https://sellingpartnerapi-na.amazon.com")
.build();
System.out.println("开始请求接口");
GetOrderResponse order = ordersV0Api.getOrder("111-5635427-1344245");
String responseStr = JSON.createGson().create().toJson(order);
System.out.println("响应结束,响应数据为:" + responseStr);
}
private String getRandomNonce() {
return UUID.randomUUID().toString().replace("-", "");
}
}



