Trustpilot Api - Get Private Product Review всегда возвращает статус несанкционированного ответа - PullRequest
2 голосов
/ 29 октября 2019

Я надеюсь, что кто-то может мне помочь.

Я пытаюсь получить обзор продукта для продукта, использующего 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 # в качестве языка для доступа к API Trustpilot, поэтому следующие фрагменты показывают, как я пытался вызвать метод.

  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 - Unauthorized.

В документации указано, что я должен передать apikey (что я сделал двумя разными способами).

Я также попытался вызвать конечную точку, заменив ?apikey={apiKey} на ?token={token} в случае, если документацияневерно и требует токен.

Кроме того, я также попытался передать токен как значение RequestHeader и получить тот же результат (неавторизованный)

Я действительно хотел бы использовать конечную точку:

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

так как это возвращает больше информации (например, sku, которое позволило бы мне получить доступ к продукту).

Может кто-нибудь сказать мне, где я иду не так?

Спасибо вавансовый

1 Ответ

5 голосов
/ 30 октября 2019

Документация для конечной точки /v1/private/product-reviews/{reviewId} действительно неверна , поскольку для нее требуется Business 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.

EDIT : документация для конечной точки /v1/private/product-reviews/{reviewId} было исправлено . Не означает, что требуется Business user OAuth Token.

...