Files
DotNetCore.SKIT.FlurlHttpCl…/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/WechatTenpayResponseDecryptionTests.cs

190 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
public class WechatTenpayResponseDecryptionTests
{
private const string RSA_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCd094X2jr6wrL1pIBTSbKX5hVqxyCJhKLqaf31KQsw2LdzfXEOL45KiYr6IshwZaSPFok7Sq+1wLrO6/DZ7/GSmzVwdFIV/zjDbI3jaSHt69ZAJGBS212AzC4cwHvpGrHm3kqzVifJyUNxsoTvWklRGSE50pPWaXoxmdPgD5da8IPDHNzkPM0QYTOlHmIRsDQZpWiZRPaFdrN3i/qG9toCRCPVptCVNYrWLDEFXh3ioOqOdTk1fHxFczaNf4YvQhsqXlG/lGiqGbuPuFYfF/RvS9KfptAM1yycknTslkSeiOpA22sFbDdb+m7DHv+nc8DQPPmD7SxDwVIDTcIS7pEJAgMBAAECggEAM6E+czEZwDR3FLKGpDhkqxpCgVa4xyPTo7mesVeG6KjMgoRTup9F/g42n5NHXLVzereVlwbcqiltMwmuFa1PqnUJq0ryG24NZKibVfxrdAiFYyBDPneyg9LHdvJk1qG79tlbOIWDqJglbwlGQYKYn2YIH4FKiYahyZ4X2KFhEwc9mWydHSOyN8zOOJcRCy1FzUcUvITRKob+Q9epz9/4/VX0g1AnB6FwIR5pBqwMYLSv+g+JxfVKPRnSaIxq/2HOvhiyJ7fUqX1yGI+konJJHrn66JIux8xt4SxEnomZBveHlOMUTgTqovxpXisbvXQGBDV7dwW/qhGZet6h57qogQKBgQDNFLP9S6aPnwseeavxK0ygQpgJRbXbHCyqH/mVA/Pg9DaIhxl7+JCC1lS/JuZslow4t3JvjwixAzQEz9SkwUuiRO5vUWb5R+DZJ8HeqtMfoll6wxepu1TQT1pTPnSHliJQP15k5AQ1bkTZjcGA79iUmkksa4EP/GWtOooE8JhMEQKBgQDFA6oyBtbMyWlnGmdsieQuRsjCklZhPL93INX5VUfcfRqQdhqrmoaJg+OZTwVrARp6VHGEaURBTSj6bSoRbBckFNxjVsL6Utpgof+ZWmr5u8ZGHGHIPJMLt7GxI9SItpNNNY33OiUkkfSH4zHK5KZeG9sKKraQwITJCwLZUnnNeQKBgChHkLKHUUeULVLnAuZzYrF3YvUvQ/CtL/iaHyMti5D7Zlqabl7zCy8nea2xrkBVsWTSYx+WMFbUEjt/tnxFmt1cPJiQnHEJtRfxvxpE4wKrmHeMKfGkYZwoec0vzyNyUXsBd0DJqCn2Zn90YDU65ocJZqXa15aUNEQ54zHlL4SBAoGAHbve3OwBUSj4unHWuB/bi0xtkkgJt2U2tGEFSjsfvFw5PSJGBi4tLeX03Ld7ZtnkyB+kfkpw3bYqgBknpzd8CpsHZAq9JJCKmtj4PYnS6Vv4oa4458KUoskXjVeOBRAhDR8PDQf+gRVyJWwZoLh/j2Z+2Xr20MPthnYd+PSko2kCgYBra4rMhYx2Hg0rRe2O7ju+MPm+JK01VpbvwDTnEPnYgMImDmLAXF6GljCt3iy/8X1WcjMPxGjTJ/xfTMne/aqKwvPhZCBL4DdNLNRzppCovsaaMHzrQzy4cvg0IEhIprFeR7ED4eMs8zLUhl3vgNhHOkeQ7cyuEnTl5wB9xOkbSw==-----END PRIVATE KEY-----";
private const string RSA_PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAndPeF9o6+sKy9aSAU0myl+YVascgiYSi6mn99SkLMNi3c31xDi+OSomK+iLIcGWkjxaJO0qvtcC6zuvw2e/xkps1cHRSFf84w2yN42kh7evWQCRgUttdgMwuHMB76Rqx5t5Ks1YnyclDcbKE71pJURkhOdKT1ml6MZnT4A+XWvCDwxzc5DzNEGEzpR5iEbA0GaVomUT2hXazd4v6hvbaAkQj1abQlTWK1iwxBV4d4qDqjnU5NXx8RXM2jX+GL0IbKl5Rv5Roqhm7j7hWHxf0b0vSn6bQDNcsnJJ07JZEnojqQNtrBWw3W/puwx7/p3PA0Dz5g+0sQ8FSA03CEu6RCQIDAQAB-----END PUBLIC KEY-----";
private const string MockText = "mock_text";
private readonly Lazy<WechatTenpayClient> MockClientInstance = new Lazy<WechatTenpayClient>(() =>
{
return new WechatTenpayClient(new WechatTenpayClientOptions()
{
MerchantCertPrivateKey = RSA_PRIVATE_KEY
});
}, isThreadSafe: false);
[Fact(DisplayName = "解密响应中的敏感数据([GET] /ecommerce/applyments/out-request-no/{out_request_no}")]
public void DecryptResponseSensitiveProperty_GetEcommerceApplymentByOutRequestNumberResponseTest()
{
var mock = new Models.GetEcommerceApplymentByOutRequestNumberResponse()
{
RawStatus = 200,
ApplymentState = MockText,
AccountValidation = new Models.GetEcommerceApplymentByOutRequestNumberResponse.Types.AccountValidation()
{
AccountName = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
AccountNumber = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
DestinationAccountName = MockText,
DestinationAccountNumber = MockText
}
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.ApplymentState);
Assert.Equal(MockText, data.AccountValidation.AccountNumber);
Assert.Equal(MockText, data.AccountValidation.DestinationAccountName);
Assert.Equal(MockText, data.AccountValidation.DestinationAccountNumber);
Assert.Equal(MockText, data.AccountValidation.AccountName);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /ecommerce/bill/fundflowbill")]
public void DecryptResponseSensitiveProperty_GetEcommerceBillFundflowBillResponse()
{
var mock = new Models.GetEcommerceBillFundflowBillResponse()
{
RawStatus = 200,
DownloadBillCount = 1,
DownloadBillList = new Models.GetEcommerceBillFundflowBillResponse.Types.DownloadBill[]
{
new Models.GetEcommerceBillFundflowBillResponse.Types.DownloadBill()
{
DownloadUrl = MockText,
EncryptKey = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText)
},
new Models.GetEcommerceBillFundflowBillResponse.Types.DownloadBill()
{
DownloadUrl = MockText,
EncryptKey = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText)
}
}
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(1, data.DownloadBillCount);
Assert.Equal(MockText, data.DownloadBillList[0].DownloadUrl);
Assert.Equal(MockText, data.DownloadBillList[0].EncryptKey);
Assert.Equal(MockText, data.DownloadBillList[1].DownloadUrl);
Assert.Equal(MockText, data.DownloadBillList[1].EncryptKey);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /merchant-service/complaints-v2/{complaint_id}")]
public void DecryptResponseSensitiveProperty_GetMerchantServiceComplaintByComplaintIdResponse()
{
var mock = new Models.GetMerchantServiceComplaintByComplaintIdResponse()
{
RawStatus = 200,
ComplaintOrderList = new Models.GetMerchantServiceComplaintByComplaintIdResponse.Types.ComplaintOrder[]
{
new Models.GetMerchantServiceComplaintByComplaintIdResponse.Types.ComplaintOrder()
{
TransactionId = MockText
}
},
ComplaintDetail = MockText,
PayerPhone = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText)
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.ComplaintDetail);
Assert.Equal(MockText, data.PayerPhone);
Assert.Equal(MockText, data.ComplaintOrderList[0].TransactionId);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /merchant-service/complaints-v2")]
public void DecryptResponseSensitiveProperty_QueryMerchantServiceComplaintsResponse()
{
var mock = new Models.QueryMerchantServiceComplaintsResponse()
{
RawStatus = 200,
ComplaintList = new Models.QueryMerchantServiceComplaintsResponse.Types.Complaint[]
{
new Models.QueryMerchantServiceComplaintsResponse.Types.Complaint()
{
PayerPhone = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
PayerOpenId = MockText
}
}
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.ComplaintList[0].PayerPhone);
Assert.Equal(MockText, data.ComplaintList[0].PayerOpenId);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /smartguide/guides")]
public void DecryptResponseSensitiveProperty_QuerySmartGuidesResponse()
{
var mock = new Models.QuerySmartGuidesResponse()
{
RawStatus = 200,
GuideList = new Models.QuerySmartGuidesResponse.Types.Guide[]
{
new Models.QuerySmartGuidesResponse.Types.Guide()
{
GuideId = MockText,
UserName = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
UserMobile = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText)
}
}
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.GuideList[0].GuideId);
Assert.Equal(MockText, data.GuideList[0].UserName);
Assert.Equal(MockText, data.GuideList[0].UserMobile);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no}")]
public void DecryptResponseSensitiveProperty_GetTransferBatchDetailByOutDetailNumberResponse()
{
var mock = new Models.GetTransferBatchDetailByOutDetailNumberResponse()
{
RawStatus = 200,
UserName = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
OpenId = MockText
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.UserName);
Assert.Equal(MockText, data.OpenId);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id}")]
public void DecryptResponseSensitiveProperty_GetTransferBatchDetailByDetailIdResponse()
{
var mock = new Models.GetTransferBatchDetailByDetailIdResponse()
{
RawStatus = 200,
UserName = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
OpenId = MockText
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.UserName);
Assert.Equal(MockText, data.OpenId);
}
[Fact(DisplayName = "解密响应中的敏感数据([GET] /partner-transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id}")]
public void DecryptResponseSensitiveProperty_GetPartnerTransferBatchDetailByDetailIdResponse()
{
var mock = new Models.GetPartnerTransferBatchDetailByDetailIdResponse()
{
RawStatus = 200,
UserName = Utilities.RSAUtility.EncryptWithECB(RSA_PUBLIC_KEY, MockText),
OpenId = MockText
};
var data = MockClientInstance.Value.DecryptResponseSensitiveProperty(mock);
Assert.Equal(MockText, data.UserName);
Assert.Equal(MockText, data.OpenId);
}
}
}