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

更新下程序,測試了兩個證書的四次退款均正常(每證書兩次)。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM