TourIAm/TIAMWebApp/Server/Services/SumupService.cs

124 lines
4.8 KiB
C#

using AyCode.Core.Loggers;
using AyCode.Services.Loggers;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using TIAM.Core.Loggers;
using TIAMWebApp.Shared.Application.Models.ClientSide.Payment;
using TIAMWebApp.Shared.Application.Services;
using TIAMWebApp.Shared.Application.Utility;
namespace TIAMWebApp.Server.Services
{
public class SumupService
{
private readonly HttpClient _httpClient;
private readonly TIAM.Core.Loggers.ILogger _logger;
private readonly string _clientId;
private readonly string _clientSecret;
public SumupService(HttpClient httpClient, string clientId, string clientSecret, IEnumerable<IAcLogWriterBase> logWriters)
{
_httpClient = httpClient;
_clientId = clientId;
_clientSecret = clientSecret;
_logger = new TIAM.Core.Loggers.Logger<SumupService>(logWriters.ToArray());
}
public async Task<string> GetAccessTokenAsync()
{
var authToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{_clientId}:{_clientSecret}"));
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authToken);
var requestContent = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded");
var response = await _httpClient.PostAsync("https://api.sumup.com/token", requestContent);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
var tokenResponse = JsonSerializer.Deserialize<SumUpTokenResponse>(responseContent);
return tokenResponse.AccessToken;
}
public async Task<string> CreatePaymentLinkAsync(SumupPaymentRequest paymentRequest)
{
var accessToken = await GetAccessTokenAsync();
//_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "sup_sk_0rt9IFrMpE9qA6328vqMwCtiCntRXZxGR");
var requestContent = new StringContent(JsonSerializer.Serialize(paymentRequest), Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync("https://api.sumup.com/v0.1/checkouts", requestContent);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
var paymentResponse = JsonSerializer.Deserialize<PaymentResponse>(responseContent);
return paymentResponse.CheckoutUrl;
}
public async Task<PaymentResponse> CreateCheckout(SumupPaymentRequest request)
{
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = new LowercaseNamingPolicy(),
PropertyNameCaseInsensitive = true // To ensure deserialization works regardless of case
};
var checkoutRequest = new HttpRequestMessage(HttpMethod.Post, "https://api.sumup.com/v0.1/checkouts");
checkoutRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "sup_sk_0rt9IFrMpE9qA6328vqMwCtiCntRXZxGR");
var kvaanyad = JsonSerializer.Serialize(request, options);
_logger.Detail($"Request json: {kvaanyad}");
checkoutRequest.Content = new StringContent(kvaanyad, Encoding.UTF8, "application/json");
_logger.Detail($"Request content: { await checkoutRequest.Content.ReadAsStringAsync()}");
var response = await _httpClient.SendAsync(checkoutRequest);
_logger.Detail(await response.Content.ReadAsStringAsync());
if (response.IsSuccessStatusCode)
{
var jsonResponse = await response.Content.ReadAsStringAsync();
var bleh = response.Content.ToString();
var valami = JsonSerializer.Deserialize<PaymentResponse>(jsonResponse);
return valami;
}
var errorResponse = await response.Content.ReadAsStringAsync();
throw new Exception($"Unable to create checkout. Response: {errorResponse}");
}
}
public class SumUpTokenResponse
{
[JsonPropertyName("access_token")]
public string AccessToken { get; set; }
}
// SumUpService.cs (continued)
public class PaymentResponse
{
[JsonPropertyName("checkout_url")]
public string CheckoutUrl { get; set; }
}
public class LowercaseNamingPolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
{
return name.ToLowerInvariant();
}
}
}