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>
<None Update="cert\apiclient_key.pem">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Dockerfile">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>

View File

@ -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,8 +97,6 @@ namespace New_College
services.AddAppConfigSetup();
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.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, IHostApplicationLifetime lifetime)
{
// Ip限流,尽量放管道外层
app.UseIpLimitMildd();
// 记录请求与返回数据

View File

@ -233,21 +233,10 @@
// APIv3
// APIv3APIv3
"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",
"RequireHttpsMetadata": false
},
"SenparcWeixinSetting": {
// Senparc.Weixin SenparcWeixinSetting
//
"WeChatPay": {
//
// AppIdAppIdAppIdCorpId
"AppId": "wx1bfbd8233a2d3261",
"AppSecret": "c12d2bf676a3b11d542efd7f477a72f3",
//
//
"MchId": "1614987630",
//
"IsDebug": true,
// API
// APIAPIv3
"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
// APIv3APIv3
"APIv3Key": "brapuk6fon0wachiMlth2t3lb4a0h7ji",
//
"NotifyUrl": "https://pay.ycymedu.com/api/notify/transactions",
"PrivateKey": "/cert/apiclient_cert.p12", //
"SerialNumber": "1B304596B953D156B37863FF52FCAE40B458C9F2" //
}
}

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

View File

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

View File

@ -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
}
/**
*
*

View File

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

View File

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

View File

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