问题如标题
1、证书已经下载和安装到服务器
2、证书代码如下:
string strHtml = ""; HttpWebResponse webreponse; try { //系统必须已经导入cert指向的证书 string url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); System.Security.Cryptography.X509Certificates.X509Certificate2 cert = store.Certificates.Find(X509FindType.FindBySubjectName, "证书名称就不写出来了", false)[0]; HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url); webrequest.ClientCertificates.Add(cert); webrequest.Method = "post"; webrequest.KeepAlive = true; webreponse = (HttpWebResponse)webrequest.GetResponse(); Stream stream = webreponse.GetResponseStream(); string resp = string.Empty; using (StreamReader reader = new StreamReader(stream)) { resp = reader.ReadToEnd(); } strHtml = resp; } catch (Exception exp) { strHtml = exp.ToString(); }
经调试运行错误地方为:
1 System.Security.Cryptography.X509Certificates.X509Certificate2 cert = store.Certificates.Find(X509FindType.FindBySubjectName, "证书名称就不写出来了", false)[0];
上面这句代码是通过名称查找证书,但是这个数组返回空,找不到对应证书。
至此问题描述完毕,请求各位大神帮忙!
1、确保证书必须已经导入;
2、应用程序池的标识由ApplicationPoolIdentity改为LocalSystem,重启应用程序池;
3、如果上述步骤还是不同,试一下下面的调用证书代码(certPath是证书绝对路径):
try { var cert = new X509Certificate2(certPath, sslPwd); request.ClientCertificates.Add(cert); } catch { X509Store store = new X509Store("My", StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); X509Certificate2 cert = store.Certificates.Find(X509FindType.FindBySubjectName, sslPwd, false)[0]; request.ClientCertificates.Add(cert); }
还是不行,try catch两个地方 调试都是在证书查找的地方报错。过不去。我再把证书重装试试吧。谢谢!
看你的 MMC 的截图,是“个人”,
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
你要是不知道 SubjectName 是啥,你可以先枚举,如下:
foreach (X509Certificate2 x509 in store.Certificates)
{
Console.WriteLine("Friendly Name: {0}{1}", x509.FriendlyName, Environment.NewLine);
Console.WriteLine("Simple Name: {0}{1}", x509.GetNameInfo(X509NameType.SimpleName, true), Environment.NewLine);
Console.WriteLine("SubjectName:{0}{1}", x509.SubjectName.Name, Environment.NewLine);
}
找到匹配的证书后,使用 x509.SubjectName.Name 这个属性的值,注意 Find 的时候要把 CN= 去掉。
问题还在解决中…………证书已经查找到了,出现其它问题了。
如果有做过的朋友,关于微信红包这块出现的问题解决办法,方便的话,都贴出来给大家参考一下咯…………
等我解决了手上的问题……再把完整代码贴出来。
自己顶一个,请大神围观!!!
亲,你的解决了吗?我现在也遇到了这个问题
@沙影:
步骤:
1、通过微信支付平台下载证书文件(apiclient_cert.p12)
2、服务器上安装证书文件(apiclient_cert.p12)
3、把证书文件放到网站目录下
4、修改微信配置文件(WxPayConfig.cs)中证书路径
//=======【证书路径设置】===================================== /* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要) */ public static string SSLCERT_PATH = "D:/wwwroot/weixinpay/wwwroot/cert/apiclient_cert.p12"; public static string SSLCERT_PASSWORD = "商户号";
5、进入微信公众平台设置-----点开微信支付-----选择开发配置----设置支付授权目录
@文__武: 非常感谢
@文__武: 大兄弟,遇到和你一样的问题,证书文件程序已经可以访问,还是提示证书错误,能不能帮忙看下