e49c42ad641fa7ddaa4250ffd408666b087d1d48..611af5472b33cbe81a1433ab29e26502a9aac795
2025-09-01 sunpengfei
feat:开发
611af5 对比 | 目录
2025-09-01 sunpengfei
feat:开发
34af82 对比 | 目录
2025-09-01 sunpengfei
feat:开发
bc7c0f 对比 | 目录
2025-09-01 sunpengfei
feat:开发
185eca 对比 | 目录
2025-09-01 sunpengfei
feat:开发
89180f 对比 | 目录
15个文件已添加
15个文件已修改
1527 ■■■■■ 已修改文件
FlexJobApi.CommonServer.Application/LogRecords/Queries/GetTraceIdLogQueryHandler.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/UserServer/Enterprises/AlipayFundExpandindirectOrder.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Enums/Common/EnumResourceController.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccess.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.xml 439 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Queries/GetEnterpriseEmployeesQuery.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Queries/GetPersonalUserElectronSignQuery.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/AlipayFundExpandindirectCreateCommand.cs 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/AlipayFundExpandindirectCreateNotifyCommand.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/AlipayFundExpandindirectImageUploadCommand.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/AlipayUserAgreementPageSignNotifyQuery.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/AlipayUtils/AlipayOptions.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/AlipayFundExpandindirectCreateCommandHandler.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/AlipayUserAgreementPageSignNotifyQueryHandler.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserInfosQueryHandler.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/AlipayCert/CSR文件.csr 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/AlipayCert/alipayCertPublicKey_RSA2.crt 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/AlipayCert/alipayRootCert.crt 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/AlipayCert/appCertPublicKey_2021004171602214.crt 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/Startup.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/appsettings.json 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.CommonServer.Application/LogRecords/Queries/GetTraceIdLogQueryHandler.cs
@@ -50,10 +50,11 @@
                .Where(it => it.TraceId == request.TraceId)
                .ProjectToType<GetDbAuditLogsQueryResultItem>()
                .ToListAsync();
            var userIds = result.ResourceLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId)
                .Union(result.ExceptionLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId))
                .Union(result.DbAuditLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId));
            if (userIds.IsNullOrEmpty())
            var userIds = result.ResourceLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId!.Value)
                .Union(result.ExceptionLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId!.Value))
                .Union(result.DbAuditLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId!.Value))
                .ToList();
            if (userIds.IsNotNull())
            {
                var users = await repUser.AsQueryable().AsNoTracking()
                   .Where(it => userIds.Contains(it.Id))
FlexJobApi.Core/Entities/UserServer/Enterprises/AlipayFundExpandindirectOrder.cs
New file
@@ -0,0 +1,102 @@
using Aop.Api.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace FlexJobApi.Core
{
    /// <summary>
    /// èµ„金二级商户KYB代进件单
    /// </summary>
    public class AlipayFundExpandindirectOrder : CommonEntity
    {
        /// <summary>
        /// äº§å“ç 
        /// </summary>
        public string ProductCode { get; set; }
        /// <summary>
        /// åœºæ™¯ç 
        /// </summary>
        public string BizScene { get; set; }
        /// <summary>
        /// å¤–部单号
        /// </summary>
        public string OutBizNo { get; set; }
        /// <summary>
        /// äºŒçº§å•†æˆ·ä¿¡æ¯-标识
        /// </summary>
        public string Identity { get; set; }
        /// <summary>
        /// äºŒçº§å•†æˆ·ä¿¡æ¯-标识类型
        /// </summary>
        public string IdentityType { get; set; }
        /// <summary>
        /// äºŒçº§å•†æˆ·ä¿¡æ¯-姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// ä¸šåŠ¡ç±»åž‹
        /// </summary>
        public string BizType { get; set; }
        /// <summary>
        /// åŽŸè¿›ä»¶å•id
        /// </summary>
        public string OriginalOrderId { get; set; }
        /// <summary>
        /// èµ„金记账本的业务场景
        /// </summary>
        public string SceneCode { get; set; }
        /// <summary>
        /// è½¬è´¦åœºæ™¯è¯´æ˜Ž
        /// </summary>
        public string SceneDirections { get; set; }
        /// <summary>
        /// è½¬è´¦åœºæ™¯æˆªå›¾
        /// </summary>
        public string SceneImageOssUrl { get; set; }
        /// <summary>
        /// è½¬è´¦åœºæ™¯æˆªå›¾
        /// </summary>
        public string SceneImage { get; set; }
        /// <summary>
        /// å•†æˆ·è¡Œä¸šèµ„质图片
        /// </summary>
        public string SceneQualificationImageOssUrl { get; set; }
        /// <summary>
        /// å•†æˆ·è¡Œä¸šèµ„质协议文本
        /// </summary>
        public string SceneQualificationText { get; set; }
        /// <summary>
        /// å•†æˆ·è¡Œä¸šèµ„质图片或协议文本
        /// </summary>
        public string SceneQualificationImage { get; set; }
        /// <summary>
        /// å•†æˆ·ç«™ç‚¹ä¿¡æ¯
        /// </summary>
        public string Sites { get; set; }
        /// <summary>
        /// è¿›ä»¶å•id
        /// </summary>
        public string OrderId { get; set; }
        /// <summary>
        /// è¿›ä»¶å•状态
        /// å®¡æ‰¹ä¸­: PROCESSING
        /// å·²ç”Ÿæ•ˆ: VALID
        /// å®¡æ‰¹ä¸é€šè¿‡: INVALID
        /// å·²åºŸå¼ƒ: DISUSE
        /// å·²æ’¤é”€: REVOKED
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// è¿›ä»¶å•任务完结时间
        /// </summary>
        public string TaskFinishTime { get; set; }
        /// <summary>
        /// è¿›ä»¶å•审核不通过原因
        /// </summary>
        public string RiskReviewRemark { get; set; }
    }
}
FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
New file
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// ä¼ä¸šé’±åŒ…
    /// </summary>
    public class EnterpriseWallet : CommonEntity
    {
        /// <summary>
        /// ä¼ä¸šId
        /// </summary>
        public Guid EnterpriseId { get; set; }
        /// <summary>
        /// ä¼ä¸š
        /// </summary>
        public Enterprise Enterprise { get; set; }
        /// <summary>
        /// é€šé“
        /// </summary>
        public EnumEnterpriseWalletAccess Access { get; set; }
    }
}
FlexJobApi.Core/Enums/Common/EnumResourceController.cs
@@ -89,6 +89,11 @@
        [ResourceController(EnumResourceService.UserServer, "Enterprise")]
        UserServerEnterprise,
        /// <summary>
        /// ä¼ä¸šé’±åŒ…
        /// </summary>
        [ResourceController(EnumResourceService.UserServer, "EnterpriseWallet")]
        UserServerEnterpriseWallet,
        /// <summary>
        /// çµå·¥ä¿¡æ¯
        /// </summary>
        [ResourceController(EnumResourceService.UserServer, "EnterpriseEmployee")]
FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccess.cs
New file
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// ä¼ä¸šé’±åŒ…通道
    /// </summary>
    public enum EnumEnterpriseWalletAccess
    {
        /// <summary>
        /// æ”¯ä»˜å®
        /// </summary>
        Alipay = 10
    }
}
FlexJobApi.Core/FlexJobApi.Core.csproj
@@ -17,6 +17,8 @@
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="AlipayEasySDK" Version="2.1.3" />
        <PackageReference Include="AlipaySDKNet.Standard" Version="4.9.751" />
        <PackageReference Include="aliyun-net-sdk-core" Version="1.5.6" />
        <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.14.1" />
        <PackageReference Include="Baidu.AI" Version="4.15.16" />
FlexJobApi.Core/FlexJobApi.Core.xml
@@ -1334,6 +1334,116 @@
            ç”µå­ç­¾é€šé“
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.AlipayFundExpandindirectOrder">
            <summary>
            èµ„金二级商户KYB代进件单
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.ProductCode">
            <summary>
            äº§å“ç 
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.BizScene">
            <summary>
            åœºæ™¯ç 
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.OutBizNo">
            <summary>
            å¤–部单号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.Identity">
            <summary>
            äºŒçº§å•†æˆ·ä¿¡æ¯-标识
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.IdentityType">
            <summary>
            äºŒçº§å•†æˆ·ä¿¡æ¯-标识类型
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.Name">
            <summary>
            äºŒçº§å•†æˆ·ä¿¡æ¯-姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.BizType">
            <summary>
            ä¸šåŠ¡ç±»åž‹
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.OriginalOrderId">
            <summary>
            åŽŸè¿›ä»¶å•id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneCode">
            <summary>
            èµ„金记账本的业务场景
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneDirections">
            <summary>
            è½¬è´¦åœºæ™¯è¯´æ˜Ž
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneImageOssUrl">
            <summary>
            è½¬è´¦åœºæ™¯æˆªå›¾
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneImage">
            <summary>
            è½¬è´¦åœºæ™¯æˆªå›¾
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneQualificationImageOssUrl">
            <summary>
            å•†æˆ·è¡Œä¸šèµ„质图片
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneQualificationText">
            <summary>
            å•†æˆ·è¡Œä¸šèµ„质协议文本
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.SceneQualificationImage">
            <summary>
            å•†æˆ·è¡Œä¸šèµ„质图片或协议文本
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.Sites">
            <summary>
            å•†æˆ·ç«™ç‚¹ä¿¡æ¯
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.OrderId">
            <summary>
            è¿›ä»¶å•id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.Status">
            <summary>
            è¿›ä»¶å•状态
            å®¡æ‰¹ä¸­: PROCESSING
            å·²ç”Ÿæ•ˆ: VALID
            å®¡æ‰¹ä¸é€šè¿‡: INVALID
            å·²åºŸå¼ƒ: DISUSE
            å·²æ’¤é”€: REVOKED
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.TaskFinishTime">
            <summary>
            è¿›ä»¶å•任务完结时间
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectOrder.RiskReviewRemark">
            <summary>
            è¿›ä»¶å•审核不通过原因
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.Department">
            <summary>
            éƒ¨é—¨
@@ -1933,6 +2043,26 @@
        <member name="P:FlexJobApi.Core.EnterpriseUserCollect.ContactedTime">
            <summary>
            è”系时间
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.EnterpriseWallet">
            <summary>
            ä¼ä¸šé’±åŒ…
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.EnterpriseWallet.EnterpriseId">
            <summary>
            ä¼ä¸šId
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.EnterpriseWallet.Enterprise">
            <summary>
            ä¼ä¸š
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.EnterpriseWallet.Access">
            <summary>
            é€šé“
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.Menu">
@@ -2977,6 +3107,11 @@
            ä¼ä¸šä¿¡æ¯
            </summary>
        </member>
        <member name="F:FlexJobApi.Core.EnumResourceController.UserServerEnterpriseWallet">
            <summary>
            ä¼ä¸šé’±åŒ…
            </summary>
        </member>
        <member name="F:FlexJobApi.Core.EnumResourceController.UserServerEnterpriseEmployee">
            <summary>
            çµå·¥ä¿¡æ¯
@@ -3505,6 +3640,16 @@
        <member name="F:FlexJobApi.Core.EnumEnterpriseRealMethod.Identity4">
            <summary>
            ä¼ä¸šå››è¦ç´ 
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.EnumEnterpriseWalletAccess">
            <summary>
            ä¼ä¸šé’±åŒ…通道
            </summary>
        </member>
        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletAccess.Alipay">
            <summary>
            æ”¯ä»˜å®
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.EnumMenuType">
@@ -6681,6 +6826,11 @@
            å½•用状态
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.EnterpriseEmployeeId">
            <summary>
            çµå·¥Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ApplyButton">
            <summary>
            æˆ‘的报名列表状态
@@ -8504,7 +8654,7 @@
            é‚€è¯·çµå·¥ç­¾çº¦
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.InviteElectronSignCommand.Id">
        <member name="P:FlexJobApi.Core.InviteElectronSignCommand.Ids">
            <summary>
            çµå·¥Id
            </summary>
@@ -8544,7 +8694,7 @@
            çµå·¥è§£çº¦
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.StopElectronSignCommand.Id">
        <member name="P:FlexJobApi.Core.StopElectronSignCommand.Ids">
            <summary>
            çµå·¥Id
            </summary>
@@ -8816,6 +8966,11 @@
            ä¼ä¸šç­¾çº¦æ—¶é—´
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetEnterpriseEmployeesQueryResultItem.ContractUrl">
            <summary>
            ç”µå­åˆåŒ
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.GetPersonalUserElectronSignQuery">
            <summary>
            æŸ¥è¯¢ä¸ªäººç”¨æˆ·ç­¾çº¦è¯¦æƒ…
@@ -8841,6 +8996,11 @@
            åˆåŒç¼–号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.ContractTemplateAccess">
            <summary>
            åˆåŒæ¨¡æ¿é€šé“
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.UserSignContractStatus">
            <summary>
            çµå·¥ç­¾çº¦çŠ¶æ€
@@ -8860,6 +9020,12 @@
            <summary>
            ç­¾çº¦æ–¹ä¿¡æ¯-员工-证件号码
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.ContactPhoneNumber">
            <summary>
            ç­¾çº¦æ–¹ä¿¡æ¯-员工-手机号
            </summary>
            <remarks>联系电话</remarks>
        </member>
        <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.UserSignContractTime">
            <summary>
@@ -9254,6 +9420,236 @@
        <member name="P:FlexJobApi.Core.GetEnterprisesQueryResultItem.IsConfigured">
            <summary>
            æ˜¯å¦å·²é…ç½®
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand">
            <summary>
            æ”¯ä»˜å®èµ„金二级商户KYB代进件
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.ProductCode">
            <summary>
            äº§å“ç 
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.BizScene">
            <summary>
            åœºæ™¯ç 
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.OutBizNo">
            <summary>
            å¤–部单号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.Identity">
            <summary>
            äºŒçº§å•†æˆ·ä¿¡æ¯-标识
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.IdentityType">
            <summary>
            äºŒçº§å•†æˆ·ä¿¡æ¯-标识类型
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.Name">
            <summary>
            äºŒçº§å•†æˆ·ä¿¡æ¯-姓名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.BizType">
            <summary>
            ä¸šåŠ¡ç±»åž‹
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.OriginalOrderId">
            <summary>
            åŽŸè¿›ä»¶å•id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.SceneCode">
            <summary>
            èµ„金记账本的业务场景
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.SceneDirections">
            <summary>
            è½¬è´¦åœºæ™¯è¯´æ˜Ž
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.SceneImageOssUrl">
            <summary>
            è½¬è´¦åœºæ™¯æˆªå›¾
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.SceneQualificationImageOssUrl">
            <summary>
            å•†æˆ·è¡Œä¸šèµ„质图片
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.SceneQualificationText">
            <summary>
            å•†æˆ·è¡Œä¸šèµ„质协议文本
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommand.SitesInfo">
            <summary>
            å•†æˆ·ç«™ç‚¹ä¿¡æ¯
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.AlipayFundExpandindirectCreateCommandResult">
            <summary>
            æ”¯ä»˜å®èµ„金二级商户KYB代进件
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommandResult.CreateTime">
            <summary>
            è¿›ä»¶å•创建时间
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommandResult.OrderId">
            <summary>
            è¿›ä»¶å•id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommandResult.OutBizNo">
            <summary>
            å¤–部单号
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommandResult.Status">
            <summary>
            è¿›ä»¶å•状态
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateCommandResult.TaskFinishTime">
            <summary>
            è¿›ä»¶å•任务完结时间
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand">
            <summary>
            èµ„金二级商户KYB代进件状态通知接口
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.notify_id">
            <summary>
            é€šçŸ¥ID
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.utc_timestamp">
            <summary>
            æ¶ˆæ¯å‘送时的服务端时间
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.msg_method">
            <summary>
            æ¶ˆæ¯æŽ¥å£åç§°
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.app_id">
            <summary>
            æ¶ˆæ¯æŽ¥å—方的应用id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.version">
            <summary>
            ç‰ˆæœ¬å·(1.1版本为标准消息)
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.biz_content">
            <summary>
            æ¶ˆæ¯æŠ¥æ–‡
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.sign">
            <summary>
            ç­¾å
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.sign_type">
            <summary>
            ç­¾åç±»åž‹
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayFundExpandindirectCreateNotifyCommand.charset">
            <summary>
            ç¼–码集,该字符集为验签和解密所需要的字符集
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.AlipayFundExpandindirectImageUploadCommand">
            <summary>
            èµ„金二级商户KYB代进件文件上传接口
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery">
            <summary>
            æ”¯ä»˜å®ç”¨æˆ·æŽˆæƒåè®®ç­¾çº¦é€šçŸ¥
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.personal_product_code">
            <summary>
            åè®®äº§å“ç ï¼Œå•†æˆ·å’Œæ”¯ä»˜å®ç­¾çº¦æ—¶ç¡®å®šï¼Œä¸åŒä¸šåŠ¡åœºæ™¯å¯¹åº”ä¸åŒçš„ç­¾çº¦äº§å“ç ã€‚
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.sign_scene">
            <summary>
            å½“前签约的协议场景。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.status">
            <summary>
            NORMAL    åè®®å½“前状态 1. TEMP:暂存,协议未生效过; 2. NORMAL:正常; 3. STOP:暂停
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.alipay_user_id">
            <summary>
            ç”¨æˆ·ç­¾çº¦çš„æ”¯ä»˜å®è´¦å·å¯¹åº”的支付宝唯一用户号。 ä»¥2088开头的16位纯数字组成。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.agreement_no">
            <summary>
            æ”¯ä»˜å®ç³»ç»Ÿä¸­ç”¨ä»¥å”¯ä¸€æ ‡è¯†ç”¨æˆ·ç­¾çº¦è®°å½•的编号。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.sign_time">
            <summary>
            æ”¯ä»˜å®ä»£æ‰£åè®®çš„实际签约时间,格式为yyyy-MM-dd HH:mm:ss。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.external_logon_id">
            <summary>
            ç”¨æˆ·åœ¨å•†æˆ·ç½‘站的登录账号,如果商户接口中未传,则不会返回
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.app_id">
            <summary>
            æ”¯ä»˜å®åˆ†é…ç»™å¼€å‘者的应用Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.auth_app_id">
            <summary>
            æ”¯ä»˜å®åˆ†é…ç»™å•†æˆ·çš„应用Id
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.external_agreement_no">
            <summary>
            ä»£æ‰£åè®®ä¸­æ ‡ç¤ºç”¨æˆ·çš„唯一签约号(确保在商户系统中唯一)。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.valid_time">
            <summary>
            ç”¨æˆ·ä»£æ‰£åè®®çš„实际生效时间,格式为yyyy-MM-dd HH:mm:ss。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.alipay_logon_id">
            <summary>
            è¿”回脱敏的支付宝账号。
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.notify_type">
            <summary>
            ç”¨æˆ·ç­¾çº¦æˆåŠŸé€šçŸ¥ç±»åž‹
            </summary>
        </member>
        <member name="T:FlexJobApi.Core.DeleteMenuCommand">
@@ -11586,6 +11982,12 @@
            å§“名
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.GetPersonalLoginInfoQueryResult.ContactPhoneNumber">
            <summary>
            æ‰‹æœºå·
            </summary>
            <remarks>联系电话</remarks>
        </member>
        <member name="P:FlexJobApi.Core.GetPersonalLoginInfoQueryResult.IsReal">
            <summary>
            æ˜¯å¦å®žå
@@ -11861,6 +12263,39 @@
            <param name="logier"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.Core.AlipayUtils">
            <summary>
            é˜¿é‡Œæ”¯ä»˜å·¥å…·
            </summary>
        </member>
        <member name="M:FlexJobApi.Core.AlipayUtils.FundExpandindirectImageUpload(Aop.Api.Request.AlipayFundExpandindirectImageUploadRequest)">
            <summary>
            èµ„金二级商户KYB代进件
            </summary>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.AlipayUtils.FundExpandindirectCreate(Aop.Api.Domain.AlipayFundExpandindirectCreateModel,System.String)">
            <summary>
            èµ„金二级商户KYB代进件
            </summary>
            <param name="model"></param>
            <param name="notifyUrl"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.AlipayUtils.FundExpandindirectOrderQuery(Aop.Api.Domain.AlipayFundExpandindirectOrderQueryModel)">
            <summary>
            èµ„金二级商户KYB代进件单查询接口
            </summary>
            <param name="model"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.AlipayUtils.FundExpandindirectOrderCancel(Aop.Api.Domain.AlipayFundExpandindirectOrderCancelModel)">
            <summary>
            èµ„金二级商户KYB代进件单取消接口
            </summary>
            <param name="model"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.Core.AliyunOptions">
            <summary>
            é˜¿é‡Œäº‘配置
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs
@@ -11,12 +11,17 @@
    /// é‚€è¯·çµå·¥ç­¾çº¦
    /// </summary>
    [Resource([EnumResourceController.UserServerEnterpriseEmployee])]
    public class InviteElectronSignCommand : IRequest<Guid>
    public class InviteElectronSignCommand : IRequest<int>
    {
        public InviteElectronSignCommand()
        {
            Ids = [];
        }
        /// <summary>
        /// çµå·¥Id
        /// </summary>
        public Guid Id { get; set; }
        public List<Guid> Ids { get; set; }
        /// <summary>
        /// åˆåŒæ¨¡æ¿Id
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs
@@ -11,11 +11,16 @@
    /// çµå·¥è§£çº¦
    /// </summary>
    [Resource([EnumResourceController.UserServerEnterpriseEmployee])]
    public class StopElectronSignCommand : IRequest<Guid>
    public class StopElectronSignCommand : IRequest<int>
    {
        public StopElectronSignCommand()
        {
            Ids = [];
        }
        /// <summary>
        /// çµå·¥Id
        /// </summary>
        public Guid Id { get; set; }
        public List<Guid> Ids { get; set; }
    }
}
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Queries/GetEnterpriseEmployeesQuery.cs
@@ -189,5 +189,10 @@
        /// </summary>
        public DateTime? EnterpriseSignContractTime { get; set; }
        /// <summary>
        /// ç”µå­åˆåŒ
        /// </summary>
        public string ContractUrl { get; set; }
    }
}
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Queries/GetPersonalUserElectronSignQuery.cs
@@ -38,6 +38,11 @@
        public string ContractCode { get; set; }
        /// <summary>
        /// åˆåŒæ¨¡æ¿é€šé“
        /// </summary>
        public EnumElectronSignAccess? ContractTemplateAccess { get; set; }
        /// <summary>
        /// çµå·¥ç­¾çº¦çŠ¶æ€
        /// </summary>
        public EnumTaskUserSignContractStatus? UserSignContractStatus { get; set; }
@@ -60,6 +65,12 @@
        public string Identity { get; set; }
        /// <summary>
        /// ç­¾çº¦æ–¹ä¿¡æ¯-员工-手机号
        /// </summary>
        /// <remarks>联系电话</remarks>
        public string ContactPhoneNumber { get; set; }
        /// <summary>
        /// ç­¾çº¦æ–¹ä¿¡æ¯-员工-签约时间
        /// </summary>
        public DateTime? UserSignContractTime { get; set; }
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/AlipayFundExpandindirectCreateCommand.cs
New file
@@ -0,0 +1,114 @@
using MediatR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace FlexJobApi.Core
{
    /// <summary>
    /// æ”¯ä»˜å®èµ„金二级商户KYB代进件
    /// </summary>
    [Resource([EnumResourceController.UserServerEnterpriseWallet])]
    public class AlipayFundExpandindirectCreateCommand : SaveDataCommand
    {
        /// <summary>
        /// äº§å“ç 
        /// </summary>
        public string ProductCode { get; set; }
        /// <summary>
        /// åœºæ™¯ç 
        /// </summary>
        public string BizScene { get; set; }
        /// <summary>
        /// å¤–部单号
        /// </summary>
        public string OutBizNo { get; set; }
        /// <summary>
        /// äºŒçº§å•†æˆ·ä¿¡æ¯-标识
        /// </summary>
        public string Identity { get; set; }
        /// <summary>
        /// äºŒçº§å•†æˆ·ä¿¡æ¯-标识类型
        /// </summary>
        public string IdentityType { get; set; }
        /// <summary>
        /// äºŒçº§å•†æˆ·ä¿¡æ¯-姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// ä¸šåŠ¡ç±»åž‹
        /// </summary>
        public string BizType { get; set; }
        /// <summary>
        /// åŽŸè¿›ä»¶å•id
        /// </summary>
        public string OriginalOrderId { get; set; }
        /// <summary>
        /// èµ„金记账本的业务场景
        /// </summary>
        public string SceneCode { get; set; }
        /// <summary>
        /// è½¬è´¦åœºæ™¯è¯´æ˜Ž
        /// </summary>
        public string SceneDirections { get; set; }
        /// <summary>
        /// è½¬è´¦åœºæ™¯æˆªå›¾
        /// </summary>
        public string SceneImageOssUrl { get; set; }
        /// <summary>
        /// å•†æˆ·è¡Œä¸šèµ„质图片
        /// </summary>
        public string SceneQualificationImageOssUrl { get; set; }
        /// <summary>
        /// å•†æˆ·è¡Œä¸šèµ„质协议文本
        /// </summary>
        public string SceneQualificationText { get; set; }
        /// <summary>
        /// å•†æˆ·ç«™ç‚¹ä¿¡æ¯
        /// </summary>
        public AlipayFundExpandindirectCreateCommandSites SitesInfo { get; set; }
    }
    public class AlipayFundExpandindirectCreateCommandSites
    {
        public string WEBSITE { get; set; }
        public string APP { get; set; }
        public string GONGZH { get; set; }
        public string QITA { get; set; }
        public string XCHENGXU_ZHI { get; set; }
    }
    /// <summary>
    /// æ”¯ä»˜å®èµ„金二级商户KYB代进件
    /// </summary>
    public class AlipayFundExpandindirectCreateCommandResult
    {
        /// <summary>
        /// è¿›ä»¶å•创建时间
        /// </summary>
        public string CreateTime { get; set; }
        /// <summary>
        /// è¿›ä»¶å•id
        /// </summary>
        public string OrderId { get; set; }
        /// <summary>
        /// å¤–部单号
        /// </summary>
        public string OutBizNo { get; set; }
        /// <summary>
        /// è¿›ä»¶å•状态
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// è¿›ä»¶å•任务完结时间
        /// </summary>
        public string TaskFinishTime { get; set; }
    }
}
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/AlipayFundExpandindirectCreateNotifyCommand.cs
New file
@@ -0,0 +1,53 @@
using MediatR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// èµ„金二级商户KYB代进件状态通知接口
    /// </summary>
    [Resource([EnumResourceController.UserServerEnterpriseWallet])]
    public class AlipayFundExpandindirectCreateNotifyCommand : IRequest<bool>
    {
        /// <summary>
        /// é€šçŸ¥ID
        /// </summary>
        public string notify_id { get; set; }
        /// <summary>
        /// æ¶ˆæ¯å‘送时的服务端时间
        /// </summary>
        public string utc_timestamp { get; set; }
        /// <summary>
        /// æ¶ˆæ¯æŽ¥å£åç§°
        /// </summary>
        public string msg_method { get; set; }
        /// <summary>
        /// æ¶ˆæ¯æŽ¥å—方的应用id
        /// </summary>
        public string app_id { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬å·(1.1版本为标准消息)
        /// </summary>
        public string version { get; set; }
        /// <summary>
        /// æ¶ˆæ¯æŠ¥æ–‡
        /// </summary>
        public string biz_content { get; set; }
        /// <summary>
        /// ç­¾å
        /// </summary>
        public string sign { get; set; }
        /// <summary>
        /// ç­¾åç±»åž‹
        /// </summary>
        public string sign_type { get; set; }
        /// <summary>
        /// ç¼–码集,该字符集为验签和解密所需要的字符集
        /// </summary>
        public string charset { get; set; }
    }
}
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/AlipayFundExpandindirectImageUploadCommand.cs
New file
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// èµ„金二级商户KYB代进件文件上传接口
    /// </summary>
    public class AlipayFundExpandindirectImageUploadCommand
    {
    }
}
FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/AlipayUserAgreementPageSignNotifyQuery.cs
New file
@@ -0,0 +1,69 @@
using MediatR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// æ”¯ä»˜å®ç”¨æˆ·æŽˆæƒåè®®ç­¾çº¦é€šçŸ¥
    /// </summary>
    [Resource([EnumResourceController.UserServerEnterpriseWallet])]
    public class AlipayUserAgreementPageSignNotifyQuery : IRequest<bool>
    {
        /// <summary>
        /// åè®®äº§å“ç ï¼Œå•†æˆ·å’Œæ”¯ä»˜å®ç­¾çº¦æ—¶ç¡®å®šï¼Œä¸åŒä¸šåŠ¡åœºæ™¯å¯¹åº”ä¸åŒçš„ç­¾çº¦äº§å“ç ã€‚
        /// </summary>
        public string personal_product_code { get; set; }
        /// <summary>
        /// å½“前签约的协议场景。
        /// </summary>
        public string sign_scene { get; set; }
        /// <summary>
        /// NORMAL    åè®®å½“前状态 1. TEMP:暂存,协议未生效过; 2. NORMAL:正常; 3. STOP:暂停
        /// </summary>
        public string status { get; set; }
        /// <summary>
        /// ç”¨æˆ·ç­¾çº¦çš„æ”¯ä»˜å®è´¦å·å¯¹åº”的支付宝唯一用户号。 ä»¥2088开头的16位纯数字组成。
        /// </summary>
        public string alipay_user_id { get; set; }
        /// <summary>
        /// æ”¯ä»˜å®ç³»ç»Ÿä¸­ç”¨ä»¥å”¯ä¸€æ ‡è¯†ç”¨æˆ·ç­¾çº¦è®°å½•的编号。
        /// </summary>
        public string agreement_no { get; set; }
        /// <summary>
        /// æ”¯ä»˜å®ä»£æ‰£åè®®çš„实际签约时间,格式为yyyy-MM-dd HH:mm:ss。
        /// </summary>
        public string sign_time { get; set; }
        /// <summary>
        /// ç”¨æˆ·åœ¨å•†æˆ·ç½‘站的登录账号,如果商户接口中未传,则不会返回
        /// </summary>
        public string external_logon_id { get; set; }
        /// <summary>
        /// æ”¯ä»˜å®åˆ†é…ç»™å¼€å‘者的应用Id
        /// </summary>
        public string app_id { get; set; }
        /// <summary>
        /// æ”¯ä»˜å®åˆ†é…ç»™å•†æˆ·çš„应用Id
        /// </summary>
        public string auth_app_id { get; set; }
        /// <summary>
        /// ä»£æ‰£åè®®ä¸­æ ‡ç¤ºç”¨æˆ·çš„唯一签约号(确保在商户系统中唯一)。
        /// </summary>
        public string external_agreement_no { get; set; }
        /// <summary>
        /// ç”¨æˆ·ä»£æ‰£åè®®çš„实际生效时间,格式为yyyy-MM-dd HH:mm:ss。
        /// </summary>
        public string valid_time { get; set; }
        /// <summary>
        /// è¿”回脱敏的支付宝账号。
        /// </summary>
        public string alipay_logon_id { get; set; }
        /// <summary>
        /// ç”¨æˆ·ç­¾çº¦æˆåŠŸé€šçŸ¥ç±»åž‹
        /// </summary>
        public string notify_type { get; set; }
    }
}
FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs
@@ -1,6 +1,7 @@
using MediatR;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -37,6 +38,12 @@
        public string Name { get; set; }
        /// <summary>
        /// æ‰‹æœºå·
        /// </summary>
        /// <remarks>联系电话</remarks>
        public string ContactPhoneNumber { get; set; }
        /// <summary>
        /// æ˜¯å¦å®žå
        /// </summary>
        public bool IsReal { get; set; }
FlexJobApi.Core/Utils/AlipayUtils/AlipayOptions.cs
New file
@@ -0,0 +1,25 @@
using Furion.ConfigurableOptions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    public class AlipayOptions : IConfigurableOptions
    {
        public string ServerUrl { get; set; }
        public string AppId { get; set; }
        public string PrivateKey { get; set; }
        public string Format { get; set; }
        public string Charset { get; set; }
        public string SignType { get; set; }
        public string AppCertPath { get; set; }
        public string AlipayPublicCertPath { get; set; }
        public string RootCertContent { get; set; }
        public string AlipayPublicKey { get; set; }
        public string NotifyUrl { get; set; }
        public string EncryptKey { get; set; }
    }
}
FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs
New file
@@ -0,0 +1,132 @@
using Aliyun.OSS;
using Aop.Api;
using Aop.Api.Domain;
using Aop.Api.Request;
using Aop.Api.Response;
using Aop.Api.Util;
using Furion.FriendlyException;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    /// <summary>
    /// é˜¿é‡Œæ”¯ä»˜å·¥å…·
    /// </summary>
    public class AlipayUtils
    {
        private readonly IAopClient alipayClient;
        public AlipayUtils(IOptions<AlipayOptions> options)
        {
            alipayClient = new DefaultAopClient(new AlipayConfig
            {
                ServerUrl = options.Value.ServerUrl,
                AppId = options.Value.AppId,
                PrivateKey = options.Value.PrivateKey,
                Format = options.Value.Format,
                Charset = options.Value.Charset,
                SignType = options.Value.SignType,
                AppCertPath = options.Value.AppCertPath,
                AlipayPublicCertPath = options.Value.AlipayPublicCertPath,
                RootCertContent = options.Value.RootCertContent,
                AlipayPublicKey = options.Value.AlipayPublicKey,
                EncryptKey = options.Value.EncryptKey,
            });
        }
        public void UserAgreementPageSign(AlipayUserAgreementPageSignModel model)
        {
            // åˆå§‹åŒ–SDK
            // æž„造请求参数以调用接口
            AlipayUserAgreementPageSignRequest request = new AlipayUserAgreementPageSignRequest();
            model.PersonalProductCode = "FUND_SAFT_SIGN_WITHHOLDING_P";
            model.SignScene = "INDUSTRY|SATF_ACC";
            model.ThirdPartyType = "PARTNER";
            model.AccessParams = new AccessParams
            {
                Channel = ""
            };
            // è®¾ç½®ç­¾çº¦æœ‰æ•ˆæ—¶é—´é™åˆ¶
            model.EffectTime = 300;
            request.SetBizModel(model);
            //request.SetNotifyUrl();
            AlipayUserAgreementPageSignResponse response = alipayClient.pageExecute(request, null, "GET");
            string pageRedirectionData = response.Body;
            Console.WriteLine(pageRedirectionData);
            if (!response.IsError)
            {
                Console.WriteLine("调用成功");
            }
            else
            {
                Console.WriteLine("调用失败");
            }
        }
        /// <summary>
        /// èµ„金二级商户KYB代进件
        /// </summary>
        /// <returns></returns>
        public AlipayFundExpandindirectImageUploadResponse FundExpandindirectImageUpload(AlipayFundExpandindirectImageUploadRequest request)
        {
            AlipayFundExpandindirectImageUploadResponse response = alipayClient.Execute(request);
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.Msg);
            return response;
        }
        /// <summary>
        /// èµ„金二级商户KYB代进件
        /// </summary>
        /// <param name="model"></param>
        /// <param name="notifyUrl"></param>
        /// <returns></returns>
        public AlipayFundExpandindirectCreateResponse FundExpandindirectCreate(AlipayFundExpandindirectCreateModel model, string notifyUrl = null)
        {
            AlipayFundExpandindirectCreateRequest request = new AlipayFundExpandindirectCreateRequest();
            request.SetBizModel(model);
            if (notifyUrl.IsNotNull())
            {
                request.SetNotifyUrl(notifyUrl);
            }
            AlipayFundExpandindirectCreateResponse response = alipayClient.Execute(request);
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.Msg);
            return response;
        }
        /// <summary>
        /// èµ„金二级商户KYB代进件单查询接口
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public AlipayFundExpandindirectOrderQueryResponse FundExpandindirectOrderQuery(AlipayFundExpandindirectOrderQueryModel model)
        {
            AlipayFundExpandindirectOrderQueryRequest request = new AlipayFundExpandindirectOrderQueryRequest();
            request.SetBizModel(model);
            AlipayFundExpandindirectOrderQueryResponse response = alipayClient.Execute(request);
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.Msg);
            return response;
        }
        /// <summary>
        /// èµ„金二级商户KYB代进件单取消接口
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public AlipayFundExpandindirectOrderCancelResponse FundExpandindirectOrderCancel(AlipayFundExpandindirectOrderCancelModel model)
        {
            AlipayFundExpandindirectOrderCancelRequest request = new AlipayFundExpandindirectOrderCancelRequest();
            request.SetBizModel(model);
            AlipayFundExpandindirectOrderCancelResponse response = alipayClient.Execute(request);
            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.Msg);
            return response;
        }
    }
}
FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -42,10 +42,10 @@
        ) :
        IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>,
        IRequestHandler<EditEnterpriseEmployeeCommand, Guid>,
        IRequestHandler<InviteElectronSignCommand, Guid>,
        IRequestHandler<InviteElectronSignCommand, int>,
        IRequestHandler<PersonalUserElectronSignCommand, PersonalUserElectronSignCommandResult>,
        IRequestHandler<EnterpriseUserElectronSignCommand, EnterpriseUserElectronSignCommandResult>,
        IRequestHandler<StopElectronSignCommand, Guid>
        IRequestHandler<StopElectronSignCommand, int>
    {
        private readonly IMediator mediator = mediator;
        private readonly IRepository<EnterpriseEmployee> rep = rep;
@@ -220,42 +220,49 @@
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<Guid> Handle(InviteElectronSignCommand request, CancellationToken cancellationToken)
        public async Task<int> Handle(InviteElectronSignCommand request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            var entity = await rep.AsQueryable()
                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.Id)
                .FirstOrDefaultAsync();
            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工");
            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, "已邀请");
            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "已签约");
            await mediator.Send(new CheckContractTemplateCommand
            {
                Id = request.ContractTemplateId
            }, cancellationToken);
            entity.ContractTemplateId = request.ContractTemplateId;
            entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait;
            entity.UserSignContractTime = null;
            entity.EnterpriseSignContractStatus = null;
            entity.EnterpriseSignContractTime = null;
            entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
            var contract = new EnterpriseEmployeeContract
            var entities = await rep.AsQueryable()
                .Where(it => it.EnterpriseId == logier.EnterpriseId && request.Ids.Contains(it.Id))
                .ToListAsync();
            foreach (var id in request.Ids)
            {
                EnterpriseEmployeeId = entity.Id,
                ContractTemplateId = entity.ContractTemplateId,
                ContractCode = entity.ContractCode,
                UserSignContractStatus = entity.UserSignContractStatus,
            };
            await repEnterpriseEmployeeContract.InsertAsync(contract);
            //await mediator.Send(new SaveEnterpriseCostCommand
            //{
            //    EnterpriseId = logier.EnterpriseId!.Value,
            //    ContractTemplateId = request.ContractTemplateId,
            //    EnterpriseEmployeeContractId = contract.Id,
            //    Type = EnumEnterpriseCostType.ElectronSign
            //});
            await rep.UpdateAsync(entity);
            return entity.Id;
                var entity = entities.FirstOrDefault(it => it.Id == id);
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工");
                if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, $"已邀请{entity.Name}");
                if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, $"已签约{entity.Name}");
                entity.ContractTemplateId = request.ContractTemplateId;
                entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait;
                entity.UserSignContractTime = null;
                entity.EnterpriseSignContractStatus = null;
                entity.EnterpriseSignContractTime = null;
                entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
                entity.ContractUrl = null;
                var contract = new EnterpriseEmployeeContract
                {
                    EnterpriseEmployeeId = entity.Id,
                    ContractTemplateId = entity.ContractTemplateId,
                    ContractCode = entity.ContractCode,
                    UserSignContractStatus = entity.UserSignContractStatus,
                };
                await repEnterpriseEmployeeContract.InsertAsync(contract);
                //await mediator.Send(new SaveEnterpriseCostCommand
                //{
                //    EnterpriseId = logier.EnterpriseId!.Value,
                //    ContractTemplateId = request.ContractTemplateId,
                //    EnterpriseEmployeeContractId = contract.Id,
                //    Type = EnumEnterpriseCostType.ElectronSign
                //});
                await rep.UpdateAsync(entity);
            }
            return entities.Count;
        }
        /// <summary>
@@ -385,29 +392,35 @@
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<Guid> Handle(StopElectronSignCommand request, CancellationToken cancellationToken)
        public async Task<int> Handle(StopElectronSignCommand request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            var entity = await rep.AsQueryable()
                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.Id)
                .FirstOrDefaultAsync();
            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工");
            if (entity.UserSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "未签约");
            entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop;
            entity.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop;
            await rep.UpdateAsync(entity);
            var entities = await rep.AsQueryable()
                .Include(it => it.Contracts)
                .Where(it => it.EnterpriseId == logier.EnterpriseId && request.Ids.Contains(it.Id))
                .ToListAsync();
            foreach (var id in request.Ids)
            {
                var entity = entities.FirstOrDefault(it => it.Id == id);
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工");
                if (entity.UserSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, $"未签约{entity.Name}");
                entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop;
                entity.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop;
                await rep.UpdateAsync(entity);
            var contract = await repEnterpriseEmployeeContract.AsQueryable()
                .OrderByDescending(it => it.CreatedTime)
                .Where(it => it.EnterpriseEmployeeId == entity.Id)
                .FirstOrDefaultAsync();
            if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "合同");
            contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop;
            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop;
            await repEnterpriseEmployeeContract.UpdateAsync(contract);
                var contract = entity.Contracts
                    .OrderByDescending(it => it.CreatedTime)
                    .FirstOrDefault();
                if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, $"与{entity.Name}的合同");
                contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop;
                contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop;
                await repEnterpriseEmployeeContract.UpdateAsync(contract);
            }
            var taskUsers = await repTaskInfoUser.AsQueryable()
                .Where(it => it.EnterpriseEmployeeId == entity.Id && it.HireStatus == EnumTaskUserHireStatus.Pass)
                .Where(it =>
                    it.HireStatus == EnumTaskUserHireStatus.Pass
                    && request.Ids.Contains(it.EnterpriseEmployeeId))
                .ToListAsync();
            if (taskUsers.IsNotNull())
            {
@@ -418,7 +431,7 @@
                await repTaskInfoUser.UpdateAsync(taskUsers);
            }
            return entity.Id;
            return entities.Count;
        }
    }
}
FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
@@ -65,7 +65,7 @@
            {
                q = q.Where(it => (it.UserId.HasValue && it.User.IsReal) == request.IsReal.Value);
            }
            if (request.UserSignContractStatus.HasValue && logier.ClientType == EnumClientType.Wxmp)
            if (request.UserSignContractStatus.HasValue)
            {
                if (logier.ClientType == EnumClientType.Wxmp)
                {
@@ -120,13 +120,14 @@
                UserSignContractStatus = it.UserSignContractStatus,
                HireTime = it.TaskInfoUsers
                    .OrderBy(tu => tu.HireTime)
                    .Where(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue)
                    .Where(tu => tu.HireTime.HasValue)
                    .Select(tu => tu.HireTime)
                    .FirstOrDefault(),
                UserRealTime = it.User.RealTime,
                UserSignContractTime = it.UserSignContractTime,
                EnterpriseSignContractStatus = it.EnterpriseSignContractStatus,
                EnterpriseSignContractTime = it.EnterpriseSignContractTime
                EnterpriseSignContractTime = it.EnterpriseSignContractTime,
                ContractUrl = it.ContractUrl,
            });
            return await request.PageModel.GetPagedListAsync<GetEnterpriseEmployeesQueryResult, GetEnterpriseEmployeesQueryResultItem>(s, cancellationToken);
        }
FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/AlipayFundExpandindirectCreateCommandHandler.cs
New file
@@ -0,0 +1,97 @@
using Aop.Api.Domain;
using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Furion.FriendlyException;
using Furion.HttpRemote;
using Mapster;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.UserServer.Application
{
    /// <summary>
    /// æ”¯ä»˜å®èµ„金二级商户KYB代进件
    /// </summary>
    public class AlipayFundExpandindirectCreateCommandHandler(
            AlipayUtils alipayUtils,
            IHttpRemoteService httpRemoteService,
            IRepository<AlipayFundExpandindirectOrder> rep
        ) :
        IRequestHandler<AlipayFundExpandindirectCreateCommand, Guid>
    {
        private readonly AlipayUtils alipayUtils = alipayUtils;
        private readonly IHttpRemoteService httpRemoteService = httpRemoteService;
        private readonly IRepository<AlipayFundExpandindirectOrder> rep = rep;
        /// <summary>
        /// æ”¯ä»˜å®èµ„金二级商户KYB代进件
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<Guid> Handle(AlipayFundExpandindirectCreateCommand request, CancellationToken cancellationToken)
        {
            AlipayFundExpandindirectOrder? entity;
            if (request.Id.HasValue)
            {
                entity = await rep.AsQueryable()
                    .Where(it => it.Id == request.Id)
                    .FirstOrDefaultAsync(cancellationToken);
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "代进件单");
            }
            else
            {
                entity = new AlipayFundExpandindirectOrder();
            }
            if (request.SceneImageOssUrl.IsNotNull() && entity.SceneImageOssUrl != request.SceneImageOssUrl)
            {
                var url = AliyunOSSUtils.GetUrl(request.SceneImageOssUrl);
                var bytes = await httpRemoteService.GetAsByteArrayAsync(url);
                var imageType = url.Substring(url.LastIndexOf(".") + 1);
                var fileName = url.Substring(url.LastIndexOf("/") + 1);
                entity.SceneImage = alipayUtils.FundExpandindirectImageUpload(new Aop.Api.Request.AlipayFundExpandindirectImageUploadRequest
                {
                    ProductCode = request.ProductCode,
                    BizScene = request.BizScene,
                    ImageType = imageType,
                    ImageContent = new Aop.Api.Util.FileItem(fileName, bytes)
                }).ImageId;
            }
            if (request.SceneQualificationText.IsNotNull())
            {
                entity.SceneQualificationImage = request.SceneQualificationText;
            }
            else if (request.SceneQualificationImageOssUrl.IsNotNull() && entity.SceneQualificationImageOssUrl != request.SceneQualificationImageOssUrl)
            {
                var url = AliyunOSSUtils.GetUrl(request.SceneQualificationImageOssUrl);
                var bytes = await httpRemoteService.GetAsByteArrayAsync(url);
                var imageType = url.Substring(url.LastIndexOf(".") + 1);
                var fileName = url.Substring(url.LastIndexOf("/") + 1);
                entity.SceneQualificationImage = alipayUtils.FundExpandindirectImageUpload(new Aop.Api.Request.AlipayFundExpandindirectImageUploadRequest
                {
                    ProductCode = request.ProductCode,
                    BizScene = request.BizScene,
                    ImageType = imageType,
                    ImageContent = new Aop.Api.Util.FileItem(fileName, bytes)
                }).ImageId;
            }
            entity.Sites = request.SitesInfo.ToJson();
            request.Adapt(entity);
            if (request.Id.HasValue)
            {
                await rep.UpdateAsync(entity);
            }
            else
            {
                await rep.InsertAsync(entity);
            }
            var result = alipayUtils.FundExpandindirectCreate(entity.Adapt<AlipayFundExpandindirectCreateModel>());
            return entity.Id;
        }
    }
}
FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/AlipayUserAgreementPageSignNotifyQueryHandler.cs
New file
@@ -0,0 +1,28 @@
using FlexJobApi.Core;
using MediatR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.UserServer.Application
{
    /// <summary>
    /// æ”¯ä»˜å®ç”¨æˆ·æŽˆæƒåè®®ç­¾çº¦é€šçŸ¥
    /// </summary>
    public class AlipayUserAgreementPageSignNotifyQueryHandler :
        IRequestHandler<AlipayUserAgreementPageSignNotifyQuery, bool>
    {
        /// <summary>
        /// æ”¯ä»˜å®ç”¨æˆ·æŽˆæƒåè®®ç­¾çº¦é€šçŸ¥
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public Task<bool> Handle(AlipayUserAgreementPageSignNotifyQuery request, CancellationToken cancellationToken)
        {
            return Task.FromResult(true);
        }
    }
}
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -564,6 +564,37 @@
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.UserServer.Application.AlipayFundExpandindirectCreateCommandHandler">
            <summary>
            æ”¯ä»˜å®èµ„金二级商户KYB代进件
            </summary>
        </member>
        <member name="M:FlexJobApi.UserServer.Application.AlipayFundExpandindirectCreateCommandHandler.#ctor(FlexJobApi.Core.AlipayUtils,Furion.HttpRemote.IHttpRemoteService,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.AlipayFundExpandindirectOrder})">
            <summary>
            æ”¯ä»˜å®èµ„金二级商户KYB代进件
            </summary>
        </member>
        <member name="M:FlexJobApi.UserServer.Application.AlipayFundExpandindirectCreateCommandHandler.Handle(FlexJobApi.Core.AlipayFundExpandindirectCreateCommand,System.Threading.CancellationToken)">
            <summary>
            æ”¯ä»˜å®èµ„金二级商户KYB代进件
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="T:FlexJobApi.UserServer.Application.AlipayUserAgreementPageSignNotifyQueryHandler">
            <summary>
            æ”¯ä»˜å®ç”¨æˆ·æŽˆæƒåè®®ç­¾çº¦é€šçŸ¥
            </summary>
        </member>
        <member name="M:FlexJobApi.UserServer.Application.AlipayUserAgreementPageSignNotifyQueryHandler.Handle(FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery,System.Threading.CancellationToken)">
            <summary>
            æ”¯ä»˜å®ç”¨æˆ·æŽˆæƒåè®®ç­¾çº¦é€šçŸ¥
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="F:FlexJobApi.UserServer.Application.EnumUserErrorCodeType.u1000">
            <summary>
            è´¦å·æˆ–密码不存在
FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserInfosQueryHandler.cs
@@ -82,7 +82,7 @@
                HireTime = it.EnterpriseEmployees
                    .SelectMany(ee => ee.TaskInfoUsers)
                    .OrderByDescending(e => e.HireTime)
                    .Where(e => e.HireStatus == EnumTaskUserHireStatus.Pass && e.HireTime.HasValue)
                    .Where(e => e.HireTime.HasValue)
                    .Select(e => e.HireTime)
                    .FirstOrDefault(),
                SignContractTime = it.EnterpriseEmployees
@@ -120,7 +120,7 @@
                        : EnumTaskUserHireStatus.Wait,
                    HireTime = it.TaskInfoUsers
                        .OrderBy(tu => tu.HireTime)
                        .Where(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue)
                        .Where(tu => tu.HireTime.HasValue)
                        .Select(tu => tu.HireTime)
                        .FirstOrDefault(),
                    UserSignContractStatus = it.UserSignContractStatus,
FlexJobApi.Web.Entry/AlipayCert/CSRÎļþ.csr
New file
@@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICsTCCAZkCAQAwbDEJMAcGA1UEBhMAMQkwBwYDVQQIEwAxCTAHBgNVBAcTADEz
MDEGA1UECgwq5a6B5rOi5Yib6IOc5L+h5oGv5oqA5pyv5pyN5Yqh5pyJ6ZmQ5YWs
5Y+4MQkwBwYDVQQLEwAxCTAHBgNVBAMTADCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAKA6zoXnrah5BNUWGjYaID/4h1VxLRmVuAPySZ8KSbPuni136V3/
3nLssKZQ6YHPwV0lBJw2pLVMHHi1zvL3SH/IdMvMqlsGHYMwtMRC2KU66Ct3ZTYk
oYFZFBHjF4vp9zIY6fTla6onoIAyN2BswwS2OFAFrFwnF5w/q/8SKU/JHlTLW/y6
1Ji+Vy7wVXJ+TJCUwKHhbdfBEFzixTdfpXaWn/ZPosjNn24FwnOiJzUoBxkh2cIc
5vbfnBqjXdY7v50DfZR8Cgg0DzJ+nKK9pbD9Z7BH6R6dr3XzRHXHFUkWQf5HbRc1
xFKUxc58/Psytg9EWvgdBtZ0sbrPcbA9x5sCAwEAAaAAMA0GCSqGSIb3DQEBBAUA
A4IBAQCcHGqNyh6q7iyImLTi1/VOhwyfphmwETsN/+KNjpkLZN+pUf9hcUsxRObV
JdcYKdO/WTGGsghBINieKdXGtBlx0wyyM0MADURstr4SWBsktrwunwyyhzufuipx
d4Wo7kC9hmtOxmJbgn/lXr6tZyTUzukWgEuU5Pxfi9DGPm58Z1fZjHdfuoboeD9n
mgHPfd+YbuVNSa9wOilBskw35xSLXnUU8tL3PLthHElg43bnbpUOeBvSZ+5uJ9KU
7zz/1HGOBMl7EY+wMwgpr/5WAKPoAucJU1NEOMKqSHwWfjUEtkeoq87Cij8B0zLt
+WRnGLDsL5vyunOz00uJccxhZlON
-----END CERTIFICATE REQUEST-----
FlexJobApi.Web.Entry/AlipayCert/alipayCertPublicKey_RSA2.crt
New file
@@ -0,0 +1,43 @@
-----BEGIN CERTIFICATE-----
MIIDuDCCAqCgAwIBAgIQICQJCUhlwAIx+IQXPEEzhzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjQwOTA5MDYxMDM3WhcNMjkwOTA4MDYxMDM3WjCBmDELMAkGA1UEBhMCQ04x
MzAxBgNVBAoMKuWugeazouWIm+iDnOS/oeaBr+aKgOacr+acjeWKoeaciemZkOWFrOWPuDEPMA0G
A1UECwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZ
kOWFrOWPuC0yMDg4MDUwNTQyMDQyMzAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
h3ymDiC0//upxAEwekcap2S/soSgtxZsT+W+a/nOg1yF/IpJshpiAcj246BqihSD6q3CEjAYj80c
MnZJG/lfir/BRz1pGyCAKVWcyISj4DR+ADfehHa6XJh7BNMUhscKvB0SeFFL4HGUA/PgpnO/mEO5
PKai3o8UzwQu/atEja5TCDUqSogrTkLrYq+Dlmjc8UQENuWUx0PlnwnLrYpx4hIC3PjzpDSy8FCO
maHVG1JHyv+Nxng2//szWD9l2LGx4F1qe5jsYAgfE3aP2U5ryggZAgejBTKu6kBTMslsCFJIesG4
8OC3OGk0ZafVujUaGSrFbYQHZtUQkdiU1oVVGwIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJ
KoZIhvcNAQELBQADggEBAG/AwOEBETOShrkCIW/ViAYf/UopgL6txP7laTbAbI/xLJyy657S/ESs
MBLTqzuRt2e5kVdZZAq/8Bs4jscEYoiTpDB0vmWXtvjYumKyINeRuIBqn2PIESrm34WrJATkvLpj
2QRioL+rU1eXq2rYBpryFa+QNkEPb7xU7uadYvnNsBrZB8OF8QVOssbhfCbRnIv8zaaQYd9iTXPa
7TQXwkudtamLry1x9F7J+icmoPfxa9i/yMiBm4YOD30LLBvS3YRXZCcVRxjgtv7/HQ4l4vNS0BTb
4Qj9k9X1IyjF2IJgfW5EoA/pvPs/ZXQzOgGzz0ncBMU4YqR3wlT/U3094UY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
-----END CERTIFICATE-----
FlexJobApi.Web.Entry/AlipayCert/alipayRootCert.crt
New file
@@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----
FlexJobApi.Web.Entry/AlipayCert/appCertPublicKey_2021004171602214.crt
New file
@@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIIEpjCCA46gAwIBAgIQICQJGZ4C8uub1cYcy9fcxjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjQwOTE5MDE1NTU0WhcNMjkwOTE4MDE1NTU0WjBuMQswCQYDVQQGEwJDTjEz
MDEGA1UECgwq5a6B5rOi5Yib6IOc5L+h5oGv5oqA5pyv5pyN5Yqh5pyJ6ZmQ5YWs5Y+4MQ8wDQYD
VQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODgwNTA1NDIwNDIzMDEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQCgOs6F562oeQTVFho2GiA/+IdVcS0ZlbgD8kmfCkmz7p4td+ld/95y7LCm
UOmBz8FdJQScNqS1TBx4tc7y90h/yHTLzKpbBh2DMLTEQtilOugrd2U2JKGBWRQR4xeL6fcyGOn0
5WuqJ6CAMjdgbMMEtjhQBaxcJxecP6v/EilPyR5Uy1v8utSYvlcu8FVyfkyQlMCh4W3XwRBc4sU3
X6V2lp/2T6LIzZ9uBcJzoic1KAcZIdnCHOb235wao13WO7+dA32UfAoINA8yfpyivaWw/WewR+ke
na9180R1xxVJFkH+R20XNcRSlMXOfPz7MrYPRFr4HQbWdLG6z3GwPcebAgMBAAGjggEpMIIBJTAf
BgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNVHQ4EFgQULdtiYUNb4gMQ6z6BVDjw
ZeUYthwwQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9jYS5hbGlw
YXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9j
YS5hbGlwYXkuY29tL2NybDkzLmNybDBgBggrBgEFBQcBAQRUMFIwKAYIKwYBBQUHMAKGHGh0dHA6
Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGGGmh0dHA6Ly9jYS5hbGlwYXkuY29t
OjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQBzK7WLZwwHwEPZXm6VHNaO6PfLEqJDEf6zz15VPBr/
/yUGGHXReyfK5pHTh9EaFvNJTCWH/DHaUr0sf05w2bfxY3ZWCGFf6+qS+FqOq6V3AfXDphWlNSK9
jS5/tJc89Hr33HW4btsLwpcEqTweN16l3n5oIaJ9Zfi7zRQtPyUaVrtKAyMt8WeZ1gq1qjAAMmjG
RHy9/LpihPemAhuKuPHpFPvksO7RAaKGlY42pg+LxdXLNECJR57rKiWKrrITDM16xJAOTBFK8caH
MdkDrdiA6z/LsrGwiNBYb7N7t40gPdCJoVIlP0qkrzpqGg+KxwYDLmYX5LlpPdP9Tfz5y/t9
-----END CERTIFICATE-----
FlexJobApi.Web.Entry/Startup.cs
@@ -25,6 +25,7 @@
            services.AddHealthChecks();
            services.AddConfigurableOptions<WxmpOptions>();
            services.AddConfigurableOptions<AlipayOptions>();
            services.AddConfigurableOptions<AliyunOptions>();
            services.AddConfigurableOptions<BaiduOptions>();
@@ -36,7 +37,8 @@
            services.AddComponent<DistributedCacheServiceComponent>();
            services.AddHttpRemote();
            services.AddHttpRemote();
            services.AddSingleton<AlipayUtils>();
            services.AddSingleton<AliyunSmsUtils>(); 
            services.AddSingleton<WxmpUtils>();
            services.AddScoped<SmsUtils>();
FlexJobApi.Web.Entry/appsettings.json
@@ -47,6 +47,20 @@
      }
    ]
  },
  "AliPay": {
    "ServerUrl": "https://openapi.alipay.com/gateway.do",
    "AppId": "2021004171602214",
    "PrivateKey": "MIIEogIBAAKCAQEAoDrOheetqHkE1RYaNhogP/iHVXEtGZW4A/JJnwpJs+6eLXfpXf/ecuywplDpgc/BXSUEnDaktUwceLXO8vdIf8h0y8yqWwYdgzC0xELYpTroK3dlNiShgVkUEeMXi+n3Mhjp9OVrqieggDI3YGzDBLY4UAWsXCcXnD+r/xIpT8keVMtb/LrUmL5XLvBVcn5MkJTAoeFt18EQXOLFN1+ldpaf9k+iyM2fbgXCc6InNSgHGSHZwhzm9t+cGqNd1ju/nQN9lHwKCDQPMn6cor2lsP1nsEfpHp2vdfNEdccVSRZB/kdtFzXEUpTFznz8+zK2D0Ra+B0G1nSxus9xsD3HmwIDAQABAoIBACQYm2X3J1wIx1npvMXrZNCEgJhzAqH85JOfBY7alnf+jYvYs64FcmuZfsI5ACHKV9lP+ZXniXt+Rfu7mX+Kzb5bvlQbK1WOLx/a3R5JoNy4RI1mPFrSLcAh/S96ZVeTwah7jFkrRfHzM2kt5uPGHLj3BACjBo1METmV7n1r7fqXCus/Eihdo5ah8WOUPPMg8MqLadSnKVgnkzDLEa+8bagN/WgNfg9m4nW3IocEtFmKox3xV938eXpzn6KrgCduyK1Xn3d1PViRDT1QFOqhTCg17j8qDD4xZphH32Vbgq+heURmSMfecmC1u0CEpvFq3WBVxir/VOxk88gqkAzwusECgYEA+x/OjjNYaeOTFxCLtcI6EnerwgisF39rSNVAdSziWO3u8tUhzhHxB1cE5im4f9Qsd+r3Mw7Vu26YHgQn9O/A1QGoU3e0W/0Ckz5iIIJdAqBB279lNN+puYo4lIUfZha00i/R3Sj6eXrKGTwqCPRyHvJUC7biAAUgnqDAPLdPpgkCgYEAo1c3P4saxVqPnGheplud+jpEilp92dwHn9nIsaX0A/ohcYQIes+bKEZHHafn7ksDhidcjrbPMK72PP2HOJOL6D8a2w9zdyZ6jlycV5jiFHB6ywmkJ0517HWAJ6Fl3OsltDrxWHnuiyb/G/2fU1uLsO2U/b7zT9s2zXJzN53ZiYMCgYAmVku9T79eovxwl/kMLXOaICTbgWFsUOp6+vtVKB4B/4jsD3eSsxB9014PGS1ubmC/ieJlLA2bCJ42buH+tZ9VpWQiIfMp2+1Jt0tZtS0n2nlTZ9u2f7K0fZJ3sf8CIdNHBz/dqITciM9TnOi55z+I0+vawfeskxvQu6+9VSrWqQKBgD55voUMhMnVsLZnaUSCKHOsU8kDgb2Rnkzy9QOV8TaQNrh/gurOe481CkB6l4iaopdueMWRgMAjO8XqRw1Jyiqj8Ha3ezeovRm0rIwIyvh8aUs9vc7XAN3Xt5Pw9NBCFOLR5LwtryMEYHFpWcZ9bnnW9bT0k4YI1/ZO/2jXdHxXAoGAQLGrsed0HLWRjGU2rAUvA9Kny6wo+ScUas5IhoAhGMYDDQ8lFbndgnIOMjdXllT9IvmVERMTSMmP2m7+aqKNz3x0kTkg0tIQTLPsaWCjI5G4CDASUPo/jPvcd4h3euclhpuhcU9FMme3R5UhMAZy1bt+1VWPRxRB0gzWi4d7AFQ=",
    "Format": "json",
    "Charset": "UTF-8",
    "SignType": "RSA2",
    "AppCertPath": "AlipayCert/appCertPublicKey_2021004171602214.crt",
    "AlipayPublicCertPath": "AlipayCert/alipayCertPublicKey_RSA2.crt",
    "RootCertContent": "AlipayCert/alipayRootCert.crt",
    "NotifyUrl": "https://testfj.81812333.com",
    "EncryptKey": "jjy8A7hB/1Bkhg+8FtXyyg==",
    "AlipayPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoDrOheetqHkE1RYaNhogP/iHVXEtGZW4A/JJnwpJs+6eLXfpXf/ecuywplDpgc/BXSUEnDaktUwceLXO8vdIf8h0y8yqWwYdgzC0xELYpTroK3dlNiShgVkUEeMXi+n3Mhjp9OVrqieggDI3YGzDBLY4UAWsXCcXnD+r/xIpT8keVMtb/LrUmL5XLvBVcn5MkJTAoeFt18EQXOLFN1+ldpaf9k+iyM2fbgXCc6InNSgHGSHZwhzm9t+cGqNd1ju/nQN9lHwKCDQPMn6cor2lsP1nsEfpHp2vdfNEdccVSRZB/kdtFzXEUpTFznz8+zK2D0Ra+B0G1nSxus9xsD3HmwIDAQAB"
  },
  "Aliyun": {
    "OSS": {
      "AccessKeyId": "LTAI4GAdJ88mUMMFBHHiyDmS",
@@ -62,8 +76,8 @@
    },
    "SMS": {
      "Enable": true,
      "AccessKeyId": "LTAI5tMS7qz1duiyncCqxB8H",
      "AccessSecret": "TEHSXK6f6Njg0v0MSFkrjURofdjuKQ",
      "AccessKeyId": "LTAI5tLzz2jnXrUAAiC2kduH",
      "AccessSecret": "do1XqrgHJ5gOuFHhO5eku0FyYzZvbQ",
      "Version": "2017-05-25",
      "SignName": "818数字人力资产平台",
      "RegionId": "cn-hangzhou",