api - Trustpilot Api - 获取私有(private)产品评论始终返回未经授权的响应状态

标签 api review unauthorized trustpilot

希望有人能帮助我。

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

我采取的方法如下:

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

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

    (ii) 调用开发者.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 值传递到端点。

  • 按如下方式设置端点:
  • 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 - 未经授权。

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

    我还尝试调用端点,将 ?apikey={apiKey} 替换为 ?token={token} ,以防文档不正确并且需要 token 。

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

    我真的很想使用端点:

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

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

    谁能告诉我我哪里出了问题吗?

    提前致谢

    最佳答案

    /v1/private/product-reviews/{reviewId} 端点的文档确实不正确,因为它实际上需要业务用户 OAuth token 而不是 API key

    在本例中,您有 two options (以及您之前用于 /v1/private/business-units/{businessUnitId}/reviews 端点的第一个):

    1. 您可以在查询字符串中传递访问 token :/v1/private/product-reviews/{reviewId}?token={token}。你提到你已经尝试过这个。也许它对您不起作用,因为您的 token 在您尝试此方法之前已过期。您可以在 refreshing the token 之后重试吗? ?
    2. 您还可以将访问 token 作为 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)端点(路径中具有 /private/ 的端点)都需要业务用户 OAuth token

    编辑:/v1/private/product-reviews/{reviewId}端点的文档has been fixed 。现在它显示需要业务用户 OAuth token

    关于api - Trustpilot Api - 获取私有(private)产品评论始终返回未经授权的响应状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608776/

    相关文章:

    android - Kotlin改型预期为begin_array,但在第1行为begin_object

    java - Spring REST URI 存在检查

    git - 在没有 pull 请求的情况下对整个项目进行代码审查

    asp.net-mvc - ASP.Net MVC 中仅允许匿名的属性

    api - Google Directions API 的替代品

    javascript - 使用其 url 生成 youtube 视频的嵌入代码

    ios - 拒绝应用程序后解释 nm 输出

    django - Django 或任何其他 Python 框架中的开源客户评论系统

    ios - 如何在任何操作系统攻击的情况下保护 iOS 应用程序(在越狱设备上)

    jquery - ajax 请求中出现未经授权的结果