essensoft / paylink

一套基于 .NET 开发的支付SDK,它简化了API调用及通知的处理流程。
MIT License
1.77k stars 484 forks source link

发现WeChatPayOptions中造成_optionsAccessor.Value报错的原因 #120

Closed 1523400779 closed 3 years ago

1523400779 commented 3 years ago

WeChatPayOptions中的Certificate属性, 注释中表示可为 .p12证书文件路径、.p12证书文件的Base64编码, 但是,如果输入p12文件路径时,就会报错:如下: ERROR 2021-06-28 20:36:08,803 [21 ] Mvc.ExceptionHandling.AbpExceptionFilter - Exception has been thrown by the target of an invocation. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) at System.Convert.FromBase64String(String s) at Essensoft.Paylink.WeChatPay.WeChatPayOptions.GetCertificateInfo() at Essensoft.Paylink.WeChatPay.WeChatPayOptions.set_Certificate(String value)

重现方法: 在WebApplicationSample的appsettings.json文件中, 设置WeChatPay:Certificate 为:"/wechat-pay-certificate/apiclient_cert.p12"可重现此问题

roc916 commented 3 years ago

说明并没有找到.p12文件 https://github.com/essensoft/paylink/blob/9d3da6ea6dceefaeb8cb0a0ab59e7386a736f513/src/Essensoft.Paylink.WeChatPay/WeChatPayOptions.cs#L125

roc916 commented 3 years ago

你要是搞不清相对路径怎么弄 ,就用绝对路径吧

1523400779 commented 3 years ago

image image 这个是我服务器上的文件, /wechat-pay-certificate/在wwwroot下,不是我搞不清绝对路径和相对路径, 而且这个问题以前都是没有的,我之前在.net core 3.1下就已经发布好了, 都没有动过,只是更新到.net 5之后才出现的。

1523400779 commented 3 years ago

我其实只要用base64就行了,只是想找到问题到底出在哪里, 没关系,你不用管了,我自己扒你代码看

roc916 commented 3 years ago

/wechat-pay-certificate/ 应该是在可执行文件之下 而不是wwwroot.... 另外证书这种东西你也敢放wwwroot......

andrew2558 commented 3 weeks ago

@1523400779 请问你这个问题后来是怎么解决的,我也碰到了这个问题,发现是File.exists判断文件时,说文件不存在,其实文件是存在的。这可能是iis哪里出了问题?请问你是怎么解决的