Skip to content

Commit 6a19019

Browse files
authored
Merge pull request #3086 from JeffreySu/Developer
TenPayV3 v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @…
2 parents f696a21 + 889e767 commit 6a19019

File tree

4 files changed

+95
-53
lines changed

4 files changed

+95
-53
lines changed

src/Senparc.Weixin.All/Senparc.Weixin.All.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>net8.0</TargetFramework>
44
<ImplicitUsings>enable</ImplicitUsings>
55
<Nullable>enable</Nullable>
6-
<Version>2024.10.8</Version>
6+
<Version>2024.10.20</Version>
77
<LangVersion>10.0</LangVersion>
88
<AssemblyName>Senparc.Weixin.All</AssemblyName>
99
<RootNamespace>Senparc.Weixin.All</RootNamespace>
@@ -48,7 +48,8 @@
4848
[2024-09-02] v2024.9.2 WxOpen 支持小程序付费能力的用量告警事件
4949
[2024-09-10] v2024.9.10 更新基础库,包括缓存、APM、CO2NET 核心模块等全面升级
5050
[2024-10-08] v2024.10.8 更新基础库,简化 .NET 版本支持
51-
</PackageReleaseNotes>
51+
[2024-10-20] v2024.10.20 TenPayV3 v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @WXJDLM
52+
</PackageReleaseNotes>
5253
<RepositoryUrl>https://github.com/JeffreySu/WeiXinMPSDK</RepositoryUrl>
5354
</PropertyGroup>
5455
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">

src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPayV3/Helpers/SecurityHelper.cs

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,38 @@
1-
using Org.BouncyCastle.Crypto.Engines;
1+
#region Apache License Version 2.0
2+
/*----------------------------------------------------------------
3+
4+
Copyright 2024 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd.
5+
6+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
7+
except in compliance with the License. You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software distributed under the
12+
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13+
either express or implied. See the License for the specific language governing permissions
14+
and limitations under the License.
15+
16+
Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md
17+
18+
----------------------------------------------------------------*/
19+
#endregion Apache License Version 2.0
20+
21+
/*----------------------------------------------------------------
22+
Copyright (C) 2024 Senparc
23+
24+
文件名:SecurityHelper.cs
25+
文件功能描述:安全帮助类,提供加密解密方法及微信支付要求的安全方法
26+
27+
创建标识:Senparc - 20210822
28+
29+
修改标识:Senparc - 20241020
30+
修改描述:v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @WXJDLM
31+
32+
----------------------------------------------------------------*/
33+
34+
35+
using Org.BouncyCastle.Crypto.Engines;
236
using Org.BouncyCastle.Crypto.Modes;
337
using Org.BouncyCastle.Crypto.Parameters;
438
using Senparc.CO2NET.Helpers;
@@ -16,6 +50,9 @@
1650

1751
namespace Senparc.Weixin.TenPayV3.Helpers
1852
{
53+
/// <summary>
54+
/// 安全帮助类
55+
/// </summary>
1956
public class SecurityHelper
2057
{
2158
/// <summary>
@@ -48,7 +85,11 @@ public static string GetUnwrapCertKey(string originalPublicKey)
4885
/// <returns></returns>
4986
public static string GetPublicKey(Encrypt_Certificate encryptCertificate, string apiV3Key, string encryptionType)
5087
{
51-
if (encryptionType == CertType.RSA.ToString())
88+
if (encryptionType == CertType.SM.ToString())
89+
{
90+
return GmHelper.Sm4DecryptGCM(apiV3Key, encryptCertificate.nonce, "certificate", encryptCertificate.ciphertext);
91+
}
92+
else
5293
{
5394
var buff = Convert.FromBase64String(encryptCertificate.ciphertext);
5495
var secret = Encoding.UTF8.GetBytes(apiV3Key);
@@ -65,10 +106,6 @@ public static string GetPublicKey(Encrypt_Certificate encryptCertificate, string
65106
cipher.DoFinal(data, num);
66107
return Encoding.UTF8.GetString(data);
67108
}
68-
else
69-
{
70-
return GmHelper.Sm4DecryptGCM(apiV3Key, encryptCertificate.nonce, "certificate", encryptCertificate.ciphertext);
71-
}
72109
}
73110

74111
/// <summary>
@@ -80,18 +117,18 @@ public static string GetPublicKey(Encrypt_Certificate encryptCertificate, string
80117
/// <returns></returns>
81118
public static string Encrypt(string text, string publicKey, string encryptionType)
82119
{
83-
if (encryptionType == CertType.RSA.ToString())
120+
if (encryptionType == CertType.SM.ToString())
121+
{
122+
ECPublicKeyParameters eCPublicKeyParameters = SMPemHelper.LoadPublicKeyToParameters(Encoding.UTF8.GetBytes(publicKey));
123+
return GmHelper.Sm2Encrypt(eCPublicKeyParameters, text);
124+
}
125+
else
84126
{
85127
var x509 = new X509Certificate2(Encoding.UTF8.GetBytes(publicKey));
86128
var rsa = x509.GetRSAPublicKey();
87129
var buff = rsa.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.OaepSHA1);
88130
return Convert.ToBase64String(buff);
89131
}
90-
else
91-
{
92-
ECPublicKeyParameters eCPublicKeyParameters = SMPemHelper.LoadPublicKeyToParameters(Encoding.UTF8.GetBytes(publicKey));
93-
return GmHelper.Sm2Encrypt(eCPublicKeyParameters, text);
94-
}
95132
}
96133

97134
/// <summary>

src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPayV3/HttpHandlers/TenPayNotifyHandler.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ and limitations under the License.
3232
修改标识:Senparc - 20240802
3333
修改描述:v1.4.2 完善 SM 相关方法
3434
35+
修改标识:Senparc - 20241020
36+
修改描述:v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @WXJDLM
37+
3538
----------------------------------------------------------------*/
3639

3740
using Microsoft.AspNetCore.Http;
@@ -163,13 +166,13 @@ public TenPayNotifyHandler(HttpContext httpContext, ISenparcWeixinSettingForTenp
163166
// TODO: 本方法持续测试
164167
public async Task<T> DecryptGetObjectAsync<T>(/*string aes_key = null, */string nonce = null, string associated_data = null) where T : ReturnJsonBase, new()
165168
{
166-
if (_tenpayV3Setting.EncryptionType == CertType.RSA.ToString())
169+
if (_tenpayV3Setting.EncryptionType == CertType.SM.ToString())
167170
{
168-
return await AesGcmDecryptGetObjectAsync<T>(nonce, associated_data);
171+
return await Sm4GcmDecryptGetObjectAsync<T>(nonce, associated_data);
169172
}
170173
else
171174
{
172-
return await Sm4GcmDecryptGetObjectAsync<T>(nonce, associated_data);
175+
return await AesGcmDecryptGetObjectAsync<T>(nonce, associated_data);
173176
}
174177
}
175178
}

src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPayV3/Senparc.Weixin.TenPayV3.net8.csproj

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFramework>netstandard2.1</TargetFramework>
4-
<Version>1.6.4</Version>
4+
<Version>1.6.5</Version>
55
<AssemblyName>Senparc.Weixin.TenPayV3</AssemblyName>
66
<RootNamespace>Senparc.Weixin.TenPayV3</RootNamespace>
77
<LangVersion>10.0</LangVersion>
@@ -23,41 +23,42 @@
2323
<PackageProjectUrl>https://github.com/JeffreySu/WeiXinMPSDK</PackageProjectUrl>
2424
<PackageIcon>icon.jpg</PackageIcon>
2525
<PackageReleaseNotes>
26-
v0.1.0 创世
27-
v0.3.500.2 重构加密方法
28-
v0.3.500.3 修正合单支付的 URL 路径错误
29-
v0.3.500.4 完成商家券接口、委托营销接口、消费卡接口、支付有礼接口
30-
v0.5.1 修复PayV3营销工具商户券API
31-
v0.5.6 使用 Senparc.Weixin.Config.TenPayV3Host 提供可配置的 API 域名
32-
v0.5.7 升级微信支付请求的方法,支持多种加密方式
33-
v0.6.1 修复 CloseOrderAsync() 参数问题
34-
v0.6.2.2 修复 TenPayHttpClient 赋值问题
35-
v0.6.3 添加“发起商家转账API”
36-
v0.6.5 重构 BasePayApis.GetPayApiUrl() 方法
37-
v0.6.8.2 MarketingApis.ModifyBusifavorStockInformationAsync 方法单独提取参数 stock_id
38-
v0.6.8.3 MarketingApis.ModifyBusifavorStockBudgetAsync 方法单独提取参数 stock_id
39-
v0.6.8.4 修改 week_day 类型为 int[]
40-
v0.6.8.7 优化 TenPayApiResultCode 获取逻辑,修复 TryGetCode() 方法中当匹配不到预设错误信息时,返回 null 的问题
41-
v0.6.8.8 修复 RefundQueryAsync() URL 问题
42-
v0.6.8.13 修复验签时 204(NoContent)情况下的异常
43-
v0.6.8.14 修复 PayScoreApis.QueryServiceOrderAsync() 重复代码
44-
v0.6.8.15 修复 PayScoreApis.QueryServiceOrderAsync() 参数判断逻辑
45-
v0.7.0 BasePay 支持服务商模式
46-
v0.7.1 修复 TradeBillQueryRequestData 默认参数问题
47-
v0.7.3 新增微信支付 V3 服务商的“经营能力”“资金应用”相关接口
48-
v0.7.5 TenPayV3Util.GetNoncestr() 弃用 MD5 加密方法
49-
v0.7.10.4 基础支付参数缺失处理 、JsonIgnore的问题处理
50-
v0.7.11
51-
v1.0.0-beta1
52-
1、TenPayV3 RefundQueryRequestData.sub_mchid 属性添加 [JsonIgnore] 标签 #2905
53-
2、添加小程序发货信息管理服务消息事件 PR#2908
54-
3、TenPayV3分账 字段内部加密 PR#2909
55-
v1.1.0 TenPaySignHelper.GetJsApiUiPackage() 方法添加 senparcWeixinSettingForTenpayV3 参数
56-
v1.2.1.1 解决微信支付分、完成订单参数可为空的问题 Issue #2989
57-
v1.4.0 添加:微信支付-发起商家转账入参添加转账场景ID、通知地址;返回结果添加批次状态 / PR #3030
58-
v1.4.2 完善 SM 相关方法
59-
v1.6.3 更新支付接口调用过程中的 SM 和 RSA 判断方式
60-
</PackageReleaseNotes>
26+
v0.1.0 创世
27+
v0.3.500.2 重构加密方法
28+
v0.3.500.3 修正合单支付的 URL 路径错误
29+
v0.3.500.4 完成商家券接口、委托营销接口、消费卡接口、支付有礼接口
30+
v0.5.1 修复PayV3营销工具商户券API
31+
v0.5.6 使用 Senparc.Weixin.Config.TenPayV3Host 提供可配置的 API 域名
32+
v0.5.7 升级微信支付请求的方法,支持多种加密方式
33+
v0.6.1 修复 CloseOrderAsync() 参数问题
34+
v0.6.2.2 修复 TenPayHttpClient 赋值问题
35+
v0.6.3 添加“发起商家转账API”
36+
v0.6.5 重构 BasePayApis.GetPayApiUrl() 方法
37+
v0.6.8.2 MarketingApis.ModifyBusifavorStockInformationAsync 方法单独提取参数 stock_id
38+
v0.6.8.3 MarketingApis.ModifyBusifavorStockBudgetAsync 方法单独提取参数 stock_id
39+
v0.6.8.4 修改 week_day 类型为 int[]
40+
v0.6.8.7 优化 TenPayApiResultCode 获取逻辑,修复 TryGetCode() 方法中当匹配不到预设错误信息时,返回 null 的问题
41+
v0.6.8.8 修复 RefundQueryAsync() URL 问题
42+
v0.6.8.13 修复验签时 204(NoContent)情况下的异常
43+
v0.6.8.14 修复 PayScoreApis.QueryServiceOrderAsync() 重复代码
44+
v0.6.8.15 修复 PayScoreApis.QueryServiceOrderAsync() 参数判断逻辑
45+
v0.7.0 BasePay 支持服务商模式
46+
v0.7.1 修复 TradeBillQueryRequestData 默认参数问题
47+
v0.7.3 新增微信支付 V3 服务商的“经营能力”“资金应用”相关接口
48+
v0.7.5 TenPayV3Util.GetNoncestr() 弃用 MD5 加密方法
49+
v0.7.10.4 基础支付参数缺失处理 、JsonIgnore的问题处理
50+
v0.7.11
51+
v1.0.0-beta1
52+
1、TenPayV3 RefundQueryRequestData.sub_mchid 属性添加 [JsonIgnore] 标签 #2905
53+
2、添加小程序发货信息管理服务消息事件 PR#2908
54+
3、TenPayV3分账 字段内部加密 PR#2909
55+
v1.1.0 TenPaySignHelper.GetJsApiUiPackage() 方法添加 senparcWeixinSettingForTenpayV3 参数
56+
v1.2.1.1 解决微信支付分、完成订单参数可为空的问题 Issue #2989
57+
v1.4.0 添加:微信支付-发起商家转账入参添加转账场景ID、通知地址;返回结果添加批次状态 / PR #3030
58+
v1.4.2 完善 SM 相关方法
59+
v1.6.3 更新支付接口调用过程中的 SM 和 RSA 判断方式
60+
v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084
61+
</PackageReleaseNotes>
6162
<RepositoryUrl>https://github.com/JeffreySu/WeiXinMPSDK</RepositoryUrl>
6263
</PropertyGroup>
6364
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">

0 commit comments

Comments
 (0)