using eprintServer.Responses; using System.Net.Http.Json; namespace eprintServer.Services; public class ThawaniServices { private readonly OAuthSettingsService _settingsService; private readonly HttpClient _httpClient; public ThawaniServices(OAuthSettingsService settingsService, HttpClient httpClient) { _settingsService = settingsService; _httpClient = httpClient; } public async Task InitiatePayment(object payload) { var settings = await _settingsService.GetOrCreateSettingsAsync(); // Validate required attributes for API call if (string.IsNullOrWhiteSpace(settings.ThawaniRoot) || string.IsNullOrWhiteSpace(settings.ThawaniApiKey)) { throw new Exception("Thawani configuration error: Root URL or API Key is missing in settings."); } var url = $"{settings.ThawaniRoot.TrimEnd('/')}/api/v1/checkout/session"; var request = new HttpRequestMessage(HttpMethod.Post, url); request.Headers.Add("thawani-api-key", settings.ThawaniApiKey); request.Content = JsonContent.Create(payload); var response = await _httpClient.SendAsync(request); var result = await response.Content.ReadFromJsonAsync(); if (result != null && result.Success) return result.Data.SessionId; throw new Exception($"Thawani Error: {result?.Description ?? "Unknown error during session initiation"}"); } public async Task BuildRedirectUrl(string sessionId) { var settings = await _settingsService.GetOrCreateSettingsAsync(); if (settings == null) { throw new Exception("Thawani configuration not found in the database."); } // 2. Check if the specific attributes are null or just empty spaces if (string.IsNullOrWhiteSpace(settings.ThawaniCheckoutModelUrl) || string.IsNullOrWhiteSpace(settings.ThawaniPublicKey)) { throw new Exception("Thawani configuration is incomplete: Checkout URL or Public Key is missing."); } var baseUrl = settings.ThawaniCheckoutModelUrl.Trim().TrimEnd('/'); var publicKey = settings.ThawaniPublicKey.Trim(); // Standard Thawani format (UAT often uses /checkout/ instead of /pay/) return $"{baseUrl}/pay/{sessionId}?key={publicKey}"; } public async Task GetSession(string sessionId) { var settings = await _settingsService.GetOrCreateSettingsAsync(); if (string.IsNullOrWhiteSpace(settings.ThawaniRoot) || string.IsNullOrWhiteSpace(settings.ThawaniApiKey)) { throw new Exception("Thawani configuration error: Root URL or API Key is missing."); } // URL: https://uatcheckout.thawani.om/api/v1/checkout/session/{sessionId} var url = $"{settings.ThawaniRoot.TrimEnd('/')}/api/v1/checkout/session/{sessionId}"; var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Add("thawani-api-key", settings.ThawaniApiKey); var response = await _httpClient.SendAsync(request); if (!response.IsSuccessStatusCode) { return null; } return await response.Content.ReadFromJsonAsync(); } }