pc 支付接口完善

develop
old易 2024-01-24 09:51:17 +08:00
parent 7483262c3d
commit 072b0785a7
13 changed files with 177 additions and 82 deletions

View File

@ -95,6 +95,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Update="cert\apiclient_key.pem">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Dockerfile"> <None Update="Dockerfile">
<CopyToOutputDirectory>Never</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None> </None>

View File

@ -29,7 +29,6 @@ using System.Text.Encodings.Web;
using System.Text.Unicode; using System.Text.Unicode;
using Microsoft.AspNetCore.ResponseCompression; using Microsoft.AspNetCore.ResponseCompression;
using System.Linq; using System.Linq;
using Senparc.Weixin.RegisterServices;
namespace New_College namespace New_College
{ {
@ -65,7 +64,10 @@ namespace New_College
WeixinConfig.Secret = Appsettings.app(new string[] { "Weixin", "Secret" }).ObjToString(); WeixinConfig.Secret = Appsettings.app(new string[] { "Weixin", "Secret" }).ObjToString();
WeixinConfig.MCHID = Appsettings.app(new string[] { "Weixin", "MCHID" }).ObjToString(); WeixinConfig.MCHID = Appsettings.app(new string[] { "Weixin", "MCHID" }).ObjToString();
WeixinConfig.KEY = Appsettings.app(new string[] { "Weixin", "KEY" }).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配置 //阿里云oss配置
AliYunOssConfig.wendpoint = Appsettings.app(new string[] { "AliYunOss", "wendpoint" }).ObjToString(); AliYunOssConfig.wendpoint = Appsettings.app(new string[] { "AliYunOss", "wendpoint" }).ObjToString();
@ -95,8 +97,6 @@ namespace New_College
services.AddAppConfigSetup(); services.AddAppConfigSetup();
services.AddHttpApi(); services.AddHttpApi();
//Senparc.Weixin 注册(必须)
services.AddSenparcWeixinServices(Configuration);
@ -187,6 +187,9 @@ namespace New_College
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // 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) public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, IHostApplicationLifetime lifetime)
{ {
// Ip限流,尽量放管道外层 // Ip限流,尽量放管道外层
app.UseIpLimitMildd(); app.UseIpLimitMildd();
// 记录请求与返回数据 // 记录请求与返回数据

View File

@ -233,21 +233,10 @@
// APIv3 // APIv3
// APIv3APIv3 // APIv3APIv3
"APIv3Key": "brapuk6fon0wachiMlth2t3lb4a0h7ji", "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
// P12API
// 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" //
} }
} }

View File

@ -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", "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 "RequireHttpsMetadata": false
}, },
"SenparcWeixinSetting": { "WeChatPay": {
// Senparc.Weixin SenparcWeixinSetting //
// // AppIdAppIdAppIdCorpId
"AppId": "wx1bfbd8233a2d3261",
"AppSecret": "c12d2bf676a3b11d542efd7f477a72f3",
//
//
"MchId": "1614987630",
// // API
"IsDebug": true, // APIAPIv3
"APIKey": "",
//使key // APIv3
// APIv3APIv3
// "APIv3Key": "brapuk6fon0wachiMlth2t3lb4a0h7ji",
"Token": "#{Token}#", //#{} Azure DevOps #{}{"Token": "MyFullToken"} //
"EncodingAESKey": "#{EncodingAESKey}#", "NotifyUrl": "https://pay.ycymedu.com/api/notify/transactions",
"WeixinAppId": "#{WeixinAppId}#", "PrivateKey": "/cert/apiclient_cert.p12", //
"WeixinAppSecret": "#{WeixinAppSecret}#", "SerialNumber": "1B304596B953D156B37863FF52FCAE40B458C9F2" //
//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
} }
} }

Binary file not shown.

View File

@ -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-----

View File

@ -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-----

View File

@ -23,6 +23,17 @@
/// </summary> /// </summary>
public static string KEY { get; set; } public static string KEY { get; set; }
public static string APIv3Key { get; set; }
/// <summary>
///
/// </summary>
public static string PrivateKey { get; set; }
/// <summary>
///
/// </summary>
public static string SerialNumber { get; set; }
/// <summary> /// <summary>
/// 支付回调URL /// 支付回调URL
/// </summary> /// </summary>

View File

@ -44,10 +44,12 @@ namespace New_College.Common.Helper
/// 0微信支付1z支付宝支付 /// 0微信支付1z支付宝支付
/// </summary> /// </summary>
public int PayType { get; set; } public int PayType { get; set; }
public int? Total { get; set; } public int CustomerId { get; set; }
public string Description { get; set; }
public string NotifyUrl { get; set; } /// <summary>
public string OutTradeNo { get; set; } /// 传5是测试商品
/// </summary>
public int ProductId { get; set; }
} }

View File

@ -1,10 +1,7 @@
 
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using NPOI.SS.Formula.Functions; 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;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -13,6 +10,9 @@ using System.Net.Http;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using OSS.Clients.Pay.Wechat;
using OSS.Clients.Pay.Wechat.Basic;
using StackExchange.Redis;
namespace New_College.Common.Helper namespace New_College.Common.Helper
@ -26,25 +26,37 @@ namespace New_College.Common.Helper
/// 扫码支付-Native下单API /// 扫码支付-Native下单API
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static async Task<MemoryStream> QrCodePay(int Price, string title) public static async Task<MemoryStream> QrCodePay(string outorderNo, decimal Price, string title)
{ {
///native ////使用 Native 支付,输出二维码并展示
string url = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";
//使用 Native 支付,输出二维码并展示
MemoryStream fileStream = null;//输出图片的URL MemoryStream fileStream = null;//输出图片的URL
var price = (int)(Price * 100); var price = (int)(Price * 100);
var name = title + " - Native 支付"; var name = title + "-扫码支付";
var sp_billno = string.Format("{0}{1}{2}", WeixinConfig.MCHID, SystemTime.Now.ToString("yyyyMMddHHmmss"), WechatPayHelper.pay_config = new WechatPayConfig()
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)
{ {
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 else
{ {
@ -54,6 +66,8 @@ namespace New_College.Common.Helper
} }
/** /**
* *
* *

View File

@ -20,9 +20,9 @@
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageReference Include="NodaTime" Version="3.0.1" /> <PackageReference Include="NodaTime" Version="3.0.1" />
<PackageReference Include="NPOI" Version="2.6.0" /> <PackageReference Include="NPOI" Version="2.6.0" />
<PackageReference Include="OSS.Clients.Pay.Wechat" Version="2.4.0" />
<PackageReference Include="PdfSharpCore" Version="1.3.62" /> <PackageReference Include="PdfSharpCore" Version="1.3.62" />
<PackageReference Include="RestSharp" Version="106.15.0" /> <PackageReference Include="RestSharp" Version="106.15.0" />
<PackageReference Include="Senparc.Weixin.TenPayV3" Version="1.2.0" />
<PackageReference Include="StackExchange.Redis" Version="2.1.30" /> <PackageReference Include="StackExchange.Redis" Version="2.1.30" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.5.0" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.5.0" />

View File

@ -10,8 +10,6 @@ using New_College.Common.WebApiClients.HttpApis;
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using Senparc.NeuChar.Helpers;
namespace New_College.Services namespace New_College.Services
{ {
public class D_UserSettingBaseServices : BaseServices<D_UserSettingBase>, ID_UserSettingBaseServices public class D_UserSettingBaseServices : BaseServices<D_UserSettingBase>, ID_UserSettingBaseServices

View File

@ -20,6 +20,8 @@ using System.IO;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SqlSugar; using SqlSugar;
using System.Linq.Expressions; using System.Linq.Expressions;
using StackExchange.Redis;
using Ubiety.Dns.Core;
namespace New_College.Services namespace New_College.Services
{ {
@ -58,13 +60,44 @@ namespace New_College.Services
/// <param name="viewModel"></param> /// <param name="viewModel"></param>
public async Task<MemoryStream> QrCodePay(WeChatPayTransactionsNativeQuery viewModel) public async Task<MemoryStream> QrCodePay(WeChatPayTransactionsNativeQuery viewModel)
{ {
viewModel.OutTradeNo = OrderGenerateHelper.GenerateOrderNo("ZY"); var orderNo = OrderGenerateHelper.GenerateOrderNo("OT");//outorderNo//系统创建订单逻辑
viewModel.Total = 99 * 100; // viewModel.Total = 0.09;
var customer = await v_CustomerInfoRepository.QueryById(viewModel.CustomerId);
var cardtypeinfo = await v_VipCardTypeRepository.QueryById(viewModel.ProductId);//5 test produtId
return await WeChatPayV3.QrCodePay(viewModel.Total.Value, "demo"); 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("无法显示二维码");
} }
/// <summary> /// <summary>