Trustpilot Api-“获得私有产品评论”始终返回未经授权的响应状态

时间:2019-10-29 13:50:33

标签: api review unauthorized trustpilot

我希望有人能帮助我。

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

我采用的方法如下:

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

    (i)每个产品评论都有元链接,因此我可以使用相应的元链接并在api标签上标记apikey来获得产品评论。 https://api.trustpilot.com/v1/reviews/1234567890abcdefg?apikey={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-未经授权。

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

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

此外,我还尝试过将令牌作为RequestHeader值传递,并接收相同的结果(未经身份验证)

我真的很想使用端点:

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

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

有人可以告诉我我在哪里错吗?

预先感谢

1 个答案:

答案 0 :(得分:5)

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

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

  1. 您可以在查询字符串/v1/private/product-reviews/{reviewId}?token={token}中传递访问令牌。您提到您已经尝试过了。也许它对您不起作用,因为您的令牌在尝试这种方法之前就过期了。您可以在refreshing the 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}端点has been fixed的文档。现在显示Business user OAuth Token是必需的。