0

试图从特定产品中获取 Trustpilot 评论,但无处可去。

可以成功获得令牌,但随后的评论:

ApiKey 是相同的获取令牌所以不明白为什么在这里不起作用。在绝望的尝试中将令牌添加到 url (?token={token}) 并且也没有成功。

sku 集合包括所有变体。也尝试不使用 sku 参数,但没有检索到任何内容。

这是代码:

            var ApiKey = "ApiKey";
            var SecretKey = "SecretKey";
            var Username = "Username";
            var Password = "Password";

            var serverUrl = "xxx.xxx.xxx.xxx";

            var BusinnessUnit = "BusinnessUnit";

            var AuthUrl2 = "https://api.trustpilot.com/v1/oauth/oauth-business-users-for-applications/accesstoken";
            var ReviewUrl = "https://api.trustpilot.com/v1/private/product-reviews/business-units/"+ bkBusinnessUnit + "/reviews";
            var ProductReviewUrl = "https://api.trustpilot.com/v1/product-reviews/business-units/" + bkBusinnessUnit + "/reviews";

            var token = "";

            // get token
            using (var httpClient = new HttpClient())
            {
                try
                {
                    httpClient.BaseAddress = new Uri(AuthUrl2);

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                    var authString = ApiKey + ":" + SecretKey;
                    string encodedStr = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", encodedStr);

                    var stringPayload = "grant_type=password&username=" + Username + "&password=" + Password;

                    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(AuthUrl2, httpContent).Result;

                    var accessTokenResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

                    var accessTokenResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(accessTokenResponseString);

                    token = accessTokenResponseObject.AccessToken;
                    Console.WriteLine("Token retrieved. " + token);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed!" + ex.ToString());
                }
            }

            // get product reviews
            using (var httpClient = new HttpClient())
            {
                try
                {
                    httpClient.BaseAddress = new Uri(ProductReviewUrl);

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                    var authString = ApiKey + ":" + SecretKey;
                    string encodedStr = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", encodedStr);

                    var stringPayload = "sku=SK40132-BLK-6,SK40132-BLK-8,SK40132-BLK-10,SK40132-BLK-12,SK40132-BLK-14,SK40132-BLK-16,SK40132-BLK-18&token=" + token;

                    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(ProductReviewUrl, httpContent).Result;

                    var reviewResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

                    var reviewResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(reviewResponseString);

                    Console.WriteLine(reviewResponseObject + "Product review retrieved." + reviewResponseString);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed!" + ex.ToString());
                }
            }

            // get reviews
            using (var httpClient = new HttpClient())
            {
                try
                {
                    httpClient.BaseAddress = new Uri(ReviewUrl);

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

                    var stringPayload = "sku=SK40132-BLK-6,SK40132-BLK-8,SK40132-BLK-10,SK40132-BLK-12,SK40132-BLK-14,SK40132-BLK-16,SK40132-BLK-18";

                    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(ReviewUrl, httpContent).Result;

                    var reviewResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

                    var reviewResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(reviewResponseString);

                    Console.WriteLine(reviewResponseObject + "Review retrieved." + reviewResponseString);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed!" + ex.ToString());
                }
            }

4

2 回答 2

1

/v1/private/product-reviews/business-units/{businessUnitId}/reviews端点需要令牌。它可以通过标题或查询参数提供。它对你有用,因为你做得对。

/v1/product-reviews/business-units/{businessUnitId}/reviews端点只需要 apikey。您可以通过两种方式传递它:

  • 通过标题

    httpClient.DefaultRequestHeaders.Accept.Add("apikey", ApiKey);

  • 通过查询参数

    var stringPayload = "sku=SK40132-BLK-6,SK40132-BLK-8,SK40132-BLK-10,SK40132-BLK-12,SK40132-BLK-14,SK40132-BLK-16,SK40132-BLK-18&apikey=" +密钥;

于 2021-04-14T09:13:49.267 回答
0

非常简单,它应该是 GetAsync 而不是 PostAsync。

无论如何,感谢您查看它。

于 2021-05-10T16:45:11.930 回答