AmazonPayService.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System.Net.Http;
  2. using System.Text;
  3. using System.Threading.Tasks;
  4. using Microsoft.Extensions.Configuration;
  5. using MTWorkHR.Application.Services.Interfaces;
  6. using Newtonsoft.Json;
  7. public class AmazonPayService: IAmazonPayService
  8. {
  9. private readonly HttpClient _httpClient;
  10. private readonly string _merchantId;
  11. private readonly string _accessKey;
  12. private readonly string _secretKey;
  13. private readonly string _region;
  14. private readonly bool _sandbox;
  15. public AmazonPayService(IConfiguration configuration, HttpClient httpClient)
  16. {
  17. _httpClient = httpClient;
  18. _merchantId = configuration["AmazonPay:MerchantId"];
  19. _accessKey = configuration["AmazonPay:AccessKey"];
  20. _secretKey = configuration["AmazonPay:SecretKey"];
  21. _region = configuration["AmazonPay:Region"];
  22. _sandbox = configuration.GetValue<bool>("AmazonPay:Sandbox");
  23. }
  24. public async Task<string> CreateCheckoutSessionAsync(decimal amount, string currencyCode)
  25. {
  26. var baseUrl = _sandbox ? "https://pay-api.amazon.com/sandbox" : "https://pay-api.amazon.com";
  27. var endpoint = $"{baseUrl}/{_region}/checkout-sessions";
  28. var payload = new
  29. {
  30. checkoutReviewReturnUrl = "https://yourwebsite.com/review",
  31. checkoutResultReturnUrl = "https://yourwebsite.com/result",
  32. chargeAmount = new
  33. {
  34. amount = amount.ToString("F2"),
  35. currencyCode = currencyCode
  36. },
  37. merchantMetadata = new
  38. {
  39. merchantReferenceId = Guid.NewGuid().ToString(),
  40. merchantStoreName = "Your Store Name"
  41. }
  42. };
  43. var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
  44. // Add required headers
  45. _httpClient.DefaultRequestHeaders.Clear();
  46. _httpClient.DefaultRequestHeaders.Add("x-amz-pay-idempotency-key", Guid.NewGuid().ToString());
  47. _httpClient.DefaultRequestHeaders.Add("x-amz-pay-authtoken", GenerateAuthToken());
  48. var response = await _httpClient.PostAsync(endpoint, content);
  49. response.EnsureSuccessStatusCode();
  50. var responseBody = await response.Content.ReadAsStringAsync();
  51. return responseBody;
  52. }
  53. private string GenerateAuthToken()
  54. {
  55. // Implement Amazon Pay's signature calculation logic here.
  56. // Refer to Amazon Pay's documentation for details: https://developer.amazon.com/docs/amazon-pay-api/signature.html
  57. return "YOUR_AUTH_TOKEN";
  58. }
  59. }