Skip to content

Commit

Permalink
创建 CreatePaySignTest 单元测试,测试通过
Browse files Browse the repository at this point in the history
  • Loading branch information
JeffreySu committed Aug 24, 2021
1 parent 5ff1475 commit d081d06
Show file tree
Hide file tree
Showing 10 changed files with 499 additions and 429 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
"timeStamp": "@ViewData["timeStamp"]", //时间戳
"nonceStr": "@ViewData["nonceStr"]", //随机串
"package": "@Html.Raw(ViewData["package"])",//扩展包
"signType": "MD5", //微信签名方式:MD5
"signType": "RSA", //微信V3签名方式:RSA
"paySign": "@ViewData["paySign"]" //微信签名
}, function (res) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
"timeStamp": "@ViewData["timeStamp"]", //时间戳
"nonceStr": "@ViewData["nonceStr"]", //随机串
"package": "@Html.Raw(ViewData["package"])",//扩展包
"signType": "RSA", //微信签名方式:MD5
"signType": "MD5", //微信签名方式:MD5
"paySign": "@ViewData["paySign"]" //微信签名
}, function (res) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;netstandard2.0;netstandard2.1</TargetFrameworks>
<Version>16.14.2-preview3</Version>
<Version>16.15.0-preview1</Version>
<AssemblyName>Senparc.Weixin.MP</AssemblyName>
<RootNamespace>Senparc.Weixin.MP</RootNamespace>
<GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>
Expand Down Expand Up @@ -505,6 +505,10 @@
v16.14.2
1、Register 提供对 ApiHandlerWapper 委托的设置方法
2、添加用户提交抬头后,商户会收到用户提交的事件(submit_invoice_title)

v16.15.0
1、接入微信支付 V3
2、SEnparcWeixinSetting 添加 record 能力
</PackageReleaseNotes>
<RepositoryUrl>https://github.com/JeffreySu/WeiXinMPSDK</RepositoryUrl>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,27 @@ namespace Senparc.Weixin.TenPayV3.Apis.Tests
[TestClass()]
public class BasePayApisTests : BaseTenPayTest
{

[TestMethod()]
public void CertificatesTest()
{
BasePayApis basePayApis = new BasePayApis();
var certs = basePayApis.CertificatesAsync().GetAwaiter().GetResult();
Assert.IsNotNull(certs);
Console.WriteLine(certs.ToJson(true));
Assert.IsTrue(certs.ResultCode.Success);
Assert.IsNull(certs.VerifySignSuccess);//不参与验证

Console.WriteLine();

var tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
var cert = certs.data.First();
var pubKey = ApiSecurityHelper.AesGcmDecryptCiphertext(tenpayV3Setting.TenPayV3_APIv3Key, cert.encrypt_certificate.nonce,
cert.encrypt_certificate.associated_data, cert.encrypt_certificate.ciphertext);
Console.WriteLine(pubKey);
Assert.IsNotNull(pubKey);
}

[TestMethod()]
public void JsAPiAsyncTest()
{
Expand Down Expand Up @@ -46,24 +67,5 @@ public void JsAPiAsyncTest()

}

[TestMethod()]
public void CertificatesTest()
{
BasePayApis basePayApis = new BasePayApis();
var certs = basePayApis.CertificatesAsync().GetAwaiter().GetResult();
Assert.IsNotNull(certs);
Console.WriteLine(certs.ToJson(true));
Assert.IsTrue(certs.ResultCode.Success);
Assert.IsNull(certs.VerifySignSuccess);//不参与验证

Console.WriteLine();

var tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
var cert = certs.data.First();
var pubKey = ApiSecurityHelper.AesGcmDecryptCiphertext(tenpayV3Setting.TenPayV3_APIv3Key, cert.encrypt_certificate.nonce,
cert.encrypt_certificate.associated_data, cert.encrypt_certificate.ciphertext);
Console.WriteLine(pubKey);
Assert.IsNotNull(pubKey);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class BaseTenPayTest

public BaseTenPayTest()
{
//Senparc.Weixin.Config.UseSandBoxPay = true;
RegisterStart();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Senparc.Weixin.TenPayV3.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Senparc.Weixin.TenPayV3.Test.Helpers.Tests
{
[TestClass]
public class TenPaySignHelperTests : BaseTenPayTest
{
string privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCwbkFymtSqLLv+LgQPe2JeYIhwkaccbGtJ+k5XWDENouA/2YhsExuHmHxL5TCf0R96WxWQDYLXxL1YNMYbjACerAQr/NaLjXWWz7bCGEmtMfkSSy8Vav+XYGFgbeEixhqhBKnwafVcGkwXABvdVgQPj1KZWFEfB86nFYxlwhBd/lMN64oE87b8Q8gQSSKavr8rupNk/+dJ9MxfbLB8Ocbx3oQc46qttIPwxw7tsO263YgSnHz/pWFKTM9HVcehKm3yLq4Ka31NXZNx7yY3FJvkTxk00HFoKIOkJ7oHVSSz1d/BcFV0J0j4o2aiJ8dV4Y8jVXyCm8daoROIUJ06pLUdAgMBAAECggEBAIQKgEDdT7vsruWUWsWbegtYA8T7vS2wlrtO8cK85jlmZJ5kl40K39ejb6L9bF6vi/duo7yj4ADL5UlWdc24Ad6+roCdQZQ/0nmECytIMhvFAruGOT62TYNlRnt8wLnduaA4dVbQdijwJXIxSqlj7rYWdaL+TfgDR84UenbNvqIYrkK2/ygesBx4FyZ0PPxBCNLtom6AgRcPm5paqN5D9gErYnmH9tDhyWaVNlR4Yl3fTu5OAji1oOo7IPK6c3h8onu/2oVSTT2hnyViGOnb9PfdF8HLpBYn1jDhY02G7dHSXE9nFZsfdEMtlv4UsKtDEeQWDHWZFLG7Jj6WkYP9qgECgYEA4NL1C543+0ygWtqSUpEraFyvmPr0kR0jOFFzQxRQ04GHNQTPUqKL6q9Wzz0k6MXpb6naDh6Zt4NazMhY6gXA+JvMFT9jO8Flga5ugbCDoSkh7GZHF2ILRmBnzbiq5OcaZWT2uGZ5hF7n+93EX2yI+Oajmwl58sMVYQrusS3gI40CgYEAyOVhIFT0+mK5fwFLO9imJOQNv28/kwOvs3xiNzP7t+lBnnyHgKADFzqDrlTmwlMvkjiXFrL9lVFiRbuZKgDgRxIlLyrrGQDDhELZTCbBQRw0US5jaEty5d4exMVc5sYtBQU7KeGvMNuHQPOCr9sL2yMkHqAPh59wLkjJrsgrK9ECgYAXyJldukYn0opgMiEqlOrnpm55G4tF0rRIH+22me6XAWvhQvn/vuxYTmY7lDdUXKN+SZSky73tOPshEMy/LQ6l/i1Pzh3cU3A+kMpl89to8CYDkSpSIfAZaNdyXufNQVl8gnrLNSQDydp2vZYplhzDX/rMyurYsKSRWIu5uKWufQKBgBUpDATyzeb9tRoqkbkZBc8G8mfCmQisL7qRFGtKH25stEu0RDWJJSoyMKKRMMkxJ+aX7VonukwbCWXc77Ib64Ow5pfERoUYrn9k5yx9PIfWJ7CRWUkoAU8zCTyiqTlpkF5iAaxUqDZWOTXfMFnDkckgN3K+W0Rmx9MoOY4eaWWxAoGBAIjVLqW+Dg9T9eUj6xqILDg6w0vYX9gm0pMQ5dPmC6XFHiYb2zbM2MonKAgYxPDQpBLWqNjQLjNRUeqeo2XEyFmMVYM4/Bx5PxTyhxzbiYI4eohVdCJaw73tFtVa/gTq2lmqQTPwaW7mof2JPbGOOY2vZ+HZhsuwwVA7nIW/NCqa";

string package = "prepay_id=wx201410272009395522657a690389285100";

[TestMethod]
public void CreatePaySignTest()
{
var appId = "wx8888888888888888";
var timestamp = "1414561699";
var nonceStr = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS";

var separcWeixinSetting = Config.SenparcWeixinSetting.TenpayV3Setting;

var result = TenPaySignHelper.CreatePaySign(timestamp, nonceStr, package, appId, privateKey);
Assert.IsNotNull(result);

var exceptedResult = "POmTZCzk7fj+FeSwbU4rNghygFOzwpoaQt9SBW8blDAPZCVJ7wVnDVisx6t1ryyBpB3NmOwiNaT+hHi7YthYZzr0kvL5kWKSnpssyWBofnjqbFWBSV8JaFx7Ia2qnsgdVYALisYjLBr+bj69YXuyWiBxYFx+JylH6wW4w55Rziatoa4rwrdlrpgE2yRTxDu9wSZ4VCdUYSMj2ctyAy2fOiCcP00VGjihJWGCXXjeVm2YQyFZXB7KqGPhncdHaFmJzIvL8SbWKSc36cUKSuHhZ5n+oZVU8Vf+lb/eJibzTWxBIAJbtQplKojG48ukd7QFtRUd3b2EkOjzmeJ26zMlfA==";

Assert.AreEqual(exceptedResult, result);
}


[TestMethod()]
public void CreatePaySign_ByPrivateKeyTest()
{
var appId = "wx8888888888888888";
var timestamp = "1414561699";
var nonceStr = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS";

var result = TenPaySignHelper.CreatePaySign(timestamp, nonceStr, package, appId, privateKey);
Assert.IsNotNull(result);
Console.WriteLine(result);

var exceptedResult = "POmTZCzk7fj+FeSwbU4rNghygFOzwpoaQt9SBW8blDAPZCVJ7wVnDVisx6t1ryyBpB3NmOwiNaT+hHi7YthYZzr0kvL5kWKSnpssyWBofnjqbFWBSV8JaFx7Ia2qnsgdVYALisYjLBr+bj69YXuyWiBxYFx+JylH6wW4w55Rziatoa4rwrdlrpgE2yRTxDu9wSZ4VCdUYSMj2ctyAy2fOiCcP00VGjihJWGCXXjeVm2YQyFZXB7KqGPhncdHaFmJzIvL8SbWKSc36cUKSuHhZ5n+oZVU8Vf+lb/eJibzTWxBIAJbtQplKojG48ukd7QFtRUd3b2EkOjzmeJ26zMlfA==";
Assert.AreEqual(exceptedResult, result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ public static string CreateSign(string message, string privateKey = null)
}
}

// TODO: 待测试
/// <summary>
/// 获取调起支付所需的签名
/// </summary>
Expand All @@ -84,8 +83,20 @@ public static string CreatePaySign(string timeStamp, string nonceStr, string pac
var appId = senparcWeixinSettingForTenpayV3.TenPayV3_AppId;
var privateKey = senparcWeixinSettingForTenpayV3.TenPayV3_PrivateKey;

string contentForSign = $"{appId}\n{timeStamp}\n{nonceStr}\n{package}\n";
return CreatePaySign(timeStamp, nonceStr, package, appId, privateKey);
}

/// <summary>
/// 获取调起支付所需的签名
/// </summary>
/// <param name="timeStamp">时间戳</param>
/// <param name="nonceStr">随机串</param>
/// <param name="package">格式:prepay_id={0}</param>
/// <param name="privateKey">商户证书私钥</param>
/// <returns></returns>
public static string CreatePaySign(string timeStamp, string nonceStr, string package, string appId, string privateKey)
{
string contentForSign = $"{appId}\n{timeStamp}\n{nonceStr}\n{package}\n";
return CreateSign(contentForSign, privateKey);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ namespace Senparc.Weixin.Entities
/// <summary>
/// <para>Senparc.Weixin JSON 配置</para>
/// </summary>
public class SenparcWeixinSetting : SenparcWeixinSettingItem//继承 SenparcWeixinSettingItem 是为了可以得到一组默认的参数,方便访问
public record class SenparcWeixinSetting : SenparcWeixinSettingItem//继承 SenparcWeixinSettingItem 是为了可以得到一组默认的参数,方便访问
{
#region 微信全局

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ namespace Senparc.Weixin.Entities
/// <summary>
/// Senparc.Weixin SDK 中单个公众号配置信息
/// </summary>
public class SenparcWeixinSettingItem : ISenparcWeixinSettingForMP, ISenparcWeixinSettingForWxOpen, ISenparcWeixinSettingForWork, ISenparcWeixinSettingForOldTenpay,
public record class SenparcWeixinSettingItem : ISenparcWeixinSettingForMP, ISenparcWeixinSettingForWxOpen, ISenparcWeixinSettingForWork, ISenparcWeixinSettingForOldTenpay,
ISenparcWeixinSettingForTenpayV3, ISenparcWeixinSettingForOpen, ISenparcWeixinSettingForExtension
{
/// <summary>
Expand Down

0 comments on commit d081d06

Please sign in to comment.