CA证书出错,请登录微信支付商户平台下载证书

仰望那天空 2015-07-28 02:59:09
问题如标题

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();
}



经调试运行错误地方为:


System.Security.Cryptography.X509Certificates.X509Certificate2 cert = store.Certificates.Find(X509FindType.FindBySubjectName, "证书名称就不写出来了", false)[0];


上面这句代码是通过名称查找证书,但是这个数组返回空,找不到对应证书。

至此问题描述完毕,请求各位大神帮忙!
...全文
28693 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35599945 2016-07-14
  • 打赏
  • 举报
回复
你好,我也出现网站要求标识,请选择证书窗口,请问要如何解决?
  • 打赏
  • 举报
回复
//C#调用证书 X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); 其中cert为证书路径
kmy001 2015-09-30
  • 打赏
  • 举报
回复
X509Certificate cert = new X509Certificate(certPath, password); X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD); 把 X509Certificate 改成 X509Certificate2
仰望那天空 2015-07-29
  • 打赏
  • 举报
回复
问题还在解决中…………证书已经查找到了,出现其它问题了。 有做过的朋友,关于微信红包这块出现的问题解决办法,方便的话,都贴出来给大家参考一下咯………… 等我解决了手上的问题……再把完整代码贴出来。
仰望那天空 2015-07-29
  • 打赏
  • 举报
回复
@wg5945 你这个证书是微信支付的时候用的吗?对于服务器上有需要配置什么 的吗? 以下是我写的微信红包功能代码,大家看看有没有什么问题?

string _poststr = "";
string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
string certPath = Server.MapPath("/weixinApp/cert/apiclient_cert.p12");  //证书已上传到对应目录
string password = "1244531402";
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
X509Certificate cert = new X509Certificate(certPath, password);

byte[] buffer = Encoding.UTF8.GetBytes(sbxml.ToString());//红包相关的xml数据
StreamWriter myWriter = null;
//根据url创建HttpWebRequest对象
HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
objRequest.Method = "POST";
objRequest.ContentLength = buffer.Length;
objRequest.ContentType = "text/xml";//提交xml 
//是否和请求一起发送
//objRequest.UseDefaultCredentials = true;
objRequest.ClientCertificates.Add(cert);

try
{
       myWriter = new StreamWriter(objRequest.GetRequestStream());
       myWriter.Write(sbxml.ToString());
}
catch (Exception e)
 {
        WriteFileLog(e.Message);
 }
finally
{
        myWriter.Close();
 }

 //读取服务器返回信息
HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
//using作为语句,用于定义一个范围,在此范围的末尾将释放对象
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
     //ReadToEnd适用于小文件的读取,一次性的返回整个文件
    _poststr = sr.ReadToEnd();
    sr.Close();
 }

引用 8 楼 wg5945 的回复:
那个例子里面不是有么

//是否使用证书
if (isUseCert)
{
    string path = HttpContext.Current.Request.PhysicalApplicationPath;
    X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
    
    request.ClientCertificates.Add(cert);
}

wg5945 2015-07-29
  • 打赏
  • 举报
回复
那个例子里面不是有么

//是否使用证书
if (isUseCert)
{
    string path = HttpContext.Current.Request.PhysicalApplicationPath;
    X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
    
    request.ClientCertificates.Add(cert);
}

仰望那天空 2015-07-29
  • 打赏
  • 举报
回复
引用 6 楼 wg5945 的回复:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 照抄官方demo,没发现有什么问题
哦,对于证书这块,你是怎么处理的? 能贴点代码出来么? 非常感谢!
wg5945 2015-07-29
  • 打赏
  • 举报
回复
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 照抄官方demo,没发现有什么问题
Poopaye 2015-07-28
  • 打赏
  • 举报
回复
你要不写出来看看吧
仰望那天空 2015-07-28
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
多半是证书名写错了,把Certificates里的证书名全输出来看看叫啥名称吧
额,名称肯定是没有错的。刚才经你提醒,又对比了一次,准确无误呀…………
Poopaye 2015-07-28
  • 打赏
  • 举报
回复
多半是证书名写错了,把Certificates里的证书名全输出来看看叫啥名称吧

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧