首页 新闻 会员 周边

C#关于微信红包开发问题:CA证书出错,请登录微信支付商户平台下载证书

0
悬赏园豆:20 [已解决问题] 解决于 2015-08-06 16:04

问题如标题
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 那里也在post请求里面添加了证书。
 
但是结果还是返回:
文__武的主页 文__武 | 菜鸟二级 | 园豆:203
提问于:2015-07-28 15:21
< >
分享
最佳答案
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);
}
UseCert
收获园豆:15
JeffWong | 老鸟四级 |园豆:2328 | 2015-07-28 15:48

还是不行,try  catch两个地方   调试都是在证书查找的地方报错。过不去。我再把证书重装试试吧。谢谢!

文__武 | 园豆:203 (菜鸟二级) | 2015-07-28 16:14
其他回答(2)
0

看你的 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= 去掉。

收获园豆:5
Launcher | 园豆:45045 (高人七级) | 2015-07-28 16:30

问题还在解决中…………证书已经查找到了,出现其它问题了。

如果有做过的朋友,关于微信红包这块出现的问题解决办法,方便的话,都贴出来给大家参考一下咯…………

等我解决了手上的问题……再把完整代码贴出来。

支持(0) 反对(0) 文__武 | 园豆:203 (菜鸟二级) | 2015-07-29 13:03
0

自己顶一个,请大神围观!!!

文__武 | 园豆:203 (菜鸟二级) | 2015-07-30 10:43

亲,你的解决了吗?我现在也遇到了这个问题

支持(0) 反对(0) 沙影 | 园豆:202 (菜鸟二级) | 2016-03-28 16:23

@沙影:

步骤:

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、进入微信公众平台设置-----点开微信支付-----选择开发配置----设置支付授权目录

支持(1) 反对(0) 文__武 | 园豆:203 (菜鸟二级) | 2016-03-30 11:48

@文__武: 非常感谢

支持(0) 反对(0) 沙影 | 园豆:202 (菜鸟二级) | 2016-04-06 15:50

@文__武:  大兄弟,遇到和你一样的问题,证书文件程序已经可以访问,还是提示证书错误,能不能帮忙看下

支持(0) 反对(0) hlgba | 园豆:200 (初学一级) | 2018-05-24 16:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册