zuohuaijun 4 лет назад
Родитель
Сommit
ebfa657bf6

+ 46 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -168,7 +168,17 @@
         </member>
         <member name="F:Admin.NET.Core.ClaimConst.OpenId">
             <summary>
-            微信标识OpenId
+            微信OpenId
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.ClaimConst.NickName">
+            <summary>
+            昵称
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.ClaimConst.RunMode">
+            <summary>
+            运行模式(账号和三方授权)
             </summary>
         </member>
         <member name="T:Admin.NET.Core.CommonConst">
@@ -2237,6 +2247,21 @@
             门店角色
             </summary>
         </member>
+        <member name="T:Admin.NET.Core.RunModeEnum">
+            <summary>
+            运行模式枚举
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.RunModeEnum.Account">
+            <summary>
+            账号模式
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.RunModeEnum.OpenID">
+            <summary>
+            三方授权
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.StatusEnum">
             <summary>
             通用状态枚举
@@ -5746,6 +5771,26 @@
             订单Id
             </summary>
         </member>
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.OpenId">
+            <summary>
+            OpenId
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.Total">
+            <summary>
+            订单金额
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.Attachment">
+            <summary>
+            附加数据
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.WechatPayOutput.GoodsTag">
+            <summary>
+            优惠标记
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.Service.WeChatApiHttpClient">
             <summary>
             微信API客户端

+ 11 - 1
Admin.NET/Admin.NET.Core/Const/ClaimConst.cs

@@ -41,8 +41,18 @@
         public const string OrgName = "OrgName";
 
         /// <summary>
-        /// 微信标识OpenId
+        /// 微信OpenId
         /// </summary>
         public const string OpenId = "OpenId";
+
+        /// <summary>
+        /// 昵称
+        /// </summary>
+        public const string NickName = "NickName";
+
+        /// <summary>
+        /// 运行模式(账号和三方授权)
+        /// </summary>
+        public const string RunMode = "RunMode";
     }
 }

+ 22 - 0
Admin.NET/Admin.NET.Core/Enum/RunModeEnum.cs

@@ -0,0 +1,22 @@
+using System.ComponentModel;
+
+namespace Admin.NET.Core
+{
+    /// <summary>
+    /// 运行模式枚举
+    /// </summary>
+    public enum RunModeEnum
+    {
+        /// <summary>
+        /// 账号模式
+        /// </summary>
+        [Description("账号模式")]
+        Account = 1,
+
+        /// <summary>
+        /// 三方授权
+        /// </summary>
+        [Description("三方授权")]
+        OpenID = 2
+    }
+}

+ 25 - 0
Admin.NET/Admin.NET.Core/Service/WeChat/Dto/WechatPayOutput.cs

@@ -0,0 +1,25 @@
+namespace Admin.NET.Core.Service
+{
+    public class WechatPayOutput
+    {
+        /// <summary>
+        /// OpenId
+        /// </summary>
+        public string OpenId { get; set; }
+
+        /// <summary>
+        /// 订单金额
+        /// </summary>
+        public int Total { get; set; }
+
+        /// <summary>
+        /// 附加数据
+        /// </summary>
+        public string Attachment { get; set; }
+
+        /// <summary>
+        /// 优惠标记
+        /// </summary>
+        public string GoodsTag { get; set; }
+    }
+}

+ 20 - 11
Admin.NET/Admin.NET.Core/Service/WeChat/WechatPayService.cs

@@ -25,7 +25,7 @@ namespace Admin.NET.Core.Service
         private readonly SqlSugarRepository<WechatPay> _wechatPayUserRep;
 
         private readonly WechatPayOptions _wechatPayOptions;
-        private readonly WechatTenpayClient _wechatTenpayClient;
+        public readonly WechatTenpayClient WechatTenpayClient;
         private readonly PayCallBackOptions _payCallBackOptions;
 
         public WeChatPayService(SqlSugarRepository<WechatPay> wechatPayUserRep,
@@ -34,7 +34,7 @@ namespace Admin.NET.Core.Service
         {
             _wechatPayUserRep = wechatPayUserRep;
             _wechatPayOptions = wechatPayOptions.Value;
-            _wechatTenpayClient = CreateTenpayClient();
+            WechatTenpayClient = CreateTenpayClient();
             _payCallBackOptions = payCallBackOptions.Value;
         }
 
@@ -63,7 +63,7 @@ namespace Admin.NET.Core.Service
         [HttpPost("/weChatPay/genPayPara")]
         public dynamic GenerateParametersForJsapiPay(WechatPayParaInput input)
         {
-            return _wechatTenpayClient.GenerateParametersForJsapiPayRequest(_wechatPayOptions.AppId, input.PrepayId);
+            return WechatTenpayClient.GenerateParametersForJsapiPayRequest(_wechatPayOptions.AppId, input.PrepayId);
         }
 
         /// <summary>
@@ -84,7 +84,7 @@ namespace Admin.NET.Core.Service
                 Amount = new CreatePayTransactionJsapiRequest.Types.Amount() { Total = input.Total },
                 Payer = new CreatePayTransactionJsapiRequest.Types.Payer() { OpenId = input.OpenId }
             };
-            var response = await _wechatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
+            var response = await WechatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
             if (!response.IsSuccessful())
                 throw Oops.Oh(response.ErrorMessage);
 
@@ -129,7 +129,7 @@ namespace Admin.NET.Core.Service
                 Amount = new CreatePayPartnerTransactionJsapiRequest.Types.Amount() { Total = input.Total },
                 Payer = new CreatePayPartnerTransactionJsapiRequest.Types.Payer() { OpenId = input.OpenId }
             };
-            var response = await _wechatTenpayClient.ExecuteCreatePayPartnerTransactionJsapiAsync(request);
+            var response = await WechatTenpayClient.ExecuteCreatePayPartnerTransactionJsapiAsync(request);
             if (!response.IsSuccessful())
                 throw Oops.Oh(response.ErrorMessage);
 
@@ -173,22 +173,22 @@ namespace Admin.NET.Core.Service
         /// <returns></returns>
         [HttpPost("/notify/weChatPay/payCallBack")]
         [AllowAnonymous]
-        public async Task WeChatPayCallBack()
+        public async Task<WechatPayOutput> WeChatPayCallBack()
         {
             using var ms = new MemoryStream();
             await App.HttpContext.Request.Body.CopyToAsync(ms);
             var b = ms.ToArray();
             var callbackJson = Encoding.UTF8.GetString(b);
 
-            var callbackModel = _wechatTenpayClient.DeserializeEvent(callbackJson);
+            var callbackModel = WechatTenpayClient.DeserializeEvent(callbackJson);
             if ("TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
             {
-                var callbackResource = _wechatTenpayClient.DecryptEventResource<TransactionResource>(callbackModel);
+                var callbackResource = WechatTenpayClient.DecryptEventResource<TransactionResource>(callbackModel);
 
                 // 修改订单支付状态
                 var wechatPay = await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
                     && u.MerchantId == callbackResource.MerchantId);
-                if (wechatPay == null) return;
+                if (wechatPay == null) return null;
                 //wechatPay.OpenId = callbackResource.Payer.OpenId; // 支付者标识
                 //wechatPay.MerchantId = callbackResource.MerchantId; // 微信商户号
                 //wechatPay.OutTradeNumber = callbackResource.OutTradeNumber; // 商户订单号
@@ -202,7 +202,16 @@ namespace Admin.NET.Core.Service
                 wechatPay.SuccessTime = callbackResource.SuccessTime; // 支付完成时间
 
                 await _wechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
+
+                return new WechatPayOutput()
+                {
+                    Total = wechatPay.Total,
+                    Attachment = wechatPay.Attachment,
+                    GoodsTag = wechatPay.GoodsTag
+                };
             }
+
+            return null;
         }
 
         /// <summary>
@@ -218,10 +227,10 @@ namespace Admin.NET.Core.Service
             var b = ms.ToArray();
             var callbackJson = Encoding.UTF8.GetString(b);
 
-            var callbackModel = _wechatTenpayClient.DeserializeEvent(callbackJson);
+            var callbackModel = WechatTenpayClient.DeserializeEvent(callbackJson);
             if ("TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
             {
-                var callbackResource = _wechatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
+                var callbackResource = WechatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
 
                 // 修改订单支付状态
                 var wechatPay = await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber

+ 3 - 5
Admin.NET/Admin.NET.Core/Service/WeChat/WechatService.cs

@@ -92,18 +92,16 @@ namespace Admin.NET.Core.Service
         {
             var wxUser = await _wechatUserRep.GetFirstAsync(p => p.OpenId == input.OpenId);
             if (wxUser == null)
-                throw Oops.Oh("微信用户不存在");
+                throw Oops.Oh("微信登录");
             return new
             {
-                wxUser.Id,
-                wxUser.OpenId,
-                wxUser.NickName,
                 wxUser.Avatar,
                 accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
                 {
                     { ClaimConst.UserId, wxUser.Id },
                     { ClaimConst.OpenId, wxUser.OpenId },
-                    { ClaimConst.RealName, wxUser.NickName },
+                    { ClaimConst.NickName, wxUser.NickName },
+                    { ClaimConst.RunMode, RunModeEnum.OpenID },
                 })
             };
         }

+ 5 - 1
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs

@@ -48,7 +48,11 @@ namespace Admin.NET.Web.Core
         /// <returns></returns>
         private static async Task<bool> CheckAuthorzieAsync(DefaultHttpContext httpContext)
         {
-            // 管理员跳过判断
+            // 三方授权模式
+            if (App.User.FindFirst(ClaimConst.RunMode)?.Value == ((int)RunModeEnum.OpenID).ToString())
+                return true;
+
+            // 管理员判断
             if (App.User.FindFirst(ClaimConst.SuperAdmin)?.Value == ((int)UserTypeEnum.SuperAdmin).ToString())
                 return true;