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); }
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); }
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); }