Skip to content

Commit

Permalink
Merge pull request #3086 from JeffreySu/Developer
Browse files Browse the repository at this point in the history
TenPayV3 v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084  感谢 @…
  • Loading branch information
JeffreySu authored Oct 20, 2024
2 parents f696a21 + 889e767 commit 6a19019
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 53 deletions.
5 changes: 3 additions & 2 deletions src/Senparc.Weixin.All/Senparc.Weixin.All.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>2024.10.8</Version>
<Version>2024.10.20</Version>
<LangVersion>10.0</LangVersion>
<AssemblyName>Senparc.Weixin.All</AssemblyName>
<RootNamespace>Senparc.Weixin.All</RootNamespace>
Expand Down Expand Up @@ -48,7 +48,8 @@
[2024-09-02] v2024.9.2 WxOpen 支持小程序付费能力的用量告警事件
[2024-09-10] v2024.9.10 更新基础库,包括缓存、APM、CO2NET 核心模块等全面升级
[2024-10-08] v2024.10.8 更新基础库,简化 .NET 版本支持
</PackageReleaseNotes>
[2024-10-20] v2024.10.20 TenPayV3 v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @WXJDLM
</PackageReleaseNotes>
<RepositoryUrl>https://github.com/JeffreySu/WeiXinMPSDK</RepositoryUrl>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,38 @@
using Org.BouncyCastle.Crypto.Engines;
#region Apache License Version 2.0
/*----------------------------------------------------------------
Copyright 2024 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions
and limitations under the License.
Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md
----------------------------------------------------------------*/
#endregion Apache License Version 2.0

/*----------------------------------------------------------------
Copyright (C) 2024 Senparc
文件名:SecurityHelper.cs
文件功能描述:安全帮助类,提供加密解密方法及微信支付要求的安全方法
创建标识:Senparc - 20210822
修改标识:Senparc - 20241020
修改描述:v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @WXJDLM
----------------------------------------------------------------*/


using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
using Senparc.CO2NET.Helpers;
Expand All @@ -16,6 +50,9 @@

namespace Senparc.Weixin.TenPayV3.Helpers
{
/// <summary>
/// 安全帮助类
/// </summary>
public class SecurityHelper
{
/// <summary>
Expand Down Expand Up @@ -48,7 +85,11 @@ public static string GetUnwrapCertKey(string originalPublicKey)
/// <returns></returns>
public static string GetPublicKey(Encrypt_Certificate encryptCertificate, string apiV3Key, string encryptionType)
{
if (encryptionType == CertType.RSA.ToString())
if (encryptionType == CertType.SM.ToString())
{
return GmHelper.Sm4DecryptGCM(apiV3Key, encryptCertificate.nonce, "certificate", encryptCertificate.ciphertext);
}
else
{
var buff = Convert.FromBase64String(encryptCertificate.ciphertext);
var secret = Encoding.UTF8.GetBytes(apiV3Key);
Expand All @@ -65,10 +106,6 @@ public static string GetPublicKey(Encrypt_Certificate encryptCertificate, string
cipher.DoFinal(data, num);
return Encoding.UTF8.GetString(data);
}
else
{
return GmHelper.Sm4DecryptGCM(apiV3Key, encryptCertificate.nonce, "certificate", encryptCertificate.ciphertext);
}
}

/// <summary>
Expand All @@ -80,18 +117,18 @@ public static string GetPublicKey(Encrypt_Certificate encryptCertificate, string
/// <returns></returns>
public static string Encrypt(string text, string publicKey, string encryptionType)
{
if (encryptionType == CertType.RSA.ToString())
if (encryptionType == CertType.SM.ToString())
{
ECPublicKeyParameters eCPublicKeyParameters = SMPemHelper.LoadPublicKeyToParameters(Encoding.UTF8.GetBytes(publicKey));
return GmHelper.Sm2Encrypt(eCPublicKeyParameters, text);
}
else
{
var x509 = new X509Certificate2(Encoding.UTF8.GetBytes(publicKey));
var rsa = x509.GetRSAPublicKey();
var buff = rsa.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.OaepSHA1);
return Convert.ToBase64String(buff);
}
else
{
ECPublicKeyParameters eCPublicKeyParameters = SMPemHelper.LoadPublicKeyToParameters(Encoding.UTF8.GetBytes(publicKey));
return GmHelper.Sm2Encrypt(eCPublicKeyParameters, text);
}
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ and limitations under the License.
修改标识:Senparc - 20240802
修改描述:v1.4.2 完善 SM 相关方法
修改标识:Senparc - 20241020
修改描述:v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084 感谢 @WXJDLM
----------------------------------------------------------------*/

using Microsoft.AspNetCore.Http;
Expand Down Expand Up @@ -163,13 +166,13 @@ public TenPayNotifyHandler(HttpContext httpContext, ISenparcWeixinSettingForTenp
// TODO: 本方法持续测试
public async Task<T> DecryptGetObjectAsync<T>(/*string aes_key = null, */string nonce = null, string associated_data = null) where T : ReturnJsonBase, new()
{
if (_tenpayV3Setting.EncryptionType == CertType.RSA.ToString())
if (_tenpayV3Setting.EncryptionType == CertType.SM.ToString())
{
return await AesGcmDecryptGetObjectAsync<T>(nonce, associated_data);
return await Sm4GcmDecryptGetObjectAsync<T>(nonce, associated_data);
}
else
{
return await Sm4GcmDecryptGetObjectAsync<T>(nonce, associated_data);
return await AesGcmDecryptGetObjectAsync<T>(nonce, associated_data);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>1.6.4</Version>
<Version>1.6.5</Version>
<AssemblyName>Senparc.Weixin.TenPayV3</AssemblyName>
<RootNamespace>Senparc.Weixin.TenPayV3</RootNamespace>
<LangVersion>10.0</LangVersion>
Expand All @@ -23,41 +23,42 @@
<PackageProjectUrl>https://github.com/JeffreySu/WeiXinMPSDK</PackageProjectUrl>
<PackageIcon>icon.jpg</PackageIcon>
<PackageReleaseNotes>
v0.1.0 创世
v0.3.500.2 重构加密方法
v0.3.500.3 修正合单支付的 URL 路径错误
v0.3.500.4 完成商家券接口、委托营销接口、消费卡接口、支付有礼接口
v0.5.1 修复PayV3营销工具商户券API
v0.5.6 使用 Senparc.Weixin.Config.TenPayV3Host 提供可配置的 API 域名
v0.5.7 升级微信支付请求的方法,支持多种加密方式
v0.6.1 修复 CloseOrderAsync() 参数问题
v0.6.2.2 修复 TenPayHttpClient 赋值问题
v0.6.3 添加“发起商家转账API”
v0.6.5 重构 BasePayApis.GetPayApiUrl() 方法
v0.6.8.2 MarketingApis.ModifyBusifavorStockInformationAsync 方法单独提取参数 stock_id
v0.6.8.3 MarketingApis.ModifyBusifavorStockBudgetAsync 方法单独提取参数 stock_id
v0.6.8.4 修改 week_day 类型为 int[]
v0.6.8.7 优化 TenPayApiResultCode 获取逻辑,修复 TryGetCode() 方法中当匹配不到预设错误信息时,返回 null 的问题
v0.6.8.8 修复 RefundQueryAsync() URL 问题
v0.6.8.13 修复验签时 204(NoContent)情况下的异常
v0.6.8.14 修复 PayScoreApis.QueryServiceOrderAsync() 重复代码
v0.6.8.15 修复 PayScoreApis.QueryServiceOrderAsync() 参数判断逻辑
v0.7.0 BasePay 支持服务商模式
v0.7.1 修复 TradeBillQueryRequestData 默认参数问题
v0.7.3 新增微信支付 V3 服务商的“经营能力”“资金应用”相关接口
v0.7.5 TenPayV3Util.GetNoncestr() 弃用 MD5 加密方法
v0.7.10.4 基础支付参数缺失处理 、JsonIgnore的问题处理
v0.7.11
v1.0.0-beta1
1、TenPayV3 RefundQueryRequestData.sub_mchid 属性添加 [JsonIgnore] 标签 #2905
2、添加小程序发货信息管理服务消息事件 PR#2908
3、TenPayV3分账 字段内部加密 PR#2909
v1.1.0 TenPaySignHelper.GetJsApiUiPackage() 方法添加 senparcWeixinSettingForTenpayV3 参数
v1.2.1.1 解决微信支付分、完成订单参数可为空的问题 Issue #2989
v1.4.0 添加:微信支付-发起商家转账入参添加转账场景ID、通知地址;返回结果添加批次状态 / PR #3030
v1.4.2 完善 SM 相关方法
v1.6.3 更新支付接口调用过程中的 SM 和 RSA 判断方式
</PackageReleaseNotes>
v0.1.0 创世
v0.3.500.2 重构加密方法
v0.3.500.3 修正合单支付的 URL 路径错误
v0.3.500.4 完成商家券接口、委托营销接口、消费卡接口、支付有礼接口
v0.5.1 修复PayV3营销工具商户券API
v0.5.6 使用 Senparc.Weixin.Config.TenPayV3Host 提供可配置的 API 域名
v0.5.7 升级微信支付请求的方法,支持多种加密方式
v0.6.1 修复 CloseOrderAsync() 参数问题
v0.6.2.2 修复 TenPayHttpClient 赋值问题
v0.6.3 添加“发起商家转账API”
v0.6.5 重构 BasePayApis.GetPayApiUrl() 方法
v0.6.8.2 MarketingApis.ModifyBusifavorStockInformationAsync 方法单独提取参数 stock_id
v0.6.8.3 MarketingApis.ModifyBusifavorStockBudgetAsync 方法单独提取参数 stock_id
v0.6.8.4 修改 week_day 类型为 int[]
v0.6.8.7 优化 TenPayApiResultCode 获取逻辑,修复 TryGetCode() 方法中当匹配不到预设错误信息时,返回 null 的问题
v0.6.8.8 修复 RefundQueryAsync() URL 问题
v0.6.8.13 修复验签时 204(NoContent)情况下的异常
v0.6.8.14 修复 PayScoreApis.QueryServiceOrderAsync() 重复代码
v0.6.8.15 修复 PayScoreApis.QueryServiceOrderAsync() 参数判断逻辑
v0.7.0 BasePay 支持服务商模式
v0.7.1 修复 TradeBillQueryRequestData 默认参数问题
v0.7.3 新增微信支付 V3 服务商的“经营能力”“资金应用”相关接口
v0.7.5 TenPayV3Util.GetNoncestr() 弃用 MD5 加密方法
v0.7.10.4 基础支付参数缺失处理 、JsonIgnore的问题处理
v0.7.11
v1.0.0-beta1
1、TenPayV3 RefundQueryRequestData.sub_mchid 属性添加 [JsonIgnore] 标签 #2905
2、添加小程序发货信息管理服务消息事件 PR#2908
3、TenPayV3分账 字段内部加密 PR#2909
v1.1.0 TenPaySignHelper.GetJsApiUiPackage() 方法添加 senparcWeixinSettingForTenpayV3 参数
v1.2.1.1 解决微信支付分、完成订单参数可为空的问题 Issue #2989
v1.4.0 添加:微信支付-发起商家转账入参添加转账场景ID、通知地址;返回结果添加批次状态 / PR #3030
v1.4.2 完善 SM 相关方法
v1.6.3 更新支付接口调用过程中的 SM 和 RSA 判断方式
v1.6.5 修改 SM 证书判断逻辑,向下兼容未升级 appsettings.json 的系统 #3084
</PackageReleaseNotes>
<RepositoryUrl>https://github.com/JeffreySu/WeiXinMPSDK</RepositoryUrl>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
Expand Down

0 comments on commit 6a19019

Please sign in to comment.