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 logWriters) { _httpClient = httpClient; _clientId = clientId; _clientSecret = clientSecret; _logger = new TIAM.Core.Loggers.Logger(logWriters.ToArray()); } public async Task 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(responseContent); return tokenResponse.AccessToken; } public async Task 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(responseContent); return paymentResponse.CheckoutUrl; } public async Task 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(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(); } } }