diff --git a/New_College.Api/New_College.Api.csproj b/New_College.Api/New_College.Api.csproj index 1a6766d..02c5d9c 100644 --- a/New_College.Api/New_College.Api.csproj +++ b/New_College.Api/New_College.Api.csproj @@ -95,6 +95,9 @@ + + Always + Never diff --git a/New_College.Api/Startup.cs b/New_College.Api/Startup.cs index 922fa52..e785ed9 100644 --- a/New_College.Api/Startup.cs +++ b/New_College.Api/Startup.cs @@ -29,7 +29,6 @@ using System.Text.Encodings.Web; using System.Text.Unicode; using Microsoft.AspNetCore.ResponseCompression; using System.Linq; -using Senparc.Weixin.RegisterServices; namespace New_College { @@ -65,7 +64,10 @@ namespace New_College WeixinConfig.Secret = Appsettings.app(new string[] { "Weixin", "Secret" }).ObjToString(); WeixinConfig.MCHID = Appsettings.app(new string[] { "Weixin", "MCHID" }).ObjToString(); WeixinConfig.KEY = Appsettings.app(new string[] { "Weixin", "KEY" }).ObjToString(); - WeixinConfig.NotifyUrl = Appsettings.app(new string[] { "Weixin", "NotifyUrl" }).ObjToString(); + WeixinConfig.NotifyUrl = Appsettings.app(new string[] { "WeChatPay", "NotifyUrl" }).ObjToString(); + WeixinConfig.APIv3Key = Appsettings.app(new string[] { "WeChatPay", "APIv3Key" }).ObjToString(); + WeixinConfig.SerialNumber= Appsettings.app(new string[] { "WeChatPay", "SerialNumber" }).ObjToString(); + WeixinConfig.PrivateKey = Appsettings.app(new string[] { "WeChatPay", "PrivateKey" }).ObjToString(); //阿里云oss配置 AliYunOssConfig.wendpoint = Appsettings.app(new string[] { "AliYunOss", "wendpoint" }).ObjToString(); @@ -95,10 +97,8 @@ namespace New_College services.AddAppConfigSetup(); services.AddHttpApi(); - //Senparc.Weixin 注册(必须) - services.AddSenparcWeixinServices(Configuration); - + // 授权+认证 (jwt or ids4) services.AddAuthorizationSetup(); @@ -180,13 +180,16 @@ namespace New_College // 注意在Program.CreateHostBuilder,添加Autofac服务工厂 public void ConfigureContainer(ContainerBuilder builder) { - + builder.RegisterModule(new AutofacModuleRegister()); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, IHostApplicationLifetime lifetime) { + + + // Ip限流,尽量放管道外层 app.UseIpLimitMildd(); // 记录请求与返回数据 diff --git a/New_College.Api/appsettings.Development.json b/New_College.Api/appsettings.Development.json index 779fb9b..a88a82a 100644 --- a/New_College.Api/appsettings.Development.json +++ b/New_College.Api/appsettings.Development.json @@ -233,21 +233,10 @@ // 商户APIv3密钥 // 为微信支付商户平台的APIv3密钥,请注意不是API密钥,v3接口必填 "APIv3Key": "brapuk6fon0wachiMlth2t3lb4a0h7ji", - - // 商户API证书 - // 使用V2退款、付款等接口时必填 - // 使用V3接口时必填 - // 可为证书文件路径 / 证书文件的base64字符串 - "Certificate": "MIID9jCCAt6gAwIBAgIUX7aJQ2iVIFJNjycVSZIGI+dcI10wDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsTFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3QgQ0EwHhcNMjIxMjEyMDUxMjE1WhcNMjcxMjExMDUxMjE1WjCBhzETMBEGA1UEAwwKMTYxNDk4NzYzMDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTMwMQYDVQQLDCrkuIrmtbfkuIDojYnkuIDmnKjmlZnogrLnp5HmioDmnInpmZDlhazlj7gxCzAJBgNVBAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALlWoiOOEEecInVwlNxl78d7xkk+Q1ZMZHaVyiyrBbY0ik55fRwg76s3u3q67IYv/UDgik8thWRc0KvL/rhiyb+h9F9/aTWZ2LXoCXiFbtzNBV40aHshi4QNOfmdEPHmMytwohRJB/MUPo8lJpG1hB/6OgNJjsqbBNXTm7HtU4A9okqSaUUgzgbaWuDOON8BXHqBsR36gHAWCfr2ecFw0QBh/9mwn/DkF25vbR/QLXCsKIw3LF6BkWOdBUNvnJYHxF2yMvMV5cflsutkf63bfSF5qznVNAiMfMmhhfM3OqtOvk48PtLkHDcfC0XJuud9VFAxp8GaLSU6IJr2vM6KDjkCAwEAAaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgP4MGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAU39wePx6nBiHGKsRkfIDgQH1VEcoyXDIdORkyV2UvhX5MPo9fCOSU2vT4HiuyTKs5W74I7+4jEmqLtS5UzUhAu6K5Bl80yYmXErHRZIaF0fpxT+LAHocsCIC5B8grVWNDztu6F9UqB7Ngr8bfHm1j2esnb0x48UvWm2Uqn2Z38RT4BPty048yYdcVVndYRPigL+I4QfkVZZVJmxAi/wZXiKBSOb9Rp2du8NyNrEPiBDZWXRF5HLxgJoJtXY8tLJPUY5Lm6M1TlhnCvNbVSode8HazI6paCOvQHYN73D27Ie+G5SEic8iR0MFfsXNeKol+sF8iAeDN94EpvPD0ZkfPg==", - // 商户API私钥 - // 当配置了P12格式证书时,已包含私钥,不必再单独配置API私钥。 - // PEM格式证书,需要单独配置。 - "APIPrivateKey": "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5VqIjjhBHnCJ1cJTcZe/He8ZJPkNWTGR2lcosqwW2NIpOeX0cIO+rN7t6uuyGL/1A4IpPLYVkXNCry/64Ysm/ofRff2k1mdi16Al4hW7czQVeNGh7IYuEDTn5nRDx5jMrcKIUSQfzFD6PJSaRtYQf+joDSY7KmwTV05ux7VOAPaJKkmlFIM4G2lrgzjjfAVx6gbEd+oBwFgn69nnBcNEAYf/ZsJ/w5Bdub20f0C1wrCiMNyxegZFjnQVDb5yWB8RdsjLzFeXH5bLrZH+t230heas51TQIjHzJoYXzNzqrTr5OPD7S5Bw3HwtFybrnfVRQMafBmi0lOiCa9rzOig45AgMBAAECggEABiuyPkjOlfPG2e4jpqrmLtgaI/okt8zXU3NtRctz5zscl7xHxBX8pNC4Nz/d/CHA5tYTBMvZMxw7/lxOYMk5Ol4kCsHtONGke3n8Rrz6kfNpiFdqWx8kzAK8uWjXVZZ6ganAW7iKwTcdVhrAi/1lJsNoBw/95xT+NjhTaLskGpLkQPEwct1Ygc7Ce+5d/UCphdk351sRzhEf1dgaAbn+/fHD599fpo87YCO1QPChTy+jp7e+d6B3QxspNCeTcpCdxevM1EVAYlDYOivONM9RQSAPWjsErIxKyN5nvusFhO4xrSIfg6uRkGEVKiDMIU6C8O3XVcwH9vIw3az5SUFRAQKBgQDcYcRZP+GNU3YpFj2Zcn2I9WNXwSU32Wp1wNEgKwvTv9fXDxYiuK6OjIM76DhcsuO1ew7dTtFXfSrmEkIXRBf4XmMes0I6RD/Ds1tB+hCo71b3OX28C4bzCd4IicY/9JpG8cYRReFKd42XX/9N7qxxZ8vefSq5xNzbDOtKRnBJCQKBgQDXSvPpiDRMTDuQ+hkyW4s+dYt9Mj9xSKiKQiGc84yPcboLgMYwf3A0P6eDCHFN1G63MKuwg36cgI8uhkNjv757NzR5195jDx56tvnx1s+DqPKLX5Cd0UOQLtjFSxTyRaOAHz4Fc06zQBQ0Zp3P+xZQFZe8K2cIBy4hM0FNqknXsQKBgE9pDzZVtXGWVGqDsBidz6xNN8nEOCQCvMDHhNOBj1Zyt1SwA/ro70VATn2EtOJ6N2EKgZWvM/HBkXart5Lon3aIlFDYqRGTzCI5e7WvZNdqvryAw9TBlpP2x0HuWzhqbDkKH6PTuVV69NNJ7RXo3cxTaXu3QHEGBcsMwa/W59j5AoGBALvzhWj1LaMGUmJI1MJvxOosODB+M4C0i97XyPx6atW31VHBhERGnTAf+h+cuT3XHSj0Zo7c3SXH3jghoqdsd+Cd20QbvtwAEP3Uy/PjMpqgXc5rCZedXzx6iWgEGi8/uHNb0wtzFNvML1dn1pIBhAM6NpNh2LrbedwmIPaqmXihAoGASTRxC8cOvjEwGrwxHkN9ZPOIK3OTFGkPrJxF3byskQEpc7zOKRx+kxeRvZ5jKacMqW2ns3yMR+JZO9devWotpx+mj5mlWMUC5bQB9BnwForuD4vKDjb5Y8IEAQTopUxWApzK2CQCLETUhCDl1+eQ+EUUoISFHO99qBT6Vpu7qNE=", - // RSA公钥 - // 目前仅调用"企业付款到银行卡API [V2]"时使用,执行本示例中的"获取RSA加密公钥API [V2]"即可获取。 - "RsaPublicKey": "/apiclient_cert.p12", - //回调地址 - "NotifyUrl": "https://pay.ycymedu.com/api/notify/transactions" + "NotifyUrl": "https://pay.ycymedu.com/api/notify/transactions", + "PrivateKey": "/cert/apiclient_cert.p12", //(新)证书私钥 + "SerialNumber": "1B304596B953D156B37863FF52FCAE40B458C9F2" //(新)证书序列号 } + } diff --git a/New_College.Api/appsettings.json b/New_College.Api/appsettings.json index d2f0672..7922549 100644 --- a/New_College.Api/appsettings.json +++ b/New_College.Api/appsettings.json @@ -217,36 +217,25 @@ "CallbackPath": "http://192.168.103.119:8000/login/oauth/authorize?client_id=ae6bdccc3a7821232b31&response_type=code&redirect_uri=http://192.168.103.100:8083/callback&scope=read&state=casdoor", "RequireHttpsMetadata": false }, - "SenparcWeixinSetting": { - //以下为 Senparc.Weixin 的 SenparcWeixinSetting 微信配置 - //注意:所有的字符串值都可能被用于字典索引,因此请勿留空字符串(但可以根据需要,删除对应的整条设置)! + "WeChatPay": { + // 应用号 + // 如:微信公众平台AppId、微信开放平台AppId、微信小程序AppId、企业微信CorpId等 + "AppId": "wx1bfbd8233a2d3261", + "AppSecret": "c12d2bf676a3b11d542efd7f477a72f3", + // 商户号 + // 为微信支付商户平台的商户号 + "MchId": "1614987630", - //微信全局 - "IsDebug": true, + // 商户API密钥 + // 为微信支付商户平台的API密钥,请注意不是APIv3密钥 + "APIKey": "", - //以下不使用的参数可以删除,key 修改后将会失效 - - //公众号 - "Token": "#{Token}#", //说明:字符串内两侧#和{}符号为 Azure DevOps 默认的占位符格式,如果您有明文信息,请删除同占位符,修改整体字符串,不保留#和{},如:{"Token": "MyFullToken"} - "EncodingAESKey": "#{EncodingAESKey}#", - "WeixinAppId": "#{WeixinAppId}#", - "WeixinAppSecret": "#{WeixinAppSecret}#", - - //微信支付V3 - "TenPayV3_AppId": "#{TenPayV3_AppId}#", - "TenPayV3_AppSecret": "#{TenPayV3_AppSecret}#", - "TenPayV3_SubAppId": "#{TenPayV3_SubAppId}#", - "TenPayV3_SubAppSecret": "#{TenPayV3_SubAppSecret}#", - "TenPayV3_MchId": "#{TenPayV3_MchId}#", - "TenPayV3_SubMchId": "#{TenPayV3_SubMchId}#", //子商户,没有可留空 - "TenPayV3_Key": "#{TenPayV3_Key}#", - "TenPayV3_TenpayNotify": "#{TenPayV3_TenpayNotify}#", //https://YourDomainName/TenpayApiV3/PayNotifyUrl - /* 支付证书私钥 - * 1、支持明文私钥(无换行字符) - * 2、私钥文件路径(如:~/App_Data/cert/apiclient_key.pem),注意:必须放在 App_Data 等受保护的目录下,避免泄露 - */ - "TenPayV3_PrivateKey": "#{TenPayV3_PrivateKey}#", //(新)证书私钥 - "TenPayV3_SerialNumber": "#{TenPayV3_SerialNumber}#", //(新)证书序列号 - "TenPayV3_ApiV3Key": "#{TenPayV3_APIv3Key}#" //(新)APIv3 密钥 + // 商户APIv3密钥 + // 为微信支付商户平台的APIv3密钥,请注意不是API密钥,v3接口必填 + "APIv3Key": "brapuk6fon0wachiMlth2t3lb4a0h7ji", + //回调地址 + "NotifyUrl": "https://pay.ycymedu.com/api/notify/transactions", + "PrivateKey": "/cert/apiclient_cert.p12", //(新)证书私钥 + "SerialNumber": "1B304596B953D156B37863FF52FCAE40B458C9F2" //(新)证书序列号 } } diff --git a/New_College.Api/cert/apiclient_cert.p12 b/New_College.Api/cert/apiclient_cert.p12 new file mode 100644 index 0000000..3c76141 Binary files /dev/null and b/New_College.Api/cert/apiclient_cert.p12 differ diff --git a/New_College.Api/cert/apiclient_cert.pem b/New_College.Api/cert/apiclient_cert.pem new file mode 100644 index 0000000..2ab430d --- /dev/null +++ b/New_College.Api/cert/apiclient_cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIELjCCAxagAwIBAgIUGzBFlrlT0VazeGP/UvyuQLRYyfIwDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjQwMTIzMDI1NjIxWhcNMjkwMTIxMDI1NjIxWjCBhzETMBEGA1UEAwwK +MTYxNDk4NzYzMDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTMwMQYDVQQL +DCrkuIrmtbfkuIDojYnkuIDmnKjmlZnogrLnp5HmioDmnInpmZDlhazlj7gxCzAJ +BgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMIbBXviaAOzBfqDwv4YFeu8WZYClhCpeM8mS4Dx5FPF6A+s +OetUsXn5zkdT2B2sjIKsphsXt4AuLgWRrA0AB6QCBY7YTAkddDgmvKxS44mX3kmZ +OOoBjH7NTZjZjoEr57GXZ4hyS5WsWBUq6tUOsmK4xuUmq3DlFcELo58ER8f7t4Bz +iM5by1f1g3eoi7NPcVrPc3cYUP/zmyKE2zUFj7pjYnMta2PU2pFu9qLnAumb5TDg +Ml2fewKBMBo8B2AY2c80pcYu8Rq5JMdxVQGqIgXcLTgKwauKc58kii92p4/+g/1O +5L3H2VPBjkJRA+m0Arc52N31042/FbXerxXi9csCAwEAAaOBuTCBtjAJBgNVHRME +AjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDov +L2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUw +REJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJF +MTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IB +AQASqXVK6HKmwSISjaKdQkhhlxe8bT9Zwwj+aeWE3OXKpp0wNQjgIbdEQO2ZLCUZ +AqplOmuqGHAkwdvupRfQkio8ZeCKAUgWINeJvERFTsjBhDPAeTkJDXdT4zT8UCtu +g96vijauAzQZbttqpz9ltmMGO5yq5Qxy0rgy6384ByNyN5isQDvjRE0bFgrh7Mk9 +aehMVvPEqDqVLZrBlVfhQZzP6y6B0R17u0EZttboc5bsFb7eWHLtkZhYpork/HYS +zy9r64iOCKsa7n2YJtdXZ2OvWOm/MStkxn/+p76SCJB27b1fqOVQinE3i7n7lRtZ +hRtxOYxVj2KHa/Pb55ljeguB +-----END CERTIFICATE----- diff --git a/New_College.Api/cert/apiclient_key.pem b/New_College.Api/cert/apiclient_key.pem new file mode 100644 index 0000000..572bef2 --- /dev/null +++ b/New_College.Api/cert/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCGwV74mgDswX6 +g8L+GBXrvFmWApYQqXjPJkuA8eRTxegPrDnrVLF5+c5HU9gdrIyCrKYbF7eALi4F +kawNAAekAgWO2EwJHXQ4JrysUuOJl95JmTjqAYx+zU2Y2Y6BK+exl2eIckuVrFgV +KurVDrJiuMblJqtw5RXBC6OfBEfH+7eAc4jOW8tX9YN3qIuzT3Faz3N3GFD/85si +hNs1BY+6Y2JzLWtj1NqRbvai5wLpm+Uw4DJdn3sCgTAaPAdgGNnPNKXGLvEauSTH +cVUBqiIF3C04CsGrinOfJIovdqeP/oP9TuS9x9lTwY5CUQPptAK3Odjd9dONvxW1 +3q8V4vXLAgMBAAECggEBAKGNf+j2LYA2tlkk5Vw6i7QilaWHDYNcqhIvW1Q8/77B +zz2MKMC3Que0hH1VSWCZRnFUZQPTn4Tt6pvz/HDtf25/yER1vgMwIpTBmPMMIhlY +70fuYTJSi67WDSmUmUjlU/e5fhBQoJw4Ty9/AujFTK9h/ximMLbL1GlR2KL3Gw9T +/Ps85ktifphi90A0NzK4EH/+/A4ooyFB73m2yacyNKIwJ4IX+5duL3tqax6Y7Rbx +B1hZMe4KoyPQF+0YRWlDnE4e3aP774qiSXmobvY67J8aAfuY95xKbWRf/kaYmnyl +uB8mwOKPvnbp25aTq/+102J0/nIMzGTgcoGVRQBzGnECgYEA36Ez0+DjDSltGsS1 +gaOhKwXWiNrBpJ5TiKtMrFCA8yIa0HXChL0g8NPiX5jssb8Q4V1wKtdTRr0CXF+E +JnXLuugNF8phC6lAeFcUwaNEKNAcbUBjAYXBSIoWTLWBX5o7Fc+RMkzUlS3zLF+1 +MMMzyRS/M3j6g9Xb1GrLO2chLq8CgYEA3jPGhz3pL0uTs+YUni1O6St+2AUZTqqS +niO5g6wYkrMWfCVs8HjoIFNBj4P7+Ha0gvq3x2/JN+lN2WJG7XU3vXi5sf7zZdlQ +2vC0ZL4V6VGAjeuIYmXi9GbVltCl/NVZwLOK4MH9sJs/3RnG7Nz1OT+eMFRhYQAh +2P1RlDCN0aUCgYADxiKrxrXOOQ7ATuWJRIupwDV4pchy0ME0Iz/uAIXMlJzDO9mG +h/KQXeMKHfiQn1rXks4byvp6zSHHEU2XoJFJnDTsW9v7aGXQIhgVlH3H+osgRN/m +3K0AXmQ18zI1vNKWcaRPpwBHbDkYXJ0gL4smL5Vydu4zX16QXSUE4Z6rvQKBgQDG +utvWXULO7/M8NI1AIxmuZR5fKcBGoTvcf+sNnr+jhNSZWAek0x4Yux2ps8uJnvE3 +K/FuR8ZZYSolQEZbXjjqFq1OSs15y/EKv7k3WOLT9/bX903VY3amS8q/xgCOrmpF +dM7C0f2JFHD72HAXrE8OUp2yb+VgEfQz0+xAc2SDmQKBgFI6GYbZVis4VLSQj3oD +3sT6xjzBZEzb97u4FXWipjndaLmuGHXMRhyQNenRiEpbZBEydDqEVCoZ640t49o4 +2nnFD1AGRariLKgpt4wKokrCQ/oSxQ5gqSP1v6087c3DhJQ/3ymDDXjEcOkatXG8 +E6S6xOuVdEBQBKK+68FfBP6Z +-----END PRIVATE KEY----- diff --git a/New_College.Common/GlobalVar/WeiXinConfig.cs b/New_College.Common/GlobalVar/WeiXinConfig.cs index 8af3a8f..4d05d06 100644 --- a/New_College.Common/GlobalVar/WeiXinConfig.cs +++ b/New_College.Common/GlobalVar/WeiXinConfig.cs @@ -23,6 +23,17 @@ /// public static string KEY { get; set; } + public static string APIv3Key { get; set; } + + /// + /// + /// + public static string PrivateKey { get; set; } + /// + /// + /// + public static string SerialNumber { get; set; } + /// /// 支付回调URL /// diff --git a/New_College.Common/Helper/WeChatPayOrderQuery.cs b/New_College.Common/Helper/WeChatPayOrderQuery.cs index 5bc0c6e..d93c46e 100644 --- a/New_College.Common/Helper/WeChatPayOrderQuery.cs +++ b/New_College.Common/Helper/WeChatPayOrderQuery.cs @@ -44,10 +44,12 @@ namespace New_College.Common.Helper /// 0微信支付,1z支付宝支付 /// public int PayType { get; set; } - public int? Total { get; set; } - public string Description { get; set; } - public string NotifyUrl { get; set; } - public string OutTradeNo { get; set; } + public int CustomerId { get; set; } + + /// + /// 传5是测试商品 + /// + public int ProductId { get; set; } } diff --git a/New_College.Common/Helper/WeChatPayV3Helper.cs b/New_College.Common/Helper/WeChatPayV3Helper.cs index 1e62ff4..bef8d20 100644 --- a/New_College.Common/Helper/WeChatPayV3Helper.cs +++ b/New_College.Common/Helper/WeChatPayV3Helper.cs @@ -1,10 +1,7 @@  +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using NPOI.SS.Formula.Functions; -using Senparc.Weixin.TenPayV3; -using Senparc.Weixin.TenPayV3.Apis; -using Senparc.Weixin.TenPayV3.Apis.BasePay; -using Senparc.Weixin.TenPayV3.Entities; using System; using System.Collections.Generic; using System.IO; @@ -13,6 +10,9 @@ using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; +using OSS.Clients.Pay.Wechat; +using OSS.Clients.Pay.Wechat.Basic; +using StackExchange.Redis; namespace New_College.Common.Helper @@ -26,25 +26,37 @@ namespace New_College.Common.Helper /// 扫码支付-Native下单API /// /// - public static async Task QrCodePay(int Price, string title) + public static async Task QrCodePay(string outorderNo, decimal Price, string title) { - ///native - string url = "https://api.mch.weixin.qq.com/v3/pay/transactions/native"; - - //使用 Native 支付,输出二维码并展示 + ////使用 Native 支付,输出二维码并展示 MemoryStream fileStream = null;//输出图片的URL var price = (int)(Price * 100); - var name = title + " - Native 支付"; - var sp_billno = string.Format("{0}{1}{2}", WeixinConfig.MCHID, SystemTime.Now.ToString("yyyyMMddHHmmss"), - TenPayV3Util.BuildRandomStr(6)); - var notifyUrl = WeixinConfig.NotifyUrl; - TransactionsRequestData requestData = new(WeixinConfig.Appid, WeixinConfig.MCHID, name, sp_billno, new TenpayDateTime(DateTime.Now.AddHours(1)), null, notifyUrl, null, new() { currency = "CNY", total = price }, null, null, null, null); - BasePayApis basePayApis = new BasePayApis(); - var result = await basePayApis.NativeAsync(requestData); - //进行安全签名验证 - if (result.VerifySignSuccess == true) + var name = title + "-扫码支付"; + WechatPayHelper.pay_config = new WechatPayConfig() { - fileStream = QrCodeHelper.GerQrCodeStream(result.code_url); + app_id = WeixinConfig.Appid, + mch_id = WeixinConfig.MCHID, + api_key = WeixinConfig.Secret, + api_v3_key = WeixinConfig.KEY, + cert_path = WeixinConfig.PrivateKey, + cert_password = WeixinConfig.MCHID + }; + var nResp = await new WechatNativePayReq() + { + description = name, + out_trade_no = outorderNo, + notify_url = WeixinConfig.NotifyUrl, + amount = new WechatPayAmount() { currency = "CNY", total = price } + } + // .SetContextConfig(new WechatPayConfig(){}) // 可以设置当前上下文的配置信息,设置后本次请求将使用此配置,方便多应用的用户 + //.AddOptionalBodyPara("attach","附加数据") // 添加可选参数 + .SendAsync();// + //系统创建订单逻辑 + //var result = await basePayApis.NativeAsync(requestData); + ////进行安全签名验证 + if (!string.IsNullOrEmpty(nResp.code_url)) + { + fileStream = QrCodeHelper.GerQrCodeStream(nResp.code_url); } else { @@ -54,6 +66,8 @@ namespace New_College.Common.Helper } + + /** * * 统一下单 diff --git a/New_College.Common/New_College.Common.csproj b/New_College.Common/New_College.Common.csproj index ab60b73..8b8e689 100644 --- a/New_College.Common/New_College.Common.csproj +++ b/New_College.Common/New_College.Common.csproj @@ -20,9 +20,9 @@ + - diff --git a/New_College.Services/D_UserSettingBaseServices.cs b/New_College.Services/D_UserSettingBaseServices.cs index 94cf3e0..58b9d00 100644 --- a/New_College.Services/D_UserSettingBaseServices.cs +++ b/New_College.Services/D_UserSettingBaseServices.cs @@ -10,8 +10,6 @@ using New_College.Common.WebApiClients.HttpApis; using System; using System.Linq; using System.Collections.Generic; -using Senparc.NeuChar.Helpers; - namespace New_College.Services { public class D_UserSettingBaseServices : BaseServices, ID_UserSettingBaseServices diff --git a/New_College.Services/V_OrderInfoServices.cs b/New_College.Services/V_OrderInfoServices.cs index 80b75ef..182027c 100644 --- a/New_College.Services/V_OrderInfoServices.cs +++ b/New_College.Services/V_OrderInfoServices.cs @@ -20,6 +20,8 @@ using System.IO; using Microsoft.AspNetCore.Mvc; using SqlSugar; using System.Linq.Expressions; +using StackExchange.Redis; +using Ubiety.Dns.Core; namespace New_College.Services { @@ -58,13 +60,44 @@ namespace New_College.Services /// public async Task QrCodePay(WeChatPayTransactionsNativeQuery viewModel) { - viewModel.OutTradeNo = OrderGenerateHelper.GenerateOrderNo("ZY"); - viewModel.Total = 99 * 100; - - - return await WeChatPayV3.QrCodePay(viewModel.Total.Value, "demo"); - + var orderNo = OrderGenerateHelper.GenerateOrderNo("OT");//outorderNo//系统创建订单逻辑 + // viewModel.Total = 0.09; + var customer = await v_CustomerInfoRepository.QueryById(viewModel.CustomerId); + var cardtypeinfo = await v_VipCardTypeRepository.QueryById(viewModel.ProductId);//5 test produtId + try + { + _unitOfWork.BeginTran(); + var createtime = TimeUtil.GetCstDateTime(); + var baseResult = await _dal.Add(new V_OrderInfo + { + //out_trade_no = payNum, + //PayType = 2, + OrderId = orderNo, + CardTypeId = cardtypeinfo.Id, + Status = EnumOrderType.payment, + CustomerId = customer.Id, + Price = cardtypeinfo.Money, + PayPrice = cardtypeinfo.Money, + Name = cardtypeinfo.Name, + CardNo = orderNo, + out_trade_no = orderNo, + CardId = -1, + CreateTime = createtime + }); + if (baseResult > 0) + { + _unitOfWork.CommitTran(); + return await WeChatPayV3.QrCodePay(orderNo, cardtypeinfo.Money, cardtypeinfo.Name); + } + return QrCodeHelper.GetTextImageStream("无法显示二维码"); + } + catch (System.Exception) + { + _unitOfWork.RollbackTran(); + // response.msg = "订单创建失败"; + } + return QrCodeHelper.GetTextImageStream("无法显示二维码"); } ///