コード例 #1
0
        public async Task ExecuteRequestAsync_ThrowsException_Fail()
        {
            // Request
            var url            = "http://localhost:8080/x";
            var method         = HttpMethod.GET;
            var requestContent = "Test";
            var requestHeaders = new Dictionary <string, string>
            {
                ["X-Custom-Header"] = "123",
            };
            var request = new MercadoPagoRequest(url, method, requestHeaders, requestContent);

            // Mock
            var httpClientMock = new HttpClientMock();

            httpClientMock.MockRequestError(
                url,
                System.Net.Http.HttpMethod.Get,
                new Exception());

            var httpClient    = new DefaultHttpClient(httpClientMock.HttpClient);
            var retryStrategy = new DefaultRetryStrategy(1);
            await Assert.ThrowsAsync <Exception>(() =>
                                                 httpClient.SendAsync(request, retryStrategy, default));
        }
コード例 #2
0
        private async Task <TResponse> SendAsync <TResponse>(
            string path,
            HttpMethod httpMethod,
            object request,
            RequestOptions requestOptions,
            CancellationToken cancellationToken)
            where TResponse : IResource, new()
        {
            MercadoPagoResponse response;

            requestOptions = BuildRequestOptions(requestOptions);

            try
            {
                MercadoPagoRequest mercadoPagoRequest = await BuildRequestAsync(
                    path,
                    httpMethod,
                    request,
                    requestOptions);

                response = await HttpClient.SendAsync(
                    mercadoPagoRequest,
                    requestOptions.RetryStrategy,
                    cancellationToken).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                throw new MercadoPagoException(ex);
            }

            return(ParseResponse <TResponse>(response));
        }
コード例 #3
0
        public async Task ExecuteRequestAsync_AllParameters_Success()
        {
            // Request
            var url            = "http://localhost:8080/x";
            var method         = HttpMethod.GET;
            var requestContent = "Test";
            var requestHeaders = new Dictionary <string, string>
            {
                ["X-Custom-Header"] = "123",
            };
            var request = new MercadoPagoRequest(url, method, requestHeaders, requestContent);

            // Response
            var responseStatusCode = HttpStatusCode.OK;
            var responseContent    = "OK";
            var httpResponse       = new HttpResponseMessage(responseStatusCode)
            {
                Content = new StringContent(responseContent),
            };

            httpResponse.Headers.Add("X-Custom-Response-Header", "456");

            // Mock
            var httpClientMock = new HttpClientMock();

            httpClientMock.MockRequest(url, System.Net.Http.HttpMethod.Get, httpResponse);

            var httpClient               = new DefaultHttpClient(httpClientMock.HttpClient);
            var retryStrategy            = new DefaultRetryStrategy(0);
            MercadoPagoResponse response =
                await httpClient.SendAsync(request, retryStrategy, default);

            Assert.Equal((int)responseStatusCode, response.StatusCode);
            Assert.Equal(responseContent, response.Content);
        }
コード例 #4
0
 private static void AddIdempotencyKey(MercadoPagoRequest mercadoPagoRequest, object request)
 {
     if (mercadoPagoRequest.Method == HttpMethod.Post)
     {
         if (request is IdempotentRequest)
         {
             mercadoPagoRequest.Headers.Add(Headers.IdempotencyKey, IdempotentRequest.CreateIdempotencyKey());
         }
     }
 }
コード例 #5
0
 private void AddIdempotencyKey(MercadoPagoRequest mercadoPagoRequest, object request)
 {
     if (mercadoPagoRequest.Method == HttpMethod.POST)
     {
         bool headerHasIdempotencyKey = mercadoPagoRequest.ContainsHeader(Headers.IDEMPOTENCY_KEY);
         if (request is IdempotentRequest idempotentRequest && !headerHasIdempotencyKey)
         {
             mercadoPagoRequest.Headers.Add(Headers.IDEMPOTENCY_KEY, idempotentRequest.CreateIdempotencyKey());
         }
     }
 }
コード例 #6
0
        private MercadoPagoRequest BuildRequest(
            string path,
            HttpMethod httpMethod,
            RequestOptions requestOptions)
        {
            var mercadoPagoRequest = new MercadoPagoRequest
            {
                Url    = $"{MercadoPagoConfig.BaseUrl}{path}",
                Method = httpMethod,
            };

            AddRequestHeaders(path, mercadoPagoRequest, requestOptions);

            return(mercadoPagoRequest);
        }
コード例 #7
0
        public async Task <MercadoPagoResponse> MercadoPago(MercadoPagoRequest mercadoPago)
        {
            XDocument xml = new XDocument(
                new XElement("paymentmp",
                             new XElement("pago",
                                          new XElement("aplicacion", mercadoPago.aplicacion),
                                          new XElement("codigoreferencia", mercadoPago.codigoreferencia),
                                          new XElement("descripcion", mercadoPago.descripcion),
                                          new XElement("monto", mercadoPago.monto)
                                          )));
            MERCADOPAGOResponse response = await new ws_lolimsaservicesSoapPortClient().MERCADOPAGOAsync(xml.ToString());

            return(new MercadoPagoResponse {
                url = response.Result
            });
        }
コード例 #8
0
        private void AddRequestHeaders(
            string path,
            MercadoPagoRequest mercadoPagoRequest,
            RequestOptions requestOptions)
        {
            foreach (var header in DefaultHeaders)
            {
                mercadoPagoRequest.Headers.Add(header);
            }

            path = path ?? string.Empty;
            if (!path.Equals("/oauth/token", StringComparison.InvariantCultureIgnoreCase))
            {
                mercadoPagoRequest.Headers.Add(Headers.AUTHORIZATION, $"Bearer {requestOptions.AccessToken}");
            }

            if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.CorporationId))
            {
                mercadoPagoRequest.Headers.Add(Headers.CORPORATION_ID, MercadoPagoConfig.CorporationId);
            }

            if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.IntegratorId))
            {
                mercadoPagoRequest.Headers.Add(Headers.INTEGRATOR_ID, MercadoPagoConfig.IntegratorId);
            }

            if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.PlatformId))
            {
                mercadoPagoRequest.Headers.Add(Headers.PLATFORM_ID, MercadoPagoConfig.PlatformId);
            }

            foreach (var header in requestOptions.CustomHeaders)
            {
                if (!mercadoPagoRequest.Headers.ContainsKey(header.Key) &&
                    !Headers.CONTENT_TYPE.Equals(header.Key, StringComparison.InvariantCultureIgnoreCase))
                {
                    mercadoPagoRequest.Headers.Add(header);
                }
            }
        }
コード例 #9
0
        private void AddRequestHeaders(
            string path,
            MercadoPagoRequest mercadoPagoRequest,
            RequestOptions requestOptions)
        {
            foreach (var header in DefaultHeaders)
            {
                mercadoPagoRequest.Headers.Add(header);
            }

            path ??= string.Empty;
            if (!path.Equals("/oauth/token", StringComparison.InvariantCultureIgnoreCase))
            {
                mercadoPagoRequest.Headers.Add(Headers.Authorization, $"Bearer {requestOptions.AccessToken}");
            }

            if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.CorporationId))
            {
                mercadoPagoRequest.Headers.Add(Headers.CorporationId, MercadoPagoConfig.CorporationId);
            }

            if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.IntegratorId))
            {
                mercadoPagoRequest.Headers.Add(Headers.IntegratorId, MercadoPagoConfig.IntegratorId);
            }

            if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.PlatformId))
            {
                mercadoPagoRequest.Headers.Add(Headers.PlatformId, MercadoPagoConfig.PlatformId);
            }

            foreach (var header in requestOptions.CustomHeaders)
            {
                if (!mercadoPagoRequest.Headers.ContainsKey(header.Key) &&
                    !Headers.ContentType.Equals(header.Key, StringComparison.InvariantCultureIgnoreCase))
                {
                    mercadoPagoRequest.Headers.Add(header);
                }
            }
        }
コード例 #10
0
        public async Task ExecuteRequestAsync_WithOperationCanceledExceptionRetry_Success()
        {
            // Request
            var url            = "http://localhost:8080/x";
            var method         = HttpMethod.GET;
            var requestContent = "Test";
            var requestHeaders = new Dictionary <string, string>
            {
                ["X-Custom-Header"] = "123",
            };
            var request = new MercadoPagoRequest(url, method, requestHeaders, requestContent);

            // Response
            var responseStatusCode = HttpStatusCode.OK;
            var responseContent    = "OK";
            var finalHttpResponse  = new HttpResponseMessage(responseStatusCode)
            {
                Content = new StringContent(responseContent),
            };

            // Mock
            var httpClientMock = new HttpClientMock();

            httpClientMock.MockRequest(
                url,
                System.Net.Http.HttpMethod.Get,
                (setupReturns) =>
                setupReturns
                .ThrowsAsync(new OperationCanceledException())
                .ReturnsAsync(finalHttpResponse));

            var httpClient               = new DefaultHttpClient(httpClientMock.HttpClient);
            var retryStrategy            = new DefaultRetryStrategy(1);
            MercadoPagoResponse response =
                await httpClient.SendAsync(request, retryStrategy, default);

            Assert.Equal((int)responseStatusCode, response.StatusCode);
            Assert.Equal(responseContent, response.Content);
        }