fudiwei / DotNetCore.SKIT.FlurlHttpClient.Wechat

可能是全网最完整的 C# 版微信 SDK,封装全部已知的微信 OpenAPI,包含微信公众平台(订阅号+服务号+小程序+小游戏+小商店+视频号)、微信开放平台、微信商户平台(微信支付+微企付)、企业微信、微信广告平台、微信智能对话开放平台等模块,可跨平台。持续随官方更新,欢迎 Star/Fork/PR。QQ 交流群 875580418【满】、930461548【满】、611974621。
https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient
MIT License
1.47k stars 285 forks source link

[BUG] 相同的配置下 TestExecuteCreatePayTransactionJsapi v3.0分支无法通过单元测试 #122

Closed LuohuaRain closed 6 months ago

LuohuaRain commented 6 months ago

关于问题的简单描述

测试项目 SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ApiExecutePayTransactionsTests.cs

TestExecuteCreatePayTransactionJsapi() 相同的配置下(MerchantId MerchantSecret MerchantRSACertificateSerialNumber MerchantRSACertificatePrivateKey AppId OpenId 分支 测试结果
main (v3)
archive/v2.x
 [Fact(DisplayName = "测试用例:调用 API [POST] /pay/transactions/jsapi")]
 public async Task TestExecuteCreatePayTransactionJsapi()
 {
     var request = new Models.CreatePayTransactionJsapiRequest()
     {
         OutTradeNumber = "TEST" + DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff"),
         AppId = TestConfigs.WechatAppId,
         Description = "FAKE_DESCRIPTION",
         ExpireTime = DateTimeOffset.Now.AddMinutes(30),
         NotifyUrl = "http://127.0.0.1",
         Amount = new Models.CreatePayTransactionJsapiRequest.Types.Amount()
         {
             Total = 1
         },
         Payer = new Models.CreatePayTransactionJsapiRequest.Types.Payer()
         {
             OpenId = TestConfigs.WechatOpenId
         }
     };
     var response = await TestClients.InstanceUseRSA.ExecuteCreatePayTransactionJsapiAsync(request);

     Assert.NotNull(response.PrepayId);
 }

异常堆栈或异常原因

{SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreatePayTransactionJsapiResponse}
    ErrorCode: "SIGN_ERROR"
    ErrorDetail: Count = 4
    ErrorMessage: "签名错误,请检查后再试"
    PrepayId: null
    WechatpayCertificateSerialNumber: ""
    WechatpayNonce: ""
    WechatpayRequestId: "08CFDAB0*****AC0318BCC8EEA30620FFCD19289A9203-********"
    WechatpaySignature: ""
    WechatpaySignatureType: ""
    WechatpayTimestamp: ""

response.ErrorDetail

{
  "detail": {
    "issue": "sign not match"
  },
  "field": "signature",
  "location": "authorization",
  "sign_information": {
    "method": "POST",
    "sign_message_length": 362,
    "truncated_sign_message": "POST\n/v3/pay/transactions/jsapi\n1707879759\n9e448e1d945c4ed186e2ef69015aa351\n{\"mchid\"\n",
    "url": "/v3/pay/transactions/jsapi"
  }
}

发生问题的运行环境

请在此填写以下几项内容:

  1. 操作系统:Windows 11
  2. .NET 版本:.NET 8.0
  3. 使用的模块及版本:SKIT.FlurlHttpClient.Wechat.TenpayV3
  4. 其他环境信息。

补充说明

have no idea for now

fudiwei commented 6 months ago

Fix on release v3.0.1.