test(tenpayv3): 补充基于国密算法的客户端测试

This commit is contained in:
fudiwei 2022-11-28 12:10:04 +08:00
parent c75c68bde7
commit 23346ceab1
21 changed files with 102 additions and 80 deletions

View File

@ -109,7 +109,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Utilities
public void BlockUpdate(byte[] input, int inOff, int length)
{
//更新当前消息摘要
while ((XBufOff != 0) && (length > 0))
{
Update(input[inOff]);
@ -117,7 +116,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Utilities
length--;
}
//处理完整的消息摘要
while (length > XBuf.Length)
{
ProcessWord(input, inOff);
@ -127,7 +125,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Utilities
ByteCount += XBuf.Length;
}
//填充剩余的消息摘要
while (length > 0)
{
Update(input[inOff]);
@ -141,7 +138,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Utilities
{
long bitLength = (ByteCount << 3);
//添加字节
Update(unchecked((byte)128));
while (XBufOff != 0) Update(unchecked((byte)0));

View File

@ -1,6 +1,5 @@
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using Org.BouncyCastle.Crypto;

View File

@ -473,6 +473,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities
/// <param name="publicKey">PKCS#8 公钥PEM 格式)。</param>
/// <param name="message">待验证的文本数据。</param>
/// <param name="signature">经 Base64 编码的待验证的签名。</param>
/// <param name="asn1Encoding">指示签名结果是否为 ASN.1 编码的形式。默认值true</param>
/// <returns>验证结果。</returns>
public static bool VerifyWithSM3(string publicKey, string message, string signature, bool asn1Encoding = true)
{

View File

@ -109,7 +109,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities
public void BlockUpdate(byte[] input, int inOff, int length)
{
//更新当前消息摘要
while ((XBufOff != 0) && (length > 0))
{
Update(input[inOff]);
@ -117,7 +116,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities
length--;
}
//处理完整的消息摘要
while (length > XBuf.Length)
{
ProcessWord(input, inOff);
@ -127,7 +125,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities
ByteCount += XBuf.Length;
}
//填充剩余的消息摘要
while (length > 0)
{
Update(input[inOff]);
@ -141,7 +138,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities
{
long bitLength = (ByteCount << 3);
//添加字节
Update(unchecked((byte)128));
while (XBufOff != 0) Update(unchecked((byte)0));

View File

@ -13,7 +13,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
BillDateString = "2021-04-05"
};
var response = await TestClients.Instance.ExecuteGetBillTradeBillAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetBillTradeBillAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.HashType);
@ -28,7 +28,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
BillDateString = DateTimeOffset.Now.AddDays(-1).ToString("yyyy-MM-dd")
};
var response = await TestClients.Instance.ExecuteGetBillFundflowBillAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetBillFundflowBillAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.HashType);
@ -43,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
DownloadUrl = "https://api.mch.weixin.qq.com/v3/billdownload/file?token=FAKE_TOKEN"
};
var response = await TestClients.Instance.ExecuteDownloadBillFileAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteDownloadBillFileAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotEmpty(response.RawBytes);

View File

@ -27,7 +27,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
},
NotifyUrl = "http://127.0.0.1"
};
var response = await TestClients.Instance.ExecuteCreateCombineTransactionAppAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateCombineTransactionAppAsync(request);
Assert.NotNull(response.PrepayId);
}
@ -66,7 +66,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
},
NotifyUrl = "http://127.0.0.1"
};
var response = await TestClients.Instance.ExecuteCreateCombineTransactionJsapiAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateCombineTransactionJsapiAsync(request);
Assert.NotNull(response.PrepayId);
}
@ -92,7 +92,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
},
NotifyUrl = "http://127.0.0.1"
};
var response = await TestClients.Instance.ExecuteCreateCombineTransactionH5Async(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateCombineTransactionH5Async(request);
Assert.NotNull(response.H5Url);
}
@ -118,7 +118,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
},
NotifyUrl = "http://127.0.0.1"
};
var response = await TestClients.Instance.ExecuteCreateCombineTransactionNativeAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateCombineTransactionNativeAsync(request);
Assert.NotNull(response.QrcodeUrl);
}
@ -130,7 +130,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
CombineOutTradeNumber = "FAKE_OUTTRADENO"
};
var response = await TestClients.Instance.ExecuteGetCombineTransactionByCombineOutTradeNumberAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetCombineTransactionByCombineOutTradeNumberAsync(request);
Assert.NotNull(response.CombineAppId);
Assert.NotNull(response.CombineMerchantId);
@ -153,7 +153,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
}
}
};
var response = await TestClients.Instance.ExecuteCloseCombineTransactionAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCloseCombineTransactionAsync(request);
Assert.True(response.IsSuccessful());
}

View File

@ -36,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
GoodsName = "FAKE_GOODS",
CouponCodeMode = "WECHATPAY_MODE"
};
var response = await TestClients.Instance.ExecuteCreateMarketingBusifavorStockAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateMarketingBusifavorStockAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -49,7 +49,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecuteGetMarketingBusifavorStockByStockIdAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetMarketingBusifavorStockByStockIdAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -70,7 +70,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
OpenId = TestConfigs.WechatOpenId,
BelongMerchantId = TestConfigs.WechatMerchantId
};
var response = await TestClients.Instance.ExecuteQueryMarketingBusifavorUserCouponsAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMarketingBusifavorUserCouponsAsync(request);
Assert.True(response.IsSuccessful());
}
@ -82,7 +82,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
NotifyUrl = "https://FAKE_URL"
};
var response = await TestClients.Instance.ExecuteUpdateMarketingBusifavorCallbackAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUpdateMarketingBusifavorCallbackAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.NotifyUrl);
@ -92,7 +92,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
public async Task TestExecuteGetMarketingBusifavorCallback()
{
var request = new Models.GetMarketingBusifavorCallbackRequest();
var response = await TestClients.Instance.ExecuteGetMarketingBusifavorCallbackAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetMarketingBusifavorCallbackAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.NotifyUrl);

View File

@ -35,7 +35,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
},
IsNoCash = false
};
var response = await TestClients.Instance.ExecuteCreateMarketingFavorStockAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateMarketingFavorStockAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -48,7 +48,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecuteStartMarketingFavorStockAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteStartMarketingFavorStockAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -61,7 +61,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecutePauseMarketingFavorStockAsync(request);
var response = await TestClients.InstanceUseRSA.ExecutePauseMarketingFavorStockAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -74,7 +74,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecuteRestartMarketingFavorStockAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteRestartMarketingFavorStockAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -87,7 +87,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecuteGetMarketingFavorStockByStockIdAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetMarketingFavorStockByStockIdAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -97,7 +97,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
public async Task TestExecuteQueryMarketingFavorStocks()
{
var request = new Models.QueryMarketingFavorStocksRequest();
var response = await TestClients.Instance.ExecuteQueryMarketingFavorStocksAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMarketingFavorStocksAsync(request);
Assert.True(response.IsSuccessful());
@ -119,7 +119,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecuteQueryMarketingFavorStockMerchantsAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMarketingFavorStockMerchantsAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -133,7 +133,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
StockId = "FAKE_STOCKID"
};
var response = await TestClients.Instance.ExecuteQueryMarketingFavorStockItemsAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMarketingFavorStockItemsAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.StockId);
@ -148,7 +148,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
NotifyUrl = "https://FAKE_URL",
Switch = false
};
var response = await TestClients.Instance.ExecuteUpdateMarketingFavorCallbackAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUpdateMarketingFavorCallbackAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.NotifyUrl);

View File

@ -14,7 +14,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
FileName = "FAKE_IMAGE.jpg",
FileBytes = Convert.FromBase64String("/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KK+bv25viR458H/ABS+E+meDNb8S6YNW1LffWuk22lyRaig1DS7fZePfRuY7QR3cxc2zR3BOwRsWwp8I8Hftl/FD4k+H9G1HVvEnij4dHSbnTJ2hubXQGXxYrHSIypKpc7bS7N9MyqjW92DsH7nGwkfe++3/pP/AMktN97IbTX3X/P/AORfltqfoRRXzTr3xA8eeI7T4i6BdeJ/EXhM/DiyuFm13RrLTmvtZmuJPtGn/ZhdW09v5iWapHKDAVea6wqjZXvnw40rVtC+HuhWWv6m+ta7aafBDqOoNHHGb65WNRLMVjREXe4ZsIiqM8KBxRHVc3p+N/ytr2uvkno7ev4W/O+nezK3jX4TaB8Q9VsL7V7Frm70yNo7WVbmWFoVaa3nONjLz5lrA2eo8vjgsD554v8A+Cf/AMKvHGnaLaX2g6tHb6Bc2d1aR2PiTVLAFrQQi3WXyLhPPjQ28DeVNvRmhRmUsoNezUUdb9tfu2DpY4X4mfs4+E/i54b8RaVrFrq0dv4qntLrUZtM1u+0q7eW1aJ7eSO5tZopoGRoYyDE6E7ec5Oes8NeH4PCfh2w0u1e9lttOt47aJ7y8mvbh0RQoMk8zPLK+By8jM7HJYkkmr1FC0VkG+/T+v0R/9k=")
};
var response = await TestClients.Instance.ExecuteUploadMarketingMediaImageAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUploadMarketingMediaImageAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MediaUrl);

View File

@ -21,7 +21,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
BusinessType = "FAVOR_STOCK"
}
};
var response = await TestClients.Instance.ExecuteBuildMarketingPartnershipAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteBuildMarketingPartnershipAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.State);
@ -42,7 +42,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
BusinessType = "FAVOR_STOCK"
}
};
var response = await TestClients.Instance.ExecuteQueryMarketingPartnershipsAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMarketingPartnershipsAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.PartnershipList);

View File

@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
public async Task TestExecuteQueryMarketingPayGiftActivities()
{
var request = new Models.QueryMarketingPayGiftActivitiesRequest();
var response = await TestClients.Instance.ExecuteQueryMarketingPayGiftActivitiesAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMarketingPayGiftActivitiesAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.ActivityList);

View File

@ -14,7 +14,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
FileName = "FAKE_IMAGE.jpg",
FileBytes = Convert.FromBase64String("/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KK+bv25viR458H/ABS+E+meDNb8S6YNW1LffWuk22lyRaig1DS7fZePfRuY7QR3cxc2zR3BOwRsWwp8I8Hftl/FD4k+H9G1HVvEnij4dHSbnTJ2hubXQGXxYrHSIypKpc7bS7N9MyqjW92DsH7nGwkfe++3/pP/AMktN97IbTX3X/P/AORfltqfoRRXzTr3xA8eeI7T4i6BdeJ/EXhM/DiyuFm13RrLTmvtZmuJPtGn/ZhdW09v5iWapHKDAVea6wqjZXvnw40rVtC+HuhWWv6m+ta7aafBDqOoNHHGb65WNRLMVjREXe4ZsIiqM8KBxRHVc3p+N/ytr2uvkno7ev4W/O+nezK3jX4TaB8Q9VsL7V7Frm70yNo7WVbmWFoVaa3nONjLz5lrA2eo8vjgsD554v8A+Cf/AMKvHGnaLaX2g6tHb6Bc2d1aR2PiTVLAFrQQi3WXyLhPPjQ28DeVNvRmhRmUsoNezUUdb9tfu2DpY4X4mfs4+E/i54b8RaVrFrq0dv4qntLrUZtM1u+0q7eW1aJ7eSO5tZopoGRoYyDE6E7ec5Oes8NeH4PCfh2w0u1e9lttOt47aJ7y8mvbh0RQoMk8zPLK+By8jM7HJYkkmr1FC0VkG+/T+v0R/9k=")
};
var response = await TestClients.Instance.ExecuteUploadMerchantMediaImageAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUploadMerchantMediaImageAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MediaId);
@ -28,7 +28,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
FileName = "FAKE_IMAGE.mp4",
FileBytes = Convert.FromBase64String("/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KK+bv25viR458H/ABS+E+meDNb8S6YNW1LffWuk22lyRaig1DS7fZePfRuY7QR3cxc2zR3BOwRsWwp8I8Hftl/FD4k+H9G1HVvEnij4dHSbnTJ2hubXQGXxYrHSIypKpc7bS7N9MyqjW92DsH7nGwkfe++3/pP/AMktN97IbTX3X/P/AORfltqfoRRXzTr3xA8eeI7T4i6BdeJ/EXhM/DiyuFm13RrLTmvtZmuJPtGn/ZhdW09v5iWapHKDAVea6wqjZXvnw40rVtC+HuhWWv6m+ta7aafBDqOoNHHGb65WNRLMVjREXe4ZsIiqM8KBxRHVc3p+N/ytr2uvkno7ev4W/O+nezK3jX4TaB8Q9VsL7V7Frm70yNo7WVbmWFoVaa3nONjLz5lrA2eo8vjgsD554v8A+Cf/AMKvHGnaLaX2g6tHb6Bc2d1aR2PiTVLAFrQQi3WXyLhPPjQ28DeVNvRmhRmUsoNezUUdb9tfu2DpY4X4mfs4+E/i54b8RaVrFrq0dv4qntLrUZtM1u+0q7eW1aJ7eSO5tZopoGRoYyDE6E7ec5Oes8NeH4PCfh2w0u1e9lttOt47aJ7y8mvbh0RQoMk8zPLK+By8jM7HJYkkmr1FC0VkG+/T+v0R/9k=")
};
var response = await TestClients.Instance.ExecuteUploadMerchantMediaVideoAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUploadMerchantMediaVideoAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MediaId);

View File

@ -15,7 +15,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
BeginDateString = "2021-01-01",
EndDateString = "2021-01-30"
};
var response = await TestClients.Instance.ExecuteQueryMerchantServiceComplaintsAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMerchantServiceComplaintsAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.ComplaintList);
@ -36,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
ComplaintId = "FAKE_COMPLAINTID"
};
var response = await TestClients.Instance.ExecuteGetMerchantServiceComplaintByComplaintIdAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetMerchantServiceComplaintByComplaintIdAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.ComplaintId);
@ -52,7 +52,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
ComplaintId = "FAKE_COMPLAINTID"
};
var response = await TestClients.Instance.ExecuteQueryMerchantServiceComplaintNegotiationHistoriesAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteQueryMerchantServiceComplaintNegotiationHistoriesAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.NegotiationHistoryList);
@ -73,7 +73,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
NotifyUrl = "https://FAKE_URL"
};
var response = await TestClients.Instance.ExecuteCreateMerchantServiceComplaintNotificationAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateMerchantServiceComplaintNotificationAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MerchantId);
@ -84,7 +84,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
public async Task TestExecuteGetMerchantServiceComplaintNotification()
{
var request = new Models.GetMerchantServiceComplaintNotificationRequest();
var response = await TestClients.Instance.ExecuteGetMerchantServiceComplaintNotificationAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetMerchantServiceComplaintNotificationAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MerchantId);
@ -98,7 +98,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
NotifyUrl = "https://FAKE_URL"
};
var response = await TestClients.Instance.ExecuteUpdateMerchantServiceComplaintNotificationAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUpdateMerchantServiceComplaintNotificationAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MerchantId);
@ -109,7 +109,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
public async Task TestExecuteDeleteMerchantServiceComplaintNotification()
{
var request = new Models.DeleteMerchantServiceComplaintNotificationRequest();
var response = await TestClients.Instance.ExecuteDeleteMerchantServiceComplaintNotificationAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteDeleteMerchantServiceComplaintNotificationAsync(request);
Assert.True(response.IsSuccessful());
}
@ -122,7 +122,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
FileName = "FAKE_IMAGE.jpg",
FileBytes = Convert.FromBase64String("/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KK+bv25viR458H/ABS+E+meDNb8S6YNW1LffWuk22lyRaig1DS7fZePfRuY7QR3cxc2zR3BOwRsWwp8I8Hftl/FD4k+H9G1HVvEnij4dHSbnTJ2hubXQGXxYrHSIypKpc7bS7N9MyqjW92DsH7nGwkfe++3/pP/AMktN97IbTX3X/P/AORfltqfoRRXzTr3xA8eeI7T4i6BdeJ/EXhM/DiyuFm13RrLTmvtZmuJPtGn/ZhdW09v5iWapHKDAVea6wqjZXvnw40rVtC+HuhWWv6m+ta7aafBDqOoNHHGb65WNRLMVjREXe4ZsIiqM8KBxRHVc3p+N/ytr2uvkno7ev4W/O+nezK3jX4TaB8Q9VsL7V7Frm70yNo7WVbmWFoVaa3nONjLz5lrA2eo8vjgsD554v8A+Cf/AMKvHGnaLaX2g6tHb6Bc2d1aR2PiTVLAFrQQi3WXyLhPPjQ28DeVNvRmhRmUsoNezUUdb9tfu2DpY4X4mfs4+E/i54b8RaVrFrq0dv4qntLrUZtM1u+0q7eW1aJ7eSO5tZopoGRoYyDE6E7ec5Oes8NeH4PCfh2w0u1e9lttOt47aJ7y8mvbh0RQoMk8zPLK+By8jM7HJYkkmr1FC0VkG+/T+v0R/9k=")
};
var response = await TestClients.Instance.ExecuteUploadMerchantServiceImageAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteUploadMerchantServiceImageAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.MediaId);

View File

@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
Total = 1
}
};
var response = await TestClients.Instance.ExecuteCreatePayTransactionAppAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreatePayTransactionAppAsync(request);
Assert.NotNull(response.PrepayId);
}
@ -44,7 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
OpenId = TestConfigs.WechatOpenId
}
};
var response = await TestClients.Instance.ExecuteCreatePayTransactionJsapiAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreatePayTransactionJsapiAsync(request);
Assert.NotNull(response.PrepayId);
}
@ -63,7 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
Total = 1
}
};
var response = await TestClients.Instance.ExecuteCreatePayTransactionH5Async(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreatePayTransactionH5Async(request);
Assert.NotNull(response.H5Url);
}
@ -82,7 +82,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
Total = 1
}
};
var response = await TestClients.Instance.ExecuteCreatePayTransactionNativeAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreatePayTransactionNativeAsync(request);
Assert.NotNull(response.QrcodeUrl);
}
@ -94,7 +94,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
TransactionId = "FAKE_TRANSACTIONID"
};
var response = await TestClients.Instance.ExecuteGetPayTransactionByIdAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetPayTransactionByIdAsync(request);
Assert.NotNull(response.AppId);
Assert.NotNull(response.MerchantId);
@ -112,7 +112,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
OutTradeNumber = "FAKE_OUTTRADENO"
};
var response = await TestClients.Instance.ExecuteGetPayTransactionByOutTradeNumberAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetPayTransactionByOutTradeNumberAsync(request);
Assert.NotNull(response.AppId);
Assert.NotNull(response.MerchantId);
@ -129,7 +129,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
OutTradeNumber = "TEST20210419193742518"
};
var response = await TestClients.Instance.ExecuteClosePayTransactionAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteClosePayTransactionAsync(request);
Assert.True(response.IsSuccessful());
}

View File

@ -18,8 +18,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
Name = "NAME",
Type = "PERSONAL_OPENID"
};
TestClients.Instance.EncryptRequestSensitiveProperty(request);
var response = await TestClients.Instance.ExecuteAddProfitSharingReceiverAsync(request);
TestClients.InstanceUseRSA.EncryptRequestSensitiveProperty(request);
var response = await TestClients.InstanceUseRSA.ExecuteAddProfitSharingReceiverAsync(request);
Assert.True(response.IsSuccessful());
}

View File

@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
},
Reason = "FAKE_REASON"
};
var response = await TestClients.Instance.ExecuteCreateRefundDomesticRefundAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteCreateRefundDomesticRefundAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.OutRefundNumber);
@ -40,7 +40,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
OutRefundNumber = "FAKE_OUTREFUNDNO"
};
var response = await TestClients.Instance.ExecuteGetRefundDomesticRefundByOutRefundNumberAsync(request);
var response = await TestClients.InstanceUseRSA.ExecuteGetRefundDomesticRefundByOutRefundNumberAsync(request);
Assert.True(response.IsSuccessful());
Assert.NotNull(response.RefundId);

View File

@ -26,8 +26,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
MerchantId = TestConfigs.WechatMerchantId,
MerchantV3Secret = TestConfigs.WechatMerchantSecret,
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantCertificateSerialNumber,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantCertificatePrivateKey,
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantRSACertificateSerialNumber,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantRSACertificatePrivateKey,
AutoEncryptRequestSensitiveProperty = true,
AutoDecryptResponseSensitiveProperty = true
});
@ -39,8 +39,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
MerchantId = TestConfigs.WechatMerchantId,
MerchantV3Secret = TestConfigs.WechatMerchantSecret,
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantCertificateSerialNumber,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantCertificatePrivateKey,
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantRSACertificateSerialNumber,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantRSACertificatePrivateKey,
AutoEncryptRequestSensitiveProperty = false,
AutoDecryptResponseSensitiveProperty = false
});

View File

@ -10,13 +10,27 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
await TestClients.InitializeCertificateManagerAsync();
var request = new Models.QueryCertificatesRequest();
var response = await TestClients.Instance.ExecuteQueryCertificatesAsync(request);
var request = new Models.QueryCertificatesRequest() { AlgorithmType = "RSA" };
var response = await TestClients.InstanceUseRSA.ExecuteQueryCertificatesAsync(request);
Assert.True(response.RawStatus == 200);
Assert.True(response.RawHeaders.Count > 0);
Assert.True(response.RawBytes.Length > 0);
Assert.True(TestClients.Instance.VerifyResponseSignature(response));
Assert.True(TestClients.InstanceUseRSA.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);
request = new Models.QueryCertificatesRequest() { AlgorithmType = "SM2" };
response = await TestClients.InstanceUseSM2.ExecuteQueryCertificatesAsync(request);
Assert.True(response.RawStatus == 200);
Assert.True(response.RawHeaders.Count > 0);
Assert.True(response.RawBytes.Length > 0);
Assert.True(TestClients.InstanceUseSM2.VerifyResponseSignature(response));
Assert.NotNull(response.WechatpayRequestId);
Assert.NotNull(response.WechatpayNonce);
Assert.NotNull(response.WechatpayTimestamp);

View File

@ -7,31 +7,41 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
static TestClients()
{
var certificateManager = new Settings.InMemoryCertificateManager();
Instance = new WechatTenpayClient(new WechatTenpayClientOptions()
var manager = new Settings.InMemoryCertificateManager();
InstanceUseRSA = new WechatTenpayClient(new WechatTenpayClientOptions()
{
MerchantId = TestConfigs.WechatMerchantId,
MerchantV3Secret = TestConfigs.WechatMerchantSecret,
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantCertificateSerialNumber,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantCertificatePrivateKey,
PlatformCertificateManager = certificateManager
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantRSACertificateSerialNumber,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantRSACertificatePrivateKey,
PlatformCertificateManager = manager
});
InstanceUseSM2 = new WechatTenpayClient(new WechatTenpayClientOptions()
{
MerchantId = TestConfigs.WechatMerchantId,
MerchantV3Secret = TestConfigs.WechatMerchantSecret,
SignScheme = Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3,
MerchantCertificateSerialNumber = TestConfigs.WechatMerchantSM2CertificateSerialNumber!,
MerchantCertificatePrivateKey = TestConfigs.WechatMerchantSM2CertificatePrivateKey!,
PlatformCertificateManager = manager
});
}
internal static async Task InitializeCertificateManagerAsync()
{
var request = new Models.QueryCertificatesRequest();
var response = await Instance.ExecuteQueryCertificatesAsync(request);
var request = new Models.QueryCertificatesRequest() { AlgorithmType = "ALL" };
var response = await InstanceUseRSA.ExecuteQueryCertificatesAsync(request);
if (!response.IsSuccessful())
throw new Exception();
foreach (var certificate in Instance.DecryptResponseSensitiveProperty(response).CertificateList)
foreach (var certificate in InstanceUseRSA.DecryptResponseSensitiveProperty(response).CertificateList)
{
Instance.PlatformCertificateManager.AddEntry(new Settings.CertificateEntry(certificate));
InstanceUseRSA.PlatformCertificateManager.AddEntry(new Settings.CertificateEntry(certificate));
}
}
public static readonly WechatTenpayClient Instance;
public static readonly WechatTenpayClient InstanceUseRSA;
public static readonly WechatTenpayClient InstanceUseSM2;
}
}

View File

@ -19,8 +19,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
var config = jdoc.RootElement.GetProperty("TestConfig");
WechatMerchantId = config.GetProperty("MerchantId").GetString()!;
WechatMerchantSecret = config.GetProperty("MerchantSecret").GetString()!;
WechatMerchantCertificateSerialNumber = config.GetProperty("MerchantCertificateSerialNumber").GetString()!;
WechatMerchantCertificatePrivateKey = config.GetProperty("MerchantCertificatePrivateKey").GetString()!;
WechatMerchantRSACertificateSerialNumber = config.GetProperty("MerchantRSACertificateSerialNumber").GetString()!;
WechatMerchantRSACertificatePrivateKey = config.GetProperty("MerchantRSACertificatePrivateKey").GetString()!;
WechatMerchantSM2CertificateSerialNumber = config.GetProperty("MerchantSM2CertificateSerialNumber").GetString();
WechatMerchantSM2CertificatePrivateKey = config.GetProperty("MerchantSM2CertificatePrivateKey").GetString();
WechatAppId = config.GetProperty("AppId").GetString()!;
WechatOpenId = config.GetProperty("OpenId").GetString()!;
@ -35,8 +37,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
public static readonly string WechatMerchantId;
public static readonly string WechatMerchantSecret;
public static readonly string WechatMerchantCertificateSerialNumber;
public static readonly string WechatMerchantCertificatePrivateKey;
public static readonly string WechatMerchantRSACertificateSerialNumber;
public static readonly string WechatMerchantRSACertificatePrivateKey;
public static readonly string? WechatMerchantSM2CertificateSerialNumber;
public static readonly string? WechatMerchantSM2CertificatePrivateKey;
public static readonly string WechatAppId;
public static readonly string WechatOpenId;

View File

@ -2,8 +2,10 @@
"TestConfig": {
"MerchantId": "请在此填写用于测试的微信商户号",
"MerchantSecret": "请在此填写用于测试的微信商户 API v3 密钥",
"MerchantCertificateSerialNumber": "请在此填写用于测试的微信商户 API 证书序列号",
"MerchantCertificatePrivateKey": "请在此填写用于测试的微信商户 API 证书私钥(字符串格式)",
"MerchantRSACertificateSerialNumber": "请在此填写用于测试的微信商户基于 RSA 算法的 API 证书序列号",
"MerchantRSACertificatePrivateKey": "请在此填写用于测试的微信商户基于 RSA 算法的 API 证书私钥(字符串格式)",
"MerchantSM2CertificateSerialNumber": "请在此填写用于测试的微信商户基于 SM2 算法的 API 证书序列号",
"MerchantSM2CertificatePrivateKey": "请在此填写用于测试的微信商户基于 SM2 算法的 API 证书私钥(字符串格式)",
"AppId": "请在此填写用于测试的微信 AppId",
"OpenId": "请在此填写用于测试的微信用户唯一标识"
},