教程:使用适用于 Node.js 的 JavaScript SDK 自动调用 SP-API
借助“使用亚马逊账户登录” (LWA) 令牌交换和身份验证,自动执行 SP-API 调用。
本教程为您提供为 Node.js 生成带有使用亚马逊账户登录 (LWA) 令牌交换和身份验证功能的 JavaScript SDK 所需的所有详细信息,以便您无缝构建应用程序。您将了解为 Node.js 构建 JavaScript SDK 所需的前提条件,并查看使用销售伙伴 API(面向卖家)和 Swagger 代码生成器的示例。
Node.js 的 SP-API JavaScript SDK 是针对与亚马逊的销售伙伴 API 进行服务器端集成而专门设计。本教程涵盖集成和进行 SP-API 调用,侧重于实际应用,以便您可以直接在服务器端流程中执行 API 调用并集成亚马逊的商城功能。
教程
以下教程将帮助您为 Node.js 设置自己的 JavaScript SDK,以实现 SP-API 调用的自动化。
先决条件
要完成本教程,您需要满足以下前提条件:
- 处于草稿或发布状态的混合或 SP-API 应用
- 集成开发环境 (IDE) 软件
- Java 版本 7 或更高版本
swagger-codegen-cli-2.4.29
- Node.js v18 或更高版本
请注意
您必须使用
swagger-codegen-cli-2.4.29
。如果您使用除 2.4.29 之外的其他swagger-codegen-cli
版本,SDK 生成将失败。使用错误的版本可能会在集成过程中引发更大的问题。
在您的应用程序可以连接到销售伙伴 API 之前,您必须对其进行注册,并且它必须获得销售伙伴的授权。如果您没有混合或 SP-API 应用,请按照注册为开发者、注册您的应用程序和授权销售伙伴 API 应用程序步骤进行操作。然后,返回到本教程。
接下来,为教程设置工作区。
第 1 步:设置工作区
-
在您的本地驱动器上,为此项目创建一个目录,命名为 SPAPI_JavaScript_SDK,然后导航到新目录。
mkdir SPAPI_JavaScript_SDK cd SPAPI_JavaScript_SDK -
下载以下工具。
- IDE 软件(本逐步指南使用的是 Windows 操作系统上的 Visual Studio IDE)
- GNU Wget
- Java 版本 7 或更高版本
-
运行以下命令下载 Swagger 代码生成器:
wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.29/swagger-codegen-cli-2.4.29.jar -
使用以下命令获取文件并更改权限以使其可执行。
chmod 744 swagger-codegen-cli-2.4.29.jar -
将
swagger-codegen-cli.jar
复制到您的本地目录C:\\SPAPI_JavaScript_SDK
中。 -
在 GitHub 上,转到
https://github.com/amzn/selling-partner-api-models/tree/main/models
并使用以下命令将selling-partner-api-models
存储库克隆到本地目录C:\\SPAPI_JavaScript_SDK
。git clone https://github.com/amzn/selling-partner-api-models现在您已完成所需的设置,下一步是使用
sellingpartner-api-javascript
文件夹中提供的身份验证和授权类,为 Node.js 生成 JavaScript SDK。
第 2 步:生成带有 LWA 令牌交换和身份验证功能的 Node.js JavaScript SDK
导航到 SellingPartnerAPISdkJavaScriptNode/src
目录。在 src
目录中找到 generate-js-sdk.sh shell
脚本文件。在命令行中运行以下脚本:
cd SellingPartnerAPISdkJavaScriptNode/src
./generate-js-sdk.sh -j ../../swagger-codegen-cli-2.4.29.jar
现在,您可以在包根目录中查看分别包含 API 模型和 JavaScript SDK 的 models
和 sdk
目录。
此文件夹提供了帮助类,用于为亚马逊销售伙伴 API 生成访问令牌。它旨在与通过 Swagger Codegen 和 RestSharp 库生成的销售伙伴 API 客户端库一起使用。此外,它也可以集成到自定义项目中。
第 3 步:创建一个本地 npm 包
打包您的 SDK 以便在多个本地项目中使用,而无需将 SDK 发布到公共 npm 注册表。
-
打开
package.json
文件,并添加以下内容以确保package.json
正确设置以包含必要的目录:"files": [ "src/helper/", "sdk/" ]此步骤确保只有指定的目录及其内容(例如,
src/helper/
和sdk/
)被包含在包中,而其他内容则被忽略。 -
在您的终端或命令提示符中导航到
SellingPartnerAPISdkJavaScriptNode
目录。 -
运行以下命令创建包:
npm pack此命令会在您的项目目录中创建一个名为
amzn-testsellingpartnerjavascriptapilwalib-1.0.0.tgz
或类似名称的 tarball(TGZ 文件),具体名称基于您的包的名称和版本。它包含您项目中的所有必要文件,从而有效地创建了一个可以像任何已发布的 npm 包一样安装的本地包。
第 4 步:使用本地 npm 包创建一个新项目
现在,您可以创建一个使用本地 npm 包的新项目。通过这种方式,您可以在与最终开发者将遇到的环境类似的环境中测试 SDK。
-
输入以下命令为新项目创建一个新目录。此示例假设您的当前目录是
SellingPartnerAPISdkJavaScriptNode/src
:cd ../../ mkdir MyNewSPAPIProject cd MyNewSPAPIProject -
设置一个新的 Node.js 项目以确保环境干净。
npm init -y -
按照提示初始化您的新项目。如果默认选项符合您的偏好,请接受默认选项。
-
在此新项目中,安装您在第 3 步:创建本地 npm 包中创建的本地 npm 包。对于以下命令,请将占位符
../SellingPartnerAPISdkJavaScriptNode/amzn-testsellingpartnerjavascriptapilwalib-1.0.0.tgz
替换为您的 TGZ 文件的实际路径。这一步至关重要,因为它模拟了其他开发者如何将您的 SDK 集成到他们的项目中。npm install ../SellingPartnerAPISdkJavaScriptNode/amzn-testsellingpartnerjavascriptapilwalib-1.0.0.tgz注意
根据您的当前工作目录,
.tgz
文件的路径可以是绝对路径或相对路径。例如,如果您的.tgz
文件在SellingPartnerAPISdkJavaScriptNode
目录中,则命令为npm install ../SellingPartnerAPISdkJavaScriptNode/amzn-testsellingpartnerjavascriptapilwalib-1.0.0.tgz
。完成这些步骤后,您的包将作为依赖项列在新项目的
package.json
中,您可以像平常一样导入功能。
第 5 步:使用生成的 Node.js 的 JavaScript SDK 连接到销售伙伴 API
设置好身份验证后,您现在就可以与 SP-API 端点进行交互。
-
将您的 LWA 凭证存储在项目根目录内的
app.config.mjs
文件中。touch app.config.mjs -
在
app.config.mjs
中按如下方式定义您的凭证:export const AppConfig = { lwaClientId: "< LWA client ID >", lwaClientSecret: "< LWA client secret >", lwaRefreshToken: "< LWA refresh token >", }小心
切勿将此文件提交到版本控制系统中,因为它包含敏感信息。请确保这些 LWA 凭证以加密格式安全存储。
-
在项目根目录中创建一个名为
index.js
的新文件,并插入以下脚本,该脚本会启动对特定 SP-API 端点的调用,并将响应记录到控制台。touch index.js -
将以下内容复制并粘贴到
index.js
中:import { AppConfig } from './app.config.mjs'; import { LwaAuthClient } from '@amzn/testsellingpartnerjavascriptapilwalib/src/helper/LwaAuthClient.mjs'; import { SellersApi, ApiClient as SellersApiClient, } from '@amzn/testsellingpartnerjavascriptapilwalib/sdk/src/sellers/index.js'; (async () => { const lwaClient = new LwaAuthClient( AppConfig.lwaClientId, AppConfig.lwaClientSecret, AppConfig.lwaRefreshToken ); const sellerApiClient = new SellersApiClient( 'https://sellingpartnerapi-fe.amazon.com' ); const sellerApi = new SellersApi(sellerApiClient); sellerApiClient.applyXAmzAccessTokenToRequest( await lwaClient.getAccessToken() ); const participations = await sellerApi.getMarketplaceParticipations(); console.log( JSON.stringify(participations, null, ' ') + '\n**********************************' ); })(); -
运行脚本:在终端或命令提示符中运行以下命令,以启动对卖家 API 端点的 GET 请求:
node index.js此命令将运行您的脚本,启动 API 调用,并在控制台中显示结果。
预期输出:
{ "payload": [ { "marketplace": { "id": "xxxxx", "countryCode": "JP", "name": "Amazon.co.jp", "defaultCurrencyCode": "JPY", "defaultLanguageCode": "ja_JP", "domainName": "www.amazon.jp“ }, "participation": { "isParticipating": true, "hasSuspendedListings": false } } ] }
Updated 23 days ago