From 995b00fc03d611c8a7f96a48bafe4fb66b62ef7b Mon Sep 17 00:00:00 2001
From: lingling <kety1122@163.com>
Date: 星期一, 17 三月 2025 10:08:43 +0800
Subject: [PATCH] 添加回调
---
LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs | 75 ++++++
LifePayment/LifePayment.Domain/WeChat/WxRechargeInfo.cs | 219 +++++++++++++++++++
LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs | 124 +++++++++++
LifePayment/LifePayment.Application/User/OssSTSHelper.cs | 62 +++++
LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs | 17 +
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml | 19 +
LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs | 130 +++++++++++
7 files changed, 641 insertions(+), 5 deletions(-)
diff --git a/LifePayment/LifePayment.Application/User/OssSTSHelper.cs b/LifePayment/LifePayment.Application/User/OssSTSHelper.cs
new file mode 100644
index 0000000..a358c0f
--- /dev/null
+++ b/LifePayment/LifePayment.Application/User/OssSTSHelper.cs
@@ -0,0 +1,62 @@
+锘縰sing Aliyun.Acs.Core;
+using Aliyun.Acs.Core.Auth.Sts;
+using Aliyun.Acs.Core.Http;
+using Aliyun.Acs.Core.Profile;
+using LifePayment.Domain.Shared;
+
+namespace LifePayment.Application
+{
+ public class OssSTSHelper
+ {
+ private const int TokenExpireTime = 3600;
+ private const string RoleSessionName = "SessionTest";
+ private const string PolicyFile = @"{
+ ""Version"": ""1"",
+ ""Statement"": [
+ {
+ ""Effect"": ""Allow"",
+ ""Action"": ""oss:PutObject"",
+ ""Resource"": [
+ ""acs:oss:*:*:waterdroptest2/*"",
+ ""acs:oss:*:*:parkmanagement/*"",
+ ""acs:oss:*:*:jurenlian/*""
+ ]
+ }
+ ]
+}";
+
+ private readonly OssSettings ossSettings;
+
+ public OssSTSHelper(OssSettings ossSettings)
+ {
+ this.ossSettings = ossSettings;
+ }
+
+ public OssSTSReponse GetOssSTS()
+ {
+ string regionId = "cn-hangzhou";
+
+ IClientProfile profile = DefaultProfile.GetProfile(regionId, ossSettings.OssAccessKeyId, ossSettings.OssAccessSecret);
+ DefaultAcsClient client = new DefaultAcsClient(profile);
+ AssumeRoleRequest request = new AssumeRoleRequest();
+
+ request.Method = MethodType.POST;
+
+ request.RoleArn = ossSettings.OssRoleRan;
+ request.RoleSessionName = RoleSessionName;
+ request.Policy = PolicyFile;
+ request.DurationSeconds = TokenExpireTime;
+ AssumeRoleResponse response = client.GetAcsResponse(request);
+ OssSTSReponse result = new OssSTSReponse()
+ {
+ Expiration = response.Credentials.Expiration,
+ OssAccessKeyId = response.Credentials.AccessKeyId,
+ OssAccessSecret = response.Credentials.AccessKeySecret,
+ SecurityToken = response.Credentials.SecurityToken,
+ RequestId = response.RequestId
+ };
+ return result;
+ }
+
+ }
+}
diff --git a/LifePayment/LifePayment.Domain/WeChat/WxRechargeInfo.cs b/LifePayment/LifePayment.Domain/WeChat/WxRechargeInfo.cs
new file mode 100644
index 0000000..7fc0310
--- /dev/null
+++ b/LifePayment/LifePayment.Domain/WeChat/WxRechargeInfo.cs
@@ -0,0 +1,219 @@
+锘縰sing LifePayment.Domain.Shared;
+using Newtonsoft.Json;
+using System.ComponentModel.DataAnnotations;
+
+namespace LifePayment.Application.Contracts
+{
+ public class WxRechargeInfo
+ {
+ /// <summary>
+ /// 鍏呭�煎崟鍙�
+ /// </summary>
+ public string RechargeNo { get; set; }
+
+ /// <summary>
+ /// 鍏呭�肩爜鍦板潃
+ /// </summary>
+ public string RechargeCodeUrl { get; set; }
+ }
+
+ public class WxRechargeInput
+ {
+ /// <summary>
+ /// 鍏呭�奸噾棰濓紝鍗曚綅涓哄厓銆�
+ /// </summary>
+ public decimal Amount { get; set; }
+
+ /// <summary>
+ /// 鍟嗗搧鎻忚堪
+ /// </summary>
+ public string Description { get; set; } = "寰俊鍏呭��";
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string Remark { get; set; }
+ }
+
+ public class WxRechargeNotifyInput
+ {
+ /// <summary>
+ /// 閫氱煡Id
+ /// </summary>
+ [JsonProperty("id")]
+ [Required]
+ public string Id { get; set; }
+
+ /// <summary>
+ /// 閫氱煡鍒涘缓鏃堕棿
+ /// </summary>
+ [JsonProperty("create_time")]
+ [Required]
+ public string CreateTime { get; set; }
+
+ /// <summary>
+ /// 閫氱煡绫诲瀷
+ /// </summary>
+ [JsonProperty("event_type")]
+ [Required]
+ public string EventType { get; set; }
+
+ /// <summary>
+ /// 閫氱煡鏁版嵁绫诲瀷
+ /// </summary>
+ [JsonProperty("resource_type")]
+ [Required]
+ public string ResourceType { get; set; }
+
+ /// <summary>
+ /// 閫氱煡鏁版嵁
+ /// </summary>
+ [JsonProperty("resource")]
+ [Required]
+ public Resource Resource { get; set; }
+
+ /// <summary>
+ /// 鍥炶皟鎽樿
+ /// </summary>
+ [JsonProperty("summary")]
+ [Required]
+ public string Summary { get; set; }
+ }
+
+ public class Resource
+ {
+ /// <summary>
+ /// 鍔犲瘑绠楁硶绫诲瀷
+ /// </summary>
+ [JsonProperty("algorithm")]
+ [Required]
+ public string Algorithm { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁瀵嗘枃
+ /// </summary>
+ [JsonProperty("Ciphertext")]
+ [Required]
+ public string Ciphertext { get; set; }
+
+ /// <summary>
+ /// 闄勫姞鏁版嵁
+ /// </summary>
+ [JsonProperty("associated_data")]
+ public string AssociatedData { get; set; }
+
+ /// <summary>
+ /// 鍘熷绫诲瀷
+ /// </summary>
+ [JsonProperty("original_type")]
+ [Required]
+ public string OriginalType { get; set; }
+
+ /// <summary>
+ /// 闅忔満涓�
+ /// </summary>
+ [JsonProperty("nonce")]
+ [Required]
+ public string Nonce { get; set; }
+ }
+
+ public class WxPayNotice
+ {
+ /// <summary>
+ /// 搴旂敤Id
+ /// </summary>
+ [JsonProperty("appid")]
+ public string Appid { get; set; }
+
+ /// <summary>
+ /// 鍟嗘埛鍙�
+ /// </summary>
+ [JsonProperty("mchid")]
+ public string Mchid { get; set; }
+
+ /// <summary>
+ /// 鍟嗘埛璁㈠崟鍙�
+ /// </summary>
+ [JsonProperty("out_trade_no")]
+ public string OutTradeNo { get; set; }
+
+ /// <summary>
+ /// 寰俊鏀粯璁㈠崟鍙�
+ /// </summary>
+ [JsonProperty("transaction_id")]
+ public string TransactionId { get; set; }
+
+ /// <summary>
+ /// 浜ゆ槗绫诲瀷
+ /// </summary>
+ [JsonProperty("trade_type")]
+ public string TradeType { get; set; }
+
+ /// <summary>
+ /// 浜ゆ槗鐘舵��
+ /// </summary>
+ [JsonProperty("trade_state")]
+ public string TradeState { get; set; }
+
+ /// <summary>
+ /// 浜ゆ槗鐘舵�佹弿杩�
+ /// </summary>
+ [JsonProperty("trade_state_desc")]
+ public string TradeStateDesc { get; set; }
+
+ /// <summary>
+ /// 浠樻閾惰
+ /// </summary>
+ [JsonProperty("bank_type")]
+ public string BankType { get; set; }
+
+ /// <summary>
+ /// 闄勫姞鏁版嵁
+ /// </summary>
+ [JsonProperty("attach")]
+ public string Attach { get; set; }
+
+ /// <summary>
+ /// 鏀粯瀹屾垚鏃堕棿
+ /// </summary>
+ [JsonProperty("success_time")]
+ public string SuccessTime { get; set; }
+
+ /// <summary>
+ /// 鏀粯鑰�
+ /// </summary>
+ [JsonProperty("payer")]
+ public Payer Payer { get; set; }
+
+ /// <summary>
+ /// 璁㈠崟閲戦
+ /// </summary>
+ [JsonProperty("amount")]
+ public Amount Amount { get; set; }
+
+ /// <summary>
+ /// 鍦烘櫙淇℃伅
+ /// </summary>
+ [JsonProperty("scene_info")]
+ public SceneInfo SceneInfo { get; set; }
+
+ /// <summary>
+ /// 浼樻儬鍔熻兘
+ /// </summary>
+ [JsonProperty("promotion_detail")]
+ public PromotionDetail PromotionDetail { get; set; }
+ }
+
+ public class WxRechargeNotifyResult
+ {
+ /// <summary>
+ /// 杩斿洖鐘舵�佺爜(閿欒鐮侊紝SUCCESS涓烘帴鏀舵垚鍔燂紝鍏朵粬閿欒鐮佷负澶辫触)
+ /// </summary>
+ public string Code { get; set; }
+
+ /// <summary>
+ /// 杩斿洖淇℃伅锛屽闈炵┖锛屼负閿欒鍘熷洜
+ /// </summary>
+ public string Message { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
index 94358b9..f672b0d 100644
--- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -19,6 +19,18 @@
<returns></returns>
<exception cref="T:Volo.Abp.UserFriendlyException"></exception>
</member>
+ <member name="M:LifePayment.HttpApi.ACOOLYNotifyController.ACOOLYNotify">
+ <summary>
+ ACOOLY鍥炶皟閫氱煡
+ </summary>
+ <returns></returns>
+ </member>
+ <member name="M:LifePayment.HttpApi.AliPayNotifyController.AliRechargeNotify">
+ <summary>
+ 鏀粯瀹濆厖鍊煎洖璋冮�氱煡
+ </summary>
+ <returns></returns>
+ </member>
<member name="M:LifePayment.HttpApi.AreaController.GetAreaList">
<summary>
鑾峰彇鐪佸競鍖�
@@ -266,5 +278,12 @@
<param name="input"></param>
<returns></returns>
</member>
+ <member name="M:LifePayment.HttpApi.WxPayNotifyController.WxRechargeNotify(LifePayment.Application.Contracts.WxRechargeNotifyInput)">
+ <summary>
+ 寰俊鏀粯鍥炶皟閫氱煡
+ </summary>
+ <param name="input"></param>
+ <returns></returns>
+ </member>
</members>
</doc>
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
new file mode 100644
index 0000000..3c685ec
--- /dev/null
+++ b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
@@ -0,0 +1,124 @@
+锘縰sing LifePayment.Application.Contracts;
+using LifePayment.Domain.Shared;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.IO;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Uow;
+
+namespace LifePayment.HttpApi
+{
+ [Route("api/[controller]/[action]")]
+ [ApiController]
+ [IgnoreAntiforgeryToken]
+ public class ACOOLYNotifyController : AbpController
+ {
+ private readonly ILifePayService _lifePayService;
+ private readonly ILogger<ACOOLYNotifyController> _logger;
+
+ public ACOOLYNotifyController(
+ ILogger<ACOOLYNotifyController> logger,
+ ILifePayService lifePayService)
+ {
+ _logger = logger;
+ _lifePayService = lifePayService;
+ }
+
+ /// <summary>
+ /// ACOOLY鍥炶皟閫氱煡
+ /// </summary>
+ /// <returns></returns>
+ [HttpPost]
+ [UnitOfWork]
+ [AllowAnonymous]
+ public async Task ACOOLYNotify()
+ {
+ _logger.LogError("ACOOLY鍥炶皟閫氱煡寮�濮嬭繘鍏�");
+ var body = string.Empty;
+ using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
+ {
+ body = await reader.ReadToEndAsync();
+ }
+ if (body.IsNullOrEmpty())
+ {
+ _logger.LogError("ACOOLY鍥炶皟閫氱煡Input涓簄ull");
+ throw new UserFriendlyException("ACOOLY鍥炶皟閫氱煡Input涓簄ull");
+ }
+ var baseInfo = JsonConvert.DeserializeObject<ACOOLYRequestBaseResponse>(body);
+ var orderNo = string.Empty;
+ var status = LifePayOrderStatusEnum.寰呯‘璁�;
+ var acoolyOrderNo = string.Empty;
+ _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬶細" + baseInfo.Service);
+ _logger.LogError("ACOOLY鍥炶皟鍐呭锛�" + body);
+ switch (baseInfo.Service)
+ {
+ case ACOOLYConstant.Sevice.ConfirmElectricOrder:
+ var confirmElectricOrderResponse = JsonConvert.DeserializeObject<ConfirmElectricOrderResponse>(body);
+ orderNo = confirmElectricOrderResponse.ElectricChargeOrder.OutOrderNo;
+ acoolyOrderNo = confirmElectricOrderResponse.ElectricChargeOrder.BusiOrderNo;
+ _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmElectricOrderResponse.ElectricChargeOrder.Status);
+ if (!confirmElectricOrderResponse.Success
+ || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
+ {
+ status = LifePayOrderStatusEnum.宸插け璐�;
+ }
+ else
+
+ if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Code.SUCCESS)
+ {
+ status = LifePayOrderStatusEnum.宸插畬鎴�;
+ }
+ else
+
+ if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Code.PROCESSING)
+ {
+ status = LifePayOrderStatusEnum.寰呯‘璁�;
+ }
+ else
+ {
+ status = LifePayOrderStatusEnum.宸插け璐�;
+ }
+
+ break;
+ case ACOOLYConstant.Sevice.ConfirmPhoneOrder:
+ var confirmPhoneOrderResponse = JsonConvert.DeserializeObject<ConfirmPhoneOrderResponse>(body);
+ orderNo = confirmPhoneOrderResponse.PhoneChargeOrder.OutOrderNo;
+ acoolyOrderNo = confirmPhoneOrderResponse.PhoneChargeOrder.BusiOrderNo;
+ _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmPhoneOrderResponse.PhoneChargeOrder.Status);
+ if (!confirmPhoneOrderResponse.Success
+ || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
+ {
+ status = LifePayOrderStatusEnum.宸插け璐�;
+ }
+ else
+
+ if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Code.SUCCESS)
+ {
+ status = LifePayOrderStatusEnum.宸插畬鎴�;
+ }
+ else
+
+ if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Code.PROCESSING)
+ {
+ status = LifePayOrderStatusEnum.寰呯‘璁�;
+ }
+ else
+ {
+ status = LifePayOrderStatusEnum.宸插け璐�;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status);
+ }
+ }
+}
\ No newline at end of file
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs b/LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs
index c786435..3f95827 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs
@@ -1,4 +1,6 @@
-锘縰sing LifePayment.Application.Contracts;
+锘縰sing LifePayment.Application;
+using LifePayment.Application.Contracts;
+using LifePayment.Domain.Shared;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
@@ -15,19 +17,19 @@
public class AccountController : AbpController
{
private readonly IAccountService _accountService;
-
+ private readonly OssSettings ossSettings;
private readonly IWebClientInfoProvider _webClientInfoProvider;
public AccountController(
IAccountService accountService,
-
+ IOptionsMonitor<OssSettings> optionsMonitor,
IWebClientInfoProvider webClientInfoProvider
)
{
_accountService = accountService;
-
+ this.ossSettings = optionsMonitor.CurrentValue;
_webClientInfoProvider = webClientInfoProvider;
}
@@ -60,7 +62,12 @@
return await _accountService.LifePayPhoneMesssageCodeLogin(input);
}
-
+ [HttpPost]
+ public OssSTSReponse GetOssSTS()
+ {
+ OssSTSHelper ossSTSHelper = new OssSTSHelper(this.ossSettings);
+ return ossSTSHelper.GetOssSTS();
+ }
#endregion
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
new file mode 100644
index 0000000..e057499
--- /dev/null
+++ b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
@@ -0,0 +1,130 @@
+锘縰sing LifePayment.Application.Contracts;
+using LifePayment.Domain.Shared;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Uow;
+
+namespace LifePayment.HttpApi
+{
+ [Route("api/[controller]/[action]")]
+ [ApiController]
+ [IgnoreAntiforgeryToken]
+ //[Authorize(AuthenticationSchemes = AliPaySignAuthenticationDefaults.AuthenticationScheme)]
+ public class AliPayNotifyController : AbpController
+ {
+
+ private readonly ILifePayService _lifePayService;
+
+ private readonly ILogger<AliPayNotifyController> _logger;
+
+ public AliPayNotifyController(
+
+ ILogger<AliPayNotifyController> logger,
+
+ ILifePayService lifePayService)
+ {
+ _logger = logger;
+ _lifePayService = lifePayService;
+ }
+
+ /// <summary>
+ /// 鏀粯瀹濆厖鍊煎洖璋冮�氱煡
+ /// </summary>
+ /// <returns></returns>
+ [HttpPost]
+ [UnitOfWork]
+ public async Task<ContentResult> AliRechargeNotify()
+ {
+ _logger.LogError($"鐢熸椿绠″鏀粯瀹濆厖鍊煎洖璋冮�氱煡锛氳繘鍏ユ敮浠樺疂鍥炶皟");
+ var request = await this.HttpContext.Request.ReadFormAsync();
+ var requestToDic = request.ToDictionary(r => r.Key, r => r.Value.ToString());
+ var serializeRequest = JsonConvert.SerializeObject(requestToDic);
+ _logger.LogError($"鐢熸椿绠″鏀粯瀹濆厖鍊煎洖璋冮�氱煡锛歿serializeRequest}");
+
+ //var serializeRequest = "{\"gmt_create\":\"2025-02-25 13:18:59\",\"charset\":\"UTF-8\",\"seller_email\":\"zfb1@818nb.com\",\"subject\":\"鐢熸椿缂磋垂-璇濊垂\",\"sign\":\"Sp06G1GxrAfDvoHPz9l3DJ20SxhvRzEGFeCGu4LHrSWmEG4OY7MHMx+iJi54ETbdXV0YsyDH9JZD7PWN3HCpEq/wGO4Wh4VSYSe7lqxD6r4f/HFiB0YlrdQoSzjZgYPzLjy6bcdlKRRHOeDkgs2i7TfvIsxWxHs9t0xuS0RlkpdZfb7d7m0EuZ/3v2Cbsj5AHjxb1S2PkO0oQyriYgGQdmkPqILZHwieST+tNEHS4dGFKYu2nkfctAGjWIDv/hKQNY7jEUxsEeG0SnK4TPU8zNplFR9/aKM0Wfwp1pdlaiP2u/d8vOtNh5q+emvaYbKrUkIEFBok8pDLNDta7ZjtVw==\",\"invoice_amount\":\"0.01\",\"buyer_open_id\":\"071xYXDfXBLAI9U11jg_WrH1K6hWq8HYGz0u85xBivf3Sce\",\"notify_id\":\"2025022501222131904087711494539601\",\"fund_bill_list\":\"[{\\\"amount\\\":\\\"0.01\\\",\\\"fundChannel\\\":\\\"ALIPAYACCOUNT\\\"}]\",\"notify_type\":\"trade_status_sync\",\"trade_status\":\"TRADE_SUCCESS\",\"receipt_amount\":\"0.01\",\"buyer_pay_amount\":\"0.01\",\"app_id\":\"2021004171602214\",\"sign_type\":\"RSA2\",\"seller_id\":\"2088050542042301\",\"gmt_payment\":\"2025-02-25 13:19:03\",\"notify_time\":\"2025-02-25 13:44:34\",\"merchant_app_id\":\"2021004171602214\",\"version\":\"1.0\",\"out_trade_no\":\"JF202502251318555214671\",\"total_amount\":\"0.01\",\"trade_no\":\"2025022522001487711401331043\",\"auth_app_id\":\"2021004171602214\",\"buyer_logon_id\":\"130****2238\",\"point_amount\":\"0.00\"}";
+ var input = JsonConvert.DeserializeObject<AliRechargeNotifyInput>(serializeRequest);
+
+ if (input.OutTradeNo.StartsWith("JF") && Regex.IsMatch(input.OutTradeNo, @"^JF\d+$"))
+ {
+ if (input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛)
+ {
+ await _lifePayService.LifePaySuccessHandler(input.OutTradeNo, input.TradeNo);
+ }
+ }
+
+ return new ContentResult
+ {
+ Content = "success",
+ };
+ }
+
+#if DEBUG
+
+ [HttpGet]
+ [UnitOfWork]
+ [AllowAnonymous]
+ public async Task<ContentResult> TestAliRechargeNotify(string outTradeNo, string tradeNo, bool success)
+ {
+ if (outTradeNo.StartsWith("JF") && Regex.IsMatch(outTradeNo, @"^JF\d+$"))
+ {
+ if (success)
+ {
+ await _lifePayService.LifePaySuccessHandler(outTradeNo, tradeNo);
+ }
+ }
+
+ return new ContentResult
+ {
+ Content = "success",
+ };
+ }
+
+#endif
+
+ /// <summary>
+ /// 鍗曠瑪杞处鍒版敮浠樺疂璐︽埛銆佸崟绗旇浆璐﹀埌閾惰鍗°�丆2C鐜伴噾绾㈠寘銆丅2C鐜伴噾绾㈠寘鍗曟嵁鐘舵�佸彉鏇村悗瑙﹀彂鐨勯�氱煡
+ /// </summary>
+ /// <returns></returns>
+ //[HttpPost]
+ //[UnitOfWork]
+ //public async Task<ContentResult> NotifyOrderChanged()
+ //{
+ // var request = await this.HttpContext.Request.ReadFormAsync();
+ // var requestToDic = request.ToDictionary(r => r.Key, r => r.Value.ToString());
+ // var serializeRequest = JsonConvert.SerializeObject(requestToDic);
+ // _logger.LogError($"鍗曠瑪杞处鍥炶皟锛歿serializeRequest}");
+ // if (requestToDic["msg_method"] == "alipay.fund.trans.order.changed")
+ // {
+ // var input = JsonConvert.DeserializeObject<FundOrderChangedInput>(serializeRequest);
+ // if (input.BizContent != null)
+ // {
+ // if (input.BizContent.OutBizNo.Contains(RequestCode.AlipayCharge))
+ // {
+ // await _walletService.FundTransOrderChangedForRecharge(input.BizContent);
+ // }
+ // else
+ // {
+ // await _walletService.FundTransOrderChangedForSingleTransfer(input.BizContent);
+
+ // }
+ // }
+ // }
+
+
+ // return new ContentResult
+ // {
+ // Content = "success",
+ // };
+ //}
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
new file mode 100644
index 0000000..54d3114
--- /dev/null
+++ b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
@@ -0,0 +1,75 @@
+锘縰sing LifePayment.Application.Contracts;
+using LifePayment.Domain;
+using LifePayment.Domain.Shared;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Uow;
+
+namespace LifePayment.HttpApi
+{
+ [Route("api/[controller]/[action]")]
+ [ApiController]
+ [IgnoreAntiforgeryToken]
+ // [Authorize(AuthenticationSchemes = WxPaySignAuthenticationDefaults.AuthenticationScheme)]
+ public class WxPayNotifyController : AbpController
+ {
+
+ private readonly IWxPayApi _wxPayApi;
+ private readonly ILifePayService _lifePayService;
+ private readonly ILogger<WxPayNotifyController> _logger;
+
+ public WxPayNotifyController(
+ IWxPayApi wxPayApi,
+ ILogger<WxPayNotifyController> logger,
+ ILifePayService lifePayService)
+ {
+ _wxPayApi = wxPayApi;
+ _logger = logger;
+ _lifePayService = lifePayService;
+ }
+
+ /// <summary>
+ /// 寰俊鏀粯鍥炶皟閫氱煡
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost]
+ [UnitOfWork]
+ public async Task<WxRechargeNotifyResult> WxRechargeNotify(WxRechargeNotifyInput input)
+ {
+ try
+ {
+ _logger.LogError($"鐢熸椿绠″寰俊鍏呭�煎洖璋冮�氱煡锛氳繘鍏ュ井淇″洖璋�");
+ var data = _wxPayApi.AesGcmDecrypt(input.Resource.AssociatedData, input.Resource.Nonce, input.Resource.Ciphertext);
+ var wxPayNotice = JsonConvert.DeserializeObject<WxPayNotice>(data);
+
+ if (wxPayNotice.OutTradeNo.StartsWith("JF") && Regex.IsMatch(wxPayNotice.OutTradeNo, @"^JF\d+$"))
+ {
+ if (wxPayNotice.TradeState == LifePaymentConstant.WxPayStatus.鏀粯鎴愬姛)
+ {
+ await _lifePayService.LifePaySuccessHandler(wxPayNotice.OutTradeNo, wxPayNotice.TransactionId);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ await CurrentUnitOfWork.RollbackAsync();
+ return new WxRechargeNotifyResult
+ {
+ Code = "FAIL",
+ Message = ex.Message,
+ };
+ }
+
+ return new WxRechargeNotifyResult
+ {
+ Code = "SUCCESS",
+ };
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.1