我正在尝试连接到亚马逊的 Selling Partner API 以请求和检索报告。按照他们的指导,我创建并配置了 IAM 策略,注册并自行授权了我的应用程序,并且能够使用我的客户端信息和刷新令牌检索访问代码。
然后,我使用 CryptoJS 成功地对我的请求进行了哈希处理,并能够生成 aws4 签名。
但是,当我使用 fetch() 向端点发送“发布”请求时,https://sellingpartnerapi-eu.amazon.com/reports/2020-09-04/reports
我收到 cors 错误:
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
如果我在请求中包含 'mode': 'no-cors',则不会在标头中发送 'x-amz-access-token'。
我无法弄清楚为什么我的 fetch() 请求可用于检索访问代码:
const getAuth = () => {
fetch('https://api.amazon.com/auth/o2/token', {
method: 'post',
headers: {
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
body: `grant_type=refresh_token&refresh_token=${refreshToken}&client_id=${clientId}&client_secret=${clientSecret}`
})
.then...
...但不创建报告。
const createReport = (accessToken, signature) => {
fetch('https://sellingpartnerapi-eu.amazon.com/reports/2020-09-04/reports?reportType=GET_MERCHANT_LISTINGS_DATA_LITER&MarketplaceId=A1F83G8C2ARO7P', {
method: 'post',
headers: {
'Authorization': `AWS4-HMAC-SHA256 Credential=${accessKey}/${credentialScope}, SignedHeaders=host;x-amz-access-token;x-amz-date;user-agent, Signature=${signature}`,
'host': 'sellingpartnerapi-eu.amazon.com',
'x-amz-access-token': accessToken,
'x-amz-date': amzDate,
'user-agent': 'Stock Levels/1.0 (Language=Javascript;)'
}
}).then...
此外,SP-API 文档要求在请求中发送“主机”和“用户代理”标头,但我的理解是两者都不允许。
这是 JavaScript 的限制吗?我应该寻找一种替代语言来发送这些请求吗?
对这位新手开发人员的任何帮助将不胜感激!
谢谢
担
[createReport] https://github.com/amzn/ sell-partner-api-docs/blob/main/references/reports-api/reports_2020-09-04.md#createreport