C# SP-API 为 getReportDocument 提供签名错误,但它适用于其他方法

C# SP-API giving error of signature for getReportDocument but it works fine for other methods

我正在使用 C# Amazon SP-API 库,我已经使用 swagger codegen 转换了 C# 包装器 类,所有这些都可以很好地处理定价以及报告中的一些功能 API .

但是当我尝试调用 getReportDocument 时,它给出了 AWS 签名不匹配的错误。

https://github.com/amzn/selling-partner-api-docs/blob/main/references/reports-api/reports_2020-09-04.md#getreportdocument

如果你能确认只有像GetOrder,GetReport这样通过id调用单品时出现问题,而且你使用的是亚马逊提供的Amazon.SellingPartnerAPIAA.csproj签名,那么很有可能是AWSSigV4Signer.CreateCanonicalRequest方法使用段占位符而不是 id 本身对 url 进行签名。

例如“/reports/2021-06-30/documents/{reportDocumentId}”而不是“/reports/2021-06-30/documents/0356cf79-b8b0-4226-b4b9-0ee058ea5760” 一种可能的解决方案是在调用 ExtractCanonicalURIParameters

之前“手动”解析 url
foreach(var par in restRequest.Parameters)
{
   if(restRequest.Resource.Contains($"{{{par.Name}}}"))
   {
        restRequest.Resource = restRequest.Resource.Replace($"{{{par.Name}}}", par.Value.ToString());
   }
}

//CanonicalURI
canonicalizedRequest.AppendFormat("{0}\n", AwsSignerHelper.ExtractCanonicalURIParameters(restRequest.Resource));