支付宝异步接口和同步接口验签失败:AlipaySignature.RSACheckV1一直为false的原因
广告:
原因:不同的服务器不一样,有的服务器正常,有的服务器一直为false,有下面解决方案
bool flag = AlipaySignature.RSACheckV1(sArray, config.alipay_public_key, config.charset, config.sign_type, false);
首先把 AopSdk 项目文件的 AlipaySignature.cs
RSACheckContent(string signContent, string sign, string publicKeyPem, string charset, string signType, bool keyFromFile)
catch
{
return false;
}
改成如下面:
catch (Exception ex) //20200110 改动更新 加上 Exception ex
{
throw (ex);
// return false;
}
这样就可以看到错误的原因。
然后程序提示下面错误:
事件代码: 3005
事件消息: 发生了未处理的异常。
事件时间: 2020/1/11 14:46:54
事件时间(UTC): 2020/1/11 6:46:54
事件 ID: 2e48baa260194296a0646eb3355c505d
事件序列: 6
事件匹配项: 1
事件详细信息代码: 0
应用程序信息:
应用程序域: /LM/W3SVC/19/ROOT-2-132231988145201111
信任级别: Full
应用程序虚拟路径: /
应用程序路径: D:\webwww2016\xiyaoheweb2016\testweb\
计算机名: WINDOWS2012R2
进程信息:
进程 ID: 4244
进程名: w3wp.exe
帐户名: IIS APPPOOL\alipay
异常信息:
异常类型: CryptographicException
异常消息: 系统找不到指定的文件。
请求信息:
请求 URL: http://hong.ysneo.com/test.aspx
请求路径: /test.aspx
用户主机地址: 123.59.44.206
用户:
是否已经过身份验证: False
身份验证类型:
线程帐户名: IIS APPPOOL\alipay
线程信息:
线程 ID: 3
线程帐户名: IIS APPPOOL\alipay
是否正在模拟: False
堆栈跟踪: 在 Aop.Api.Util.AlipaySignature.RSACheckContent(String signContent, String sign, String publicKeyPem, String charset, String signType, Boolean keyFromFile) 位置 E:\aspnet2.0\nyweb_jia\支付宝支付\alipay-sdk-NET20170615-xiyaohe\Util\AlipaySignature.cs:行号 311
在 Aop.Api.Util.AlipaySignature.RSACheckV1Test(String sign, String signContent, String publicKeyPem, String charset, String signType, Boolean keyFromFile) 位置 E:\aspnet2.0\nyweb_jia\支付宝支付\alipay-sdk-NET20170615-xiyaohe\Util\AlipaySignature.cs:行号 175
在 Test.Page_Load(Object sender, EventArgs e)
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
解决方法:(3选一)
1. 打开IIS7.5设置,应用程序池--》找到自己的应用程序(网站名称)-->右键-->高级设置-->在进程模型区域,有个-用户加载配置文件-选择后面为true.这个问题就解决了。
2 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
改成:
CspParameters RSAParams = new CspParameters(); // 20200111
RSAParams.Flags = CspProviderFlags.UseMachineKeyStore;//
System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024, RSAParams);//
3.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 改成
RSACryptoServiceProvider.UseMachineKeyStore = true; //new add 添加这一行
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
广告: