2

我希望有一个人可以帮助我。

我正在尝试使用 Trustpilot Api 检索产品的产品评论,并且取得了一些成功,但没有得到我期望的结果。

我采取的方法如下:

  1. 获取 OAUTH2 令牌 - (返回成功响应)
  2. 从配置文件中检索我的业务部门,并为每个业务部门使用端点获取产品评论:-(https://api.trustpilot.com/v1/private/business-units/{business-unit}/review?token={OAUTH2 token from step 1}返回成功响应)
  3. 对于每个产品评论,我都会尝试检索产品评论详细信息。为此,我有几个选择。

    (i) 每个产品评论都有元链接,因此我可以使用相应的元链接获取产品评论并标记 apikey,例如https://api.trustpilot.com/v1/reviews/1234567890abcdefg?apikey={apikey},apikey 是我注册开发者帐户时提供的那个 - (返回成功回复)

    (ii) 按照 developers.trustpilot.api 网站 ( https://developers.trustpilot.com/product-reviews-api#get-private-product-review ) 中记录的方式调用端点:https://api.trustpilot.com/v1/private/product-reviews/{reviewId}- (返回未授权状态代码)

对于上面的选项(ii),我尝试了多种传递 apikey 的方法(根据文档,端点需要 apikey 作为授权。

我使用 C# 作为访问 Trustpilot api 的语言,因此以下片段是我尝试调用该方法的方式。

  1. 如下设置 GetProductReview 端点:
    var url = $"https://api.trustpilot.com/v1/private/product-reviews/" + review.Id.ToString();        
    using (var client = new HttpClient())
    {
       var uri = new Uri(url, UriKind.Absolute);
       client.BaseAddress = uri;

       client.DefaultRequestHeaders.Clear();
       client.DefaultRequestHeaders.Accept.Add(new system.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
       client.DefaultRequestHeaders.Add("apikey", apiKey);

       try
       {
         var response = client.GetAsync(uri).Result;
             .
             .
             .

在上面的代码片段中,apikey 被传递给方法,并作为 RequestHeader 值传递给端点。

  1. 如下设置端点:
var url = $"https://api.trustpilot.com/v1/private/product-reviews/" + review.Id + $"?apikey={apiKey}";

并按如下方式调用 HttpClient:

  using (var client = new HttpClient())
  {
    var uri = new Uri(url, UriKind.Absolute);
    client.BaseAddress = uri;

    client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    try
    {
      var response = client.GetAsync(uri).Result;
          .
          .
          .

在这两种情况下,我都会收到 HttpStatus 401 - Unauthorized。

文档表明我应该通过 apikey(我以两种不同的方式完成了)。

如果文档不正确并且需要令牌,我还尝试调用端点?apikey={apiKey}替换?token={token}

此外,我还尝试将令牌作为 RequestHeader 值传递并收到相同的结果(未授权)

我真的很想使用端点:

https://api.trustpilot.com/v1/private/product-reviews/{review}

因为这会返回更多信息(例如,允许我重新访问产品的 sku)。

谁能告诉我这里哪里出错了?

提前致谢

4

1 回答 1

5

端点的文档/v1/private/product-reviews/{reviewId}确实不正确,因为它实际上需要 aBusiness user OAuth Token而不是API Key.

在这种情况下,您有两个选项(以及您之前用于/v1/private/business-units/{businessUnitId}/reviews端点的第一个选项):

  1. 您可以在查询字符串中传递访问令牌:/v1/private/product-reviews/{reviewId}?token={token}。你提到你已经尝试过了。也许它对您不起作用,因为您的令牌在您尝试这种方法之前已过期。刷新令牌后可以重试吗?
  2. 您还可以将访问令牌作为Bearer authorization header

    var url = $"https://api.trustpilot.com/v1/private/product-reviews/{review.Id.ToString()}";        
    using (var client = new HttpClient())
    {
        ...
    
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
        ...
    }
    

无论如何,您在文档中发现了一个应该尽快修复的错误。根据经验,所有私有端点(/private/路径中的端点)都需要一个Business user OAuth Token.

编辑/v1/private/product-reviews/{reviewId}端点的文档已修复。现在它表明 aBusiness user OAuth Token是必需的。

于 2019-10-30T00:29:02.253 回答