Exemplo n.º 1
0
        public async Task <InitiatePaymentResponseOk> InitiatePayment(Order order, VippsSettings vippsSettings)
        {
            _logger.LogInformation($"*** Creating Vipps payemnt for order {order.Id}");
            var PaymentUrl = "/ecomm/v2/payments";

            var client = _httpClientFactory.CreateClient();

            client.BaseAddress = new Uri(vippsSettings.ApiBaseUrl);
            HttpResponseMessage response = new HttpResponseMessage();
            HttpRequestMessage  request  = new HttpRequestMessage(HttpMethod.Post, PaymentUrl);

            var token = await GetAccessToken(vippsSettings);

            request.Headers.Add("Authorization", $"Bearer {token.AccessToken}");
            request.Headers.Add("Merchant-Serial-Number", "210066");
            request.Headers.Add("Ocp-Apim-Subscription-Key", vippsSettings.SubscriptionKey);


            var init = new InitateVippsPayment
            {
                CustomerInfo = new CustomerInfo
                {
                    MobileNumber = order.Customer.Phone
                },
                MerchantInfo = new MerchantInfo()
                {
                    CallbackPrefix       = vippsSettings.CallbackBaseUrl,
                    FallBack             = vippsSettings.RedirectUrl,
                    MerchantSerialNumber = vippsSettings.MerchantSerialNumber,
                    AuthToken            = order.PaymentProviderToken
                },
                Transaction = new Transaction()
                {
                    Amount          = (int)(order.OrderTotalprice * 100),
                    OrderId         = order.Id.ToString(),
                    TransactionText = vippsSettings.TransactionText
                }
            };

            request.Content = new StringContent(
                JsonSerializer.Serialize(init, vippsJsonOptions),
                Encoding.UTF8,
                "application/json");

            var payRequest = await client.SendAsync(request);

            if (!payRequest.IsSuccessStatusCode)
            {
                var error = await payRequest.Content.ReadAsStringAsync();

                throw new HttpRequestException(error);
            }
            var payResponse = await payRequest.Content.ReadAsStringAsync();


            var result = JsonSerializer.Deserialize <InitiatePaymentResponseOk>(payResponse, vippsJsonOptions);

            return(result);
        }
Exemplo n.º 2
0
        public async Task <CapturePaymentResponseOk> CapturePayment(Order order, VippsSettings vippsSettings)
        {
            _logger.LogInformation($"*** Vipps Api Client: Capturing payemnt for order {order.Id}");

            var CaptureUrl = $"/ecomm/v2/payments/{order.Id}/capture";

            // TODO Save this request id?
            var requestId = Guid.NewGuid().ToString();

            var client = _httpClientFactory.CreateClient();

            client.BaseAddress = new Uri(vippsSettings.ApiBaseUrl);
            HttpResponseMessage response = new HttpResponseMessage();
            HttpRequestMessage  request  = new HttpRequestMessage(HttpMethod.Post, CaptureUrl);

            var token = await GetAccessToken(vippsSettings);

            request.Headers.Add("Authorization", $"Bearer {token.AccessToken}");
            request.Headers.Add("Merchant-Serial-Number", vippsSettings.MerchantSerialNumber);
            request.Headers.Add("Ocp-Apim-Subscription-Key", vippsSettings.SubscriptionKey);
            request.Headers.Add("X-Request-Id", requestId);

            var capture = new CapturePaymentRequest
            {
                MerchantInfo = new CapturePaymentMerchantInfo
                {
                    MerchantSerialNumber = vippsSettings.MerchantSerialNumber
                },
                Transaction = new CapturePaymentTransaction
                {
                    Amount          = (int)(order.OrderTotalprice * 100),
                    TransactionText = vippsSettings.TransactionText
                }
            };

            request.Content = new StringContent(
                JsonSerializer.Serialize(capture, vippsJsonOptions),
                Encoding.UTF8,
                "application/json");

            var captureRequest = await client.SendAsync(request);

            var captureResponse = await captureRequest.Content.ReadAsStringAsync();

            var result = JsonSerializer.Deserialize <CapturePaymentResponseOk>(captureResponse, vippsJsonOptions);

            return(result);
        }
Exemplo n.º 3
0
        private async Task <VippsAccessTokenResponse> GetAccessToken(VippsSettings vippsSettings)
        {
            _logger.LogInformation("*** Request access token from Vipps");
            var client = _httpClientFactory.CreateClient();

            client.BaseAddress = new Uri(vippsSettings.ApiBaseUrl);

            HttpResponseMessage response = new HttpResponseMessage();
            HttpRequestMessage  request  = new HttpRequestMessage(HttpMethod.Post, "/accesstoken/get");

            request.Headers.Add("client_id", vippsSettings.ClientId);
            request.Headers.Add("client_secret", vippsSettings.ClientSecret);
            request.Headers.Add("Ocp-Apim-Subscription-Key", vippsSettings.SubscriptionKey);

            response = await client.SendAsync(request);

            var responseContent = await response.Content.ReadAsStringAsync();

            VippsAccessTokenResponse token = JsonSerializer.Deserialize <VippsAccessTokenResponse>(responseContent);

            _accessToken = token;

            return(token);
        }