sdk

software.amazon.spapi 官方sdk使用

发布于 2025-10-17 16:33:33

software.amazon.spapi 官方提供的sdk如何使用已知的accessToken?

查看更多

关注者
0
被浏览
99
1 个回答
Alex
Alex 2025-10-20
10年跨境老兵(微信:sfgoods),熟悉主流平台(Amazon Ebay 速卖通 Shopee Lazada),欢迎交流~

官方 SDK 并不强制你用 refresh_token 去换 token——如果你手里已经有一个仍然有效的 LWA access_token,只要把它放进请求头 x-amz-access-token 即可;这是官方文档现在推荐的做法(最近文档里甚至给了“不带签名、只带 header”的示例)

下面给你两条常见路径,按需选:

方案 A:直接用 HTTP(最省事)

curl "https://sellingpartnerapi-na.amazon.com/sellers/v1/marketplaceParticipations" \
  -H "x-amz-access-token: Atza|<你的token>" \
  -H "user-agent: MyApp/1.0 (Language=CLI)" \
  -H "x-amz-date: 20250101T120000Z"
官方“Connect to the SP-API”页面明确列出要加的头,示例也展示了不带签名、只带 x-amz-access-token 的请求。注意 token 有效期约 1 小时。

方案 B:仍然用官方 SDK,但给底层 HTTP 客户端统一加默认头

不同语言的官方 SDK 都是基于 OpenAPI 生成的客户端,底层一般都有“默认请求头/拦截器”的注入点。思路是:x-amz-access-token 当成普通自定义头塞进去即可。

Java(OkHttp 拦截器)

import okhttp3.*;
import com.amazon.spapi.client.*;   // 你的生成包名可能不同
import com.amazon.spapi.api.SellersApi;

String accessToken = "Atza|...";
ApiClient client = new ApiClient();
OkHttpClient http = client.getHttpClient().newBuilder()
  .addInterceptor(chain -> {
    Request req = chain.request().newBuilder()
      .header("x-amz-access-token", accessToken)
      .header("user-agent", "MyApp/1.0 (Language=Java)")
      .build();
    return chain.proceed(req);
  }).build();
client.setHttpClient(http);
client.setBasePath("https://sellingpartnerapi-na.amazon.com");

SellersApi api = new SellersApi(client);
var res = api.getMarketplaceParticipations();
官方 Java 教程默认演示用 refresh_token 让 SDK 自己换 token;但如果你已持有 access_token,也可以像上面这样直接注入 header 使用。(developer-docs.amazon.com)

C#(RestSharp/Configuration 默认头)

using Amazon.SellingPartnerAPIAA.Client; // 你的命名空间可能不同
using Amazon.SellingPartnerAPIAA.Api;

var cfg = new Configuration { BasePath = "https://sellingpartnerapi-na.amazon.com" };
cfg.AddDefaultHeader("x-amz-access-token", "Atza|...");
cfg.UserAgent = "MyApp/1.0 (Language=C#)";

var api = new SellersApi(cfg);
var res = api.GetMarketplaceParticipations();
C# 的生成客户端通常支持在 Configuration/RestClient 上添加默认头;把 token 放进 x-amz-access-token 即可。官方“生产调用”页面也列出必需的几个头部。

Python(ApiClient 默认头)

from spapi_client import Configuration, ApiClient, SellersApi  # 你的包名/类名可能不同

cfg = Configuration()
cfg.host = "https://sellingpartnerapi-na.amazon.com"
api_client = ApiClient(cfg)
api_client.set_default_header("x-amz-access-token", "Atza|...")
api_client.set_default_header("user-agent", "MyApp/1.0 (Language=Python)")

api = SellersApi(api_client)
res = api.get_marketplace_participations()
Python 的生成客户端一般提供 set_default_header 或可直接修改 default_headers 添加自定义头。

Node/JS(直接 fetch;或在 SDK 的请求钩子里加头)

const r = await fetch(
  "https://sellingpartnerapi-na.amazon.com/sellers/v1/marketplaceParticipations",
  {
    headers: {
      "x-amz-access-token": "Atza|...",
      "user-agent": "MyApp/1.0 (Language=Node)",
      "x-amz-date": "20250101T120000Z",
    },
  }
);
const data = await r.json();
官方文档与 Postman 教程都明确需要把 access_tokenx-amz-access-token 传入(有时文档里也能看到旧写法 x-amzn-access-token,本质一致)。

重要注意

  • RDT 场景:访问带 PII 的“受限接口”时,不用 LWA access_token,而是先用 Tokens API 换 RDT,然后仍然把 RDT 放在 x-amz-access-token 头里。
  • 有效期:LWA access_token 通常有效 1 小时,过期会 401;如果你有 refresh_token,让 SDK 代换会更省心。

撰写答案

请登录后再发布答案,点击登录

发布
问题

公众
平台

最新资讯发布

分享
好友