diff --git a/LittleShop.Tests/Integration/OrdersWithVariantsTests.cs b/LittleShop.Tests/Integration/OrdersWithVariantsTests.cs index b3e5a42..95dfdb1 100644 --- a/LittleShop.Tests/Integration/OrdersWithVariantsTests.cs +++ b/LittleShop.Tests/Integration/OrdersWithVariantsTests.cs @@ -269,7 +269,7 @@ public class OrdersWithVariantsTests : IClassFixture Price = 15.00m, CategoryId = category.Id, Weight = 1.0m, - WeightUnit = (int)LittleShop.Enums.ProductWeightUnit.Kilograms + WeightUnit = LittleShop.Enums.ProductWeightUnit.Kilograms }; var response = await _client.PostAsJsonAsync("/api/admin/products", productDto); diff --git a/LittleShop.Tests/Unit/PushNotificationControllerTests.cs b/LittleShop.Tests/Unit/PushNotificationControllerTests.cs index bf67226..a8e1ddc 100644 --- a/LittleShop.Tests/Unit/PushNotificationControllerTests.cs +++ b/LittleShop.Tests/Unit/PushNotificationControllerTests.cs @@ -19,14 +19,16 @@ namespace LittleShop.Tests.Unit; public class PushNotificationControllerTests { private readonly Mock _pushServiceMock; + private readonly Mock _teleBotServiceMock; private readonly PushNotificationController _controller; private readonly Guid _testUserId = Guid.NewGuid(); public PushNotificationControllerTests() { _pushServiceMock = new Mock(); - _controller = new PushNotificationController(_pushServiceMock.Object); - + _teleBotServiceMock = new Mock(); + _controller = new PushNotificationController(_pushServiceMock.Object, _teleBotServiceMock.Object); + // Setup controller context for authenticated user SetupControllerContext(); } diff --git a/LittleShop/Services/CryptoPaymentService.cs b/LittleShop/Services/CryptoPaymentService.cs index 5deee5c..b94062d 100644 --- a/LittleShop/Services/CryptoPaymentService.cs +++ b/LittleShop/Services/CryptoPaymentService.cs @@ -57,8 +57,11 @@ public class CryptoPaymentService : ICryptoPaymentService // Use SilverPAY _logger.LogInformation("Creating SilverPAY order for {Currency}", currency); + // Generate payment ID first to use as external_id + var paymentId = Guid.NewGuid(); + var silverPayOrder = await _silverPayService.CreateOrderAsync( - order.Id.ToString(), + paymentId.ToString(), // Use unique payment ID instead of order ID order.TotalAmount, currency, $"Order #{order.Id} - {order.Items.Count} items", @@ -67,7 +70,7 @@ public class CryptoPaymentService : ICryptoPaymentService var cryptoPayment = new CryptoPayment { - Id = Guid.NewGuid(), + Id = paymentId, // Use the same payment ID OrderId = orderId, Currency = currency, WalletAddress = silverPayOrder.PaymentAddress, diff --git a/LittleShop/Services/SilverPayService.cs b/LittleShop/Services/SilverPayService.cs index 26cb0f7..f62f65e 100644 --- a/LittleShop/Services/SilverPayService.cs +++ b/LittleShop/Services/SilverPayService.cs @@ -54,7 +54,7 @@ public class SilverPayService : ISilverPayService var request = new { external_id = externalId, - fiat_amount = amount, // Amount in GBP + amount = amount, // Amount in GBP fiat_currency = "GBP", currency = currencyCode, webhook_url = webhookUrl ?? _configuration["SilverPay:DefaultWebhookUrl"], @@ -63,14 +63,15 @@ public class SilverPayService : ISilverPayService var json = JsonSerializer.Serialize(request, new JsonSerializerOptions { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }); var content = new StringContent(json, Encoding.UTF8, "application/json"); - _logger.LogDebug("Creating SilverPAY order - External ID: {ExternalId}, Amount: {Amount} GBP, Currency: {Currency}", + _logger.LogInformation("Creating SilverPAY order - External ID: {ExternalId}, Amount: {Amount} GBP, Currency: {Currency}", externalId, amount, currencyCode); + _logger.LogInformation("SilverPAY request body: {RequestBody}", json); // Add timeout to prevent hanging using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); @@ -260,7 +261,10 @@ public class SilverPayService : ISilverPayService public string ExternalId { get; set; } = string.Empty; [JsonPropertyName("amount")] - public decimal Amount { get; set; } + public string AmountString { get; set; } = string.Empty; + + [JsonIgnore] + public decimal Amount => decimal.TryParse(AmountString, out var amount) ? amount : 0; [JsonPropertyName("currency")] public string Currency { get; set; } = string.Empty; @@ -284,7 +288,10 @@ public class SilverPayService : ISilverPayService public Dictionary? PaymentDetails { get; set; } [JsonPropertyName("crypto_amount")] - public decimal? CryptoAmount { get; set; } + public string? CryptoAmountString { get; set; } + + [JsonIgnore] + public decimal? CryptoAmount => decimal.TryParse(CryptoAmountString, out var amount) ? amount : null; [JsonPropertyName("tx_hash")] public string? TransactionHash { get; set; } diff --git a/LittleShop/appsettings.json b/LittleShop/appsettings.json index 6604a5b..20e2fbc 100644 --- a/LittleShop/appsettings.json +++ b/LittleShop/appsettings.json @@ -9,7 +9,7 @@ "ExpiryInHours": 24 }, "SilverPay": { - "BaseUrl": "http://31.97.57.205:8001", + "BaseUrl": "http://10.0.0.52:8001", "ApiKey": "sp_live_key_2025_production", "WebhookSecret": "webhook_secret_2025", "DefaultWebhookUrl": "http://localhost:8080/api/orders/payments/webhook",