C#.NET ,微信退款证书

微信退款时遇到:基础连接已经关闭 连接被意外关闭。

服务器环境:WIN SERVER 2008 R2.  WINDOWS服务承载的WCF服务,基于.NET FRAMEWORK 3.5.

第一笔交易的退款是正常的,第二笔交易的退款就提示这个错误。重新导入证书后正常。再做一笔退款时还是报错。反复如此。

同一环境另一证书一切正常。。。。。。。。

问题代码:

 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);

req.KeepAlive = false;

X509Certificate cer = new X509Certificate(certFullName, password);

在网上搜索了下,有人这样写:

X509Certificate2 certificate = new X509Certificate2(PATH_TO_CERTIFICATE, PASSWORD, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

也有人这样写:

X509Certificate2 cer = new X509Certificate2(certFullName, password,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

 估计是优先从X509KeyStorageFlags.MachineKeySet 这个地方去找证书。

但是没在意他们都用的是:X509Certificate2。而我用的仍是X509Certificate。

“X509Certificate cer = new X509Certificate(certFullName, password);”这段代码是微信官方DEMO里的,如下图:

我以为代码里加下X509KeyStorageFlags即可,即:

X509Certificate cer = new X509Certificate(certFullName, password,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

仍然用的是“X509Certificate”,测试后仍不行。

 无意间注意到两者不是同一个类,就去找X509Certificate和X509Certificate2的不同。

 

在微软文档中:https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.x509certificates.x509certificate(v=vs.90).aspx

有提到:

"ASN.1 DER 是此类支持的唯一证书格式。

在大多数情况下,您应该使用 X509Certificate2 类。"

阿西八,我用的是:X509Certificate.

最后改成:

X509Certificate2 cer = new X509Certificate2(certFullName, password,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

更新下程序,测试了两个证书的四次退款均正常(每证书两次)。

 

 

转载于:https://www.cnblogs.com/runliuv/p/5651106.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值