解决微信支付中申请退款的基础连接已经关闭的错误

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、维信支付退款错误:基础连接已经关闭的错误

原因:退款操作接口是https 的地址。

解决方案:发起请求时开启tls/ssl 通道,添加安全证书。

推荐示例代码1:

       /// 
        /// 指定Post地址使用Get 方式获取全部字符串
        /// 
        /// 请求后台地址
        /// Post提交数据内容(utf-8编码的)
        /// 
        public static string PostSsl3(string url, string content)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            //添加证书
            X509Certificate2 certificate = new X509Certificate2(@"F:\Mvc_Site\zzy\QL.MiniMall.LA_SZ\cert\apiclient_cert.p12", "1530564111", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
            req.ClientCertificates.Add(certificate);
            //设置安全模式
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;

            #region 添加Post 参数
            byte[] data = Encoding.UTF8.GetBytes(content);
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            #endregion

            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

            Stream stream = resp.GetResponseStream();
            //获取响应内容
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }

解决方案代码示例2:

public static string PostWebRequest(string postUrl, string paramData)
        {
            string ret = string.Empty;
            try
            {
                X509Certificate2 certificate = new X509Certificate2(@"E:\工作项目\apiclient_cert.p12", "1519238551", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);   //初始化证书
                byte[] byteArray = Encoding.Default.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
                webReq.Method = "POST";
                webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
                webReq.ClientCertificates.Add(certificate);     //添加证书
                webReq.ContentLength = byteArray.Length;
      
                
                Stream newStream = webReq.GetRequestStream();   //
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
 
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();       //这里报错
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                ret = sr.ReadToEnd();
                newStream.Close();
                sr.Close();
                response.Close();
                newStream.Close();
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            return ret;

         }

 

 

 

 

 

转载于:https://my.oschina.net/tianma3798/blog/3034078

你可能感兴趣的:(解决微信支付中申请退款的基础连接已经关闭的错误)