diff --git a/src/CloudGaming/Api/CloudGaming.PayApi/Controllers/PayController.cs b/src/CloudGaming/Api/CloudGaming.PayApi/Controllers/PayController.cs index 170dd47..d56afaf 100644 --- a/src/CloudGaming/Api/CloudGaming.PayApi/Controllers/PayController.cs +++ b/src/CloudGaming/Api/CloudGaming.PayApi/Controllers/PayController.cs @@ -29,6 +29,17 @@ namespace CloudGaming.PayApi.Controllers [ApiController] public class PayController(ILogger logger, IHttpContextAccessor httpContextAccessor, IServiceProvider serviceProvider) : ControllerBase { + + /// + /// + /// + /// + [HttpGet("{tenant?}/{pay?}/{orderId?}/{sign?}")] + public async Task Get(string? tenant, string? pay, string? orderId, string? sign) + { + return await PayCallback(logger, httpContextAccessor, serviceProvider, tenant, pay, orderId, sign); + } + /// /// 支付中心回调 /// @@ -39,6 +50,12 @@ namespace CloudGaming.PayApi.Controllers /// [HttpPost("{tenant?}/{pay?}/{orderId?}/{sign?}")] public async Task Post(string? tenant, string? pay, string? orderId, string? sign) + { + return await PayCallback(logger, httpContextAccessor, serviceProvider, tenant, pay, orderId, sign); + + } + + private static async Task PayCallback(ILogger logger, IHttpContextAccessor httpContextAccessor, IServiceProvider serviceProvider, string? tenant, string? pay, string? orderId, string? sign) { var context = httpContextAccessor.HttpContext; context.Request.EnableBuffering(); // Enable buffering to allow the body to be read multiple times @@ -129,8 +146,7 @@ namespace CloudGaming.PayApi.Controllers var userDiamond = await dao.DaoUser.Context.T_User_Currency.Where(it => it.UserId == user.Id && it.CurrencyType == (int)UserCurrencyType.钻石).FirstOrDefaultAsync(); //刷新钻石缓存 await AccountExtend.RefreshUserInfo(user.Id, redis, (int)(userDiamond?.CurrencyMoney ?? 0), intentOrder.Price > 0 ? true : false); - - return $"success"; + return "success"; } } } diff --git a/src/CloudGaming/Code/CloudGaming.Code/Aliyun/AlipayPayment.cs b/src/CloudGaming/Code/CloudGaming.Code/Aliyun/AlipayPayment.cs index db56ac1..4ee59a2 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Aliyun/AlipayPayment.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Aliyun/AlipayPayment.cs @@ -23,7 +23,7 @@ namespace CloudGaming.Code.Aliyun; /// public class AlipayPayment(AppConfig appConfig, int userId) : IPayment { - public Task<(string orderId, string order)> CreateOrder(int productId, string productName, decimal price, params object[] args) + public Task<(string orderId, string order, string payNotifyUrl)> CreateOrder(int productId, string productName, decimal price, params object[] args) { if (string.IsNullOrEmpty(productName)) { @@ -58,7 +58,7 @@ public class AlipayPayment(AppConfig appConfig, int userId) : IPayment } //.PreCreate("Apple iPhone11 128G", "2234567234890", "5799.00"); var zfbOrderId = response.Body; - return Task.FromResult((orderId, zfbOrderId)); + return Task.FromResult((orderId, zfbOrderId, notifyUrl)); } diff --git a/src/CloudGaming/Code/CloudGaming.Code/Contract/IPayment.cs b/src/CloudGaming/Code/CloudGaming.Code/Contract/IPayment.cs index 6696635..7226c32 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Contract/IPayment.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Contract/IPayment.cs @@ -19,5 +19,5 @@ public interface IPayment /// 价格 /// 其它参数 /// - Task<(string orderId, string order)> CreateOrder(int productId, string productName, decimal price, params object[] args); + Task<(string orderId, string order,string payNotifyUrl)> CreateOrder(int productId, string productName, decimal price, params object[] args); } \ No newline at end of file diff --git a/src/CloudGaming/Code/CloudGaming.Code/Mall/OrderBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Mall/OrderBLL.cs index a98b40d..efb0842 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Mall/OrderBLL.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Mall/OrderBLL.cs @@ -70,7 +70,7 @@ public class OrderBLL : CloudGamingBase { price = (decimal)0.01; } - (var orderId, var order) = await payment.CreateOrder(product.Id, product.ProductName, price, product, ip); + (var orderId, var order, var payNotifyUrl) = await payment.CreateOrder(product.Id, product.ProductName, price, product, ip); var t = product.ToIntentOrder(paymentMethod, orderId); t.UserId = _UserId; await Dao.DaoUser.Context.AddAsync(t); @@ -81,6 +81,7 @@ public class OrderBLL : CloudGamingBase Payment = order }; RedisCache.KeyDelete(redisLock); + HttpContextAccessor.HttpContext.Response.Headers.Add("PayNotifyUrl", payNotifyUrl); } catch (Exception ex) { diff --git a/src/CloudGaming/Code/CloudGaming.Code/Payment/OrderExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Payment/OrderExtend.cs index c4b190e..fa6f545 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Payment/OrderExtend.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Payment/OrderExtend.cs @@ -37,6 +37,7 @@ public static class OrderExtend if (productReward != null && productReward.Count > 0) { + List tips = new List(); //List user_Currencies = new List(); foreach (var reward in productReward) @@ -44,7 +45,7 @@ public static class OrderExtend var money = reward.Money; var currency = (UserCurrencyType)reward.CurrencyType; var userCurrency = new T_User_Currency(); - await user.ConsumeMoneyNoWork(currency, money, dao, userCurrency, orderId); + await user.ConsumeMoneyNoWork(currency, money, dao, userCurrency, orderId, $"购买{product.ProductName}"); tips.Add($"获得{currency}*{money}"); if (product.IsFirstCharge && chargeMoneyCount == 0 && reward.FirstChargeMoney > 0) { diff --git a/src/CloudGaming/Code/CloudGaming.Code/WeChat/WeChatPayment.cs b/src/CloudGaming/Code/CloudGaming.Code/WeChat/WeChatPayment.cs index 1626e61..f5d22c7 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/WeChat/WeChatPayment.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/WeChat/WeChatPayment.cs @@ -18,7 +18,7 @@ namespace CloudGaming.Code.WeChat; /// public class WeChatPayment(WechatTenpayClient client, WeChatConfig weChatConfig, AppConfig appConfig, int userId) : IPayment { - public async Task<(string orderId, string order)> CreateOrder(int productId, string productName, decimal price, params object[] args) + public async Task<(string orderId, string order, string payNotifyUrl)> CreateOrder(int productId, string productName, decimal price, params object[] args) { //var orderId = GenerateTimestampIdWithOffset(); var orderId = PaymentExtend.GenerateCustomString("WX", userId, productId, "001"); @@ -46,7 +46,7 @@ public class WeChatPayment(WechatTenpayClient client, WeChatConfig weChatConfig, { var paramMap = client.GenerateParametersForAppPayRequest(request.AppId, response.PrepayId); //Console.WriteLine("PrepayId:" + response.PrepayId); - return new(orderId, JsonConvert.SerializeObject(paramMap)); + return new(orderId, JsonConvert.SerializeObject(paramMap), notifyUrl); } throw new Exception("微信下单失败"); }