pc 支付接口完善
parent
7483262c3d
commit
072b0785a7
|
|
@ -95,6 +95,9 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="cert\apiclient_key.pem">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Dockerfile">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
// 记录请求与返回数据
|
||||
|
|
|
|||
|
|
@ -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" //(新)证书序列号
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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" //(新)证书序列号
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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-----
|
||||
|
|
@ -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-----
|
||||
|
|
@ -23,6 +23,17 @@
|
|||
/// </summary>
|
||||
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>
|
||||
/// 支付回调URL
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -44,10 +44,12 @@ namespace New_College.Common.Helper
|
|||
/// 0微信支付,1z支付宝支付
|
||||
/// </summary>
|
||||
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; }
|
||||
|
||||
/// <summary>
|
||||
/// 传5是测试商品
|
||||
/// </summary>
|
||||
public int ProductId { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
/// </summary>
|
||||
/// <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
|
||||
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
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 统一下单
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
|
||||
<PackageReference Include="NodaTime" Version="3.0.1" />
|
||||
<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="RestSharp" Version="106.15.0" />
|
||||
<PackageReference Include="Senparc.Weixin.TenPayV3" Version="1.2.0" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.1.30" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.5.0" />
|
||||
|
||||
|
|
|
|||
|
|
@ -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<D_UserSettingBase>, ID_UserSettingBaseServices
|
||||
|
|
|
|||
|
|
@ -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
|
|||
/// <param name="viewModel"></param>
|
||||
public async Task<MemoryStream> 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("无法显示二维码");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
Loading…
Reference in New Issue