feat(tenpayv3): 适配国密接入模式

This commit is contained in:
Fu Diwei
2022-11-13 23:17:18 +08:00
parent 74a4c72f78
commit d18985f260
53 changed files with 995 additions and 389 deletions

View File

@@ -1,4 +1,4 @@
using System;
using System;
using Xunit;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
@@ -8,11 +8,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
[Fact(DisplayName = "测试用例:`CertificateEntry` 序列化")]
public void TestCertificateEntrySerialization()
{
var entry = new Settings.CertificateEntry("SN", "-----BEGIN CERTIFICATE-----END CERTIFICATE-----", DateTimeOffset.Now, DateTimeOffset.Now);
var entry = new Settings.CertificateEntry("RSA", "FAKE SERIAL NUMBER", "-----BEGIN CERTIFICATE-----FAKE CERTIFICATE-----END CERTIFICATE-----", DateTimeOffset.Now, DateTimeOffset.Now);
var serialized1 = Newtonsoft.Json.JsonConvert.SerializeObject(entry);
var deserialized1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Settings.CertificateEntry>(serialized1);
Assert.Equal(entry.AlgorithmType, deserialized1.AlgorithmType);
Assert.Equal(entry.SerialNumber, deserialized1.SerialNumber);
Assert.Equal(entry.Certificate, deserialized1.Certificate);
Assert.Equal(entry.EffectiveTime, deserialized1.EffectiveTime);
@@ -21,6 +22,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
var serialized2 = System.Text.Json.JsonSerializer.Serialize(entry);
var deserialized2 = System.Text.Json.JsonSerializer.Deserialize<Settings.CertificateEntry>(serialized2);
Assert.Equal(entry.AlgorithmType, deserialized2.AlgorithmType);
Assert.Equal(entry.SerialNumber, deserialized2.SerialNumber);
Assert.Equal(entry.Certificate, deserialized2.Certificate);
Assert.Equal(entry.EffectiveTime, deserialized2.EffectiveTime);

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using Xunit;
@@ -12,8 +12,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
private const string MockText = "mock_text";
private readonly Lazy<WechatTenpayClient> MockClientInstance = new Lazy<WechatTenpayClient>(() =>
{
var certManager = new Settings.InMemoryCertificateManager();
certManager.AddEntry(new Settings.CertificateEntry(
var manager = new Settings.InMemoryCertificateManager();
manager.AddEntry(new Settings.CertificateEntry(
algorithmType: "RSA",
serialNumber: RSA_CERTSN,
certificate: RSA_CERTIFICATE,
effectiveTime: DateTimeOffset.MinValue,
@@ -21,7 +22,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
));
return new WechatTenpayClient(new WechatTenpayClientOptions()
{
PlatformCertificateManager = certManager
PlatformCertificateManager = manager
});
}, isThreadSafe: false);
@@ -35,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
};
var data = MockClientInstance.Value.EncryptRequestSensitiveProperty(mock);
Assert.Equal(RSA_CERTSN, data.WechatpayCertificateSerialNumber);
Assert.Equal(RSA_CERTSN, data.WechatpayCertificateSerialNumber, ignoreCase: true);
Assert.Equal(MockText, data.Account);
Assert.Equal(MockText, Utilities.RSAUtility.DecryptWithECB(RSA_PRIVATE_KEY, data.Name!));
}
@@ -56,7 +57,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
};
var data = MockClientInstance.Value.EncryptRequestSensitiveProperty(mock);
Assert.Equal(RSA_CERTSN, data.WechatpayCertificateSerialNumber);
Assert.Equal(RSA_CERTSN, data.WechatpayCertificateSerialNumber, ignoreCase: true);
Assert.Equal(MockText, data.ReceiverList[0].Account);
Assert.Equal(MockText, Utilities.RSAUtility.DecryptWithECB(RSA_PRIVATE_KEY, data.ReceiverList[0].Name!));
}

View File

@@ -1,4 +1,4 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Xunit;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
@@ -17,6 +17,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
Assert.True(response.RawHeaders.Count > 0);
Assert.True(response.RawBytes.Length > 0);
Assert.True(TestClients.Instance.VerifyResponseSignature(response));
Assert.NotNull(response.WechatpayRequestId);
Assert.NotNull(response.WechatpayNonce);
Assert.NotNull(response.WechatpayTimestamp);
Assert.NotNull(response.WechatpaySignature);
Assert.NotNull(response.WechatpaySignatureType);
Assert.NotNull(response.WechatpayCertificateSerialNumber);
}
}
}