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

服务器环境: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);

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

 

C#.NET ,微信退款证书的更多相关文章

  1. 微信退款证书使用c#

    微信退款需要证书 data为已封装好的xml数据 具体怎么封装>打开 public string get(string data) { string cert = @"D:\certi ...

  2. 微信退款验证证书时报错:length too long

    由于springboot文件加载时,默认会加载resources目录下的文件,而微信的证书刚好在它之下,加载时就会报这个错误.解决办法: 在pom.xml文件中,添加如下代码: <plugin& ...

  3. PHP实现微信申请退款(证书权限必须设为可执行)

    前期准备: 当然是搞定了微信支付,不然怎么退款,这次还是使用官方的demo.当然网上可能也有很多大神自己重写和封装了demo,或许更加好用简洁,但是我还是不提倡用,原因如下: (1)可能功能不全,或许 ...

  4. 微信退款 - tp5

    原文:http://www.upwqy.com/details/19.html 1 微信退款官方文档  https://pay.weixin.qq.com/wiki/doc/api/app/app.p ...

  5. 微信小程序支付以及微信退款开发

    最近公司项目急着测试,需要开发微信小程序+微信支付+微信退款,本着这几天的一些研究,决定记录一下开发的过程. 本着知识分享的原则,希望对大家有所帮助. 本篇针对的是微信小程序的支付开发,如果有对微信公 ...

  6. PHP实现微信退款功能

    最近在调微信退款接口,发现有许多坑,更大家分享一下 ① 要是在测试的时候,网页提示 curl 58 说明 证书的路径出现问题(这里要填物理路径,也就是绝对路径) ②网页提示curl 52 说明你的证书 ...

  7. PHP实现微信退款的分析与源码实现

    原文:https://blog.csdn.net/jason19905/article/details/78628349 网上的很多PHP微信支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通 ...

  8. 微信退款和支付宝退款接口调用(java版)

    项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可 ...

  9. node 微信退款

     基于node 的微信退款 申请微信退款:微信退款, 1.在前端页面访问 /refund var request = require('request'); var WxPayRefund = req ...

随机推荐

  1. 使用innerHTML生成的script节点不会发出请求与执行text属性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 【题解】【链表】【Leetcode】Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  3. 使用Jmeter测试MySQL性能——(1)连接配置

    在搭建MySQL集群之后需要测试集群的性能究竟如何,采用Apache的测试工具Jmeter进行测试,本文主要介绍主要实现Jmeter配置连接到MySQL. 安装相应的软件 首先Jmeter是基于Jav ...

  4. Java--常用类

    1.方法中参数传递:值传递 基本数类型:具体的实际值 引用数据类型:对象的地址值 2.继承:关键字:extends单继承继承父类的非私有成员多重继承 2.权限的修饰符:private 只能在当前类的内 ...

  5. sencha 环境配置

    sencha generate app MyApp MyApp 首先需要注意的是安装 sencha 并执行相关命令. 搞了老半天才知道 想要创建空项目首先 必须的在sdk 目录下才可以.好像据说第二次 ...

  6. jq中如何阻止元素的默认行为?

    阻止网页元素的默认行为: event.preventDefault(); 或者:return false;

  7. API中FileReader 接口事件

    FileReader 接口包含了一套完整的事件模型,用于捕获读取文件时的状态onabort        中断onerror        出错onloadstart    开始onprogress  ...

  8. mysql创建用户和创建数据库赋值用户操作权限

    mysql 进入mysqldb SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; ...

  9. spark中streamingContext的使用详解

    两种创建方式 val conf = new SparkConf().setAppName(appName).setMaster(master);val ssc = new StreamingConte ...

  10. linux 命令-全称

    cal = CALendar calendar日历, 历法cat = CATenate 连接, 使连续cd = Change Directorychgrp = CHange GRouPchmod =  ...