using System.Net.Http; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using MTWorkHR.Application.Services.Interfaces; using Newtonsoft.Json; public class AmazonPayService: IAmazonPayService { private readonly HttpClient _httpClient; private readonly string _merchantId; private readonly string _accessKey; private readonly string _secretKey; private readonly string _region; private readonly bool _sandbox; public AmazonPayService(IConfiguration configuration, HttpClient httpClient) { _httpClient = httpClient; _merchantId = configuration["AmazonPay:MerchantId"]; _accessKey = configuration["AmazonPay:AccessKey"]; _secretKey = configuration["AmazonPay:SecretKey"]; _region = configuration["AmazonPay:Region"]; _sandbox = configuration.GetValue("AmazonPay:Sandbox"); } public async Task CreateCheckoutSessionAsync(decimal amount, string currencyCode) { var baseUrl = _sandbox ? "https://pay-api.amazon.com/sandbox" : "https://pay-api.amazon.com"; var endpoint = $"{baseUrl}/{_region}/checkout-sessions"; var payload = new { checkoutReviewReturnUrl = "https://yourwebsite.com/review", checkoutResultReturnUrl = "https://yourwebsite.com/result", chargeAmount = new { amount = amount.ToString("F2"), currencyCode = currencyCode }, merchantMetadata = new { merchantReferenceId = Guid.NewGuid().ToString(), merchantStoreName = "Your Store Name" } }; var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json"); // Add required headers _httpClient.DefaultRequestHeaders.Clear(); _httpClient.DefaultRequestHeaders.Add("x-amz-pay-idempotency-key", Guid.NewGuid().ToString()); _httpClient.DefaultRequestHeaders.Add("x-amz-pay-authtoken", GenerateAuthToken()); var response = await _httpClient.PostAsync(endpoint, content); response.EnsureSuccessStatusCode(); var responseBody = await response.Content.ReadAsStringAsync(); return responseBody; } private string GenerateAuthToken() { // Implement Amazon Pay's signature calculation logic here. // Refer to Amazon Pay's documentation for details: https://developer.amazon.com/docs/amazon-pay-api/signature.html return "YOUR_AUTH_TOKEN"; } }