日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 使用X509Certificate2获取数字证书信息对接联通沃支付

發布時間:2023/12/20 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 使用X509Certificate2获取数字证书信息对接联通沃支付 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.支付公司準備標準聯調信息

?包括????????.訂單查詢接口地址: ? ??
????????????????.訂單退款接口地址: ? ?
????????????????.接 ? ? 口 ? ? 文 ? 檔:
????????????????.商 ?戶 ? ? 號 ? ? 碼 :
????????????????.分 ? ? 賬 ? ?信 ? ?息:
????????????????.證 ? 書 ? ?密 ? ? 碼 :
????????????????.DEMO ? ? ? ? ? ? ? :?
????????????????.證 ? ?書 ? 路 ? ? 徑:
????????????????.沃 ? ? 賬 ? ?戶 ? 號(付款用):
????????????????.支 ? 付 ? 密 ? ? ?碼(付款用):

證書包括一個私鑰證書一個公鑰證書,密碼相同

2.使用X509Certificate2根據私鑰證書生成簽名

所謂簽名即你要給對方傳遞的參數的經給私鑰證書加密后的密文,單筆支付模塊需要你將參數明文、密文都傳遞過去。第二步只是說明如何生成參數。

將要生成的簽名的參數遍歷成一個字符串,需根據參數名的ASKII碼排序(一定要排,不然對方驗簽通不過),并使用管道符“|”拼接起來,例如 amount=8200|callbackUrl=http://localhost:8003/orderPayCallback.jsp|charSet=GBK|customerEmail=jkdfda@qq.com

/// <summary>/// 獲取證書私鑰對簽名進行SHA256加密/// </summary>/// <param name="str">要加密的參數字符串</param>/// <returns></returns>public byte[] CaRsaEncrypt(){//例子,實際參數不止這些string str = "amount=8200|callbackUrl=http://localhost:8003/orderPayCallback.jsp|charSet=GBK|customerEmail=jkdfda@qq.com";//證書物理路徑、密碼string cert = ConfigurationManager.AppSettings["cerAddress"]?.ToString(); ;string certPwd = ConfigurationManager.AppSettings["certPwd"]?.ToString(); ;//調用證書 傳入路徑、密碼、存儲標識枚舉 X509Certificate2 privateCert = new X509Certificate2(cert, certPwd, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)privateCert.PrivateKey;// 獲取私鑰 RSACryptoServiceProvider privateKey1 = new RSACryptoServiceProvider();privateKey1.ImportParameters(privateKey.ExportParameters(true));byte[] data = Encoding.UTF8.GetBytes(str);//使用SHA256加密byte[] signature = privateKey1.SignData(data, "SHA256");//對簽名密文進行Base64編碼 return signature;}

3.單筆訂單支付

? ? ? ? 支付需將具體參數(參考接口文檔)通過前臺頁面form表單提交至對方指定地址(暫不支持后臺請求接口)。

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head><body><form name="form1" method="post" action=""><input type="hidden" name="interfaceVersion" value=""><input type="hidden" name="tranType" value=""><input type="hidden" name="bankCode" value=""><input type="hidden" name="merNo" value=""><input type="hidden" name="goodsName" value=""><input type="hidden" name="orderDate" value=""><input type="hidden" name="orderNo" value=""><input type="hidden" name="amount" value=""><input type="hidden" name="charSet" value=""><input type="hidden" name="tradeMode" value=""><input type="hidden" name="reqTime" value=""><input type="hidden" name="respMode" value=""><input type="hidden" name="callbackUrl" value=""><input type="hidden" name="serverCallUrl" value=""><input type="hidden" name="signType" value=""><input type="hidden" name="signMsg" value=""><p>&nbsp; </p><button type="submit" form-type="submit|reset">保存</button></form></body></html>

其中signMsg是其他所有參數的密文簽名。支付公司會對你發送的明文參數與密文簽名進行驗簽,接下來說明如何生成密文簽名。

4.在聯通收銀臺支付后,返回商戶網站

支付時回調地址作為參數傳過去,支付完成后聯通沃支付將頁面重定向至你給他傳的回調地址上,并攜帶參數,參數同樣包括明文密文,需要在我們的回調地址方法中進行驗簽和業務處理后,再重定向至自己網站的支付成功頁面。

//在控制器用此方式接收對方傳入的參數 var @params = HttpContext.Request.Form;

在驗簽時,我們將對方傳過來的參數按照第二步同樣的方式,按參數列表的鍵的ASKII碼排序并用管道符“|”拼接為字符(注意,要將參數列表中的signMsg密文簽名去除)。

//將對方傳的加密簽名從Base64字符串轉字節數組byte[] signMsgBytes = Convert.FromBase64String(orderPay.PAY_BACK_SIGNMSG);//參數字符串轉字節數組byte[] paramsBytes = Encoding.UTF8.GetBytes(paramsMsg);//驗簽Boolean VerifyResult = RSADecrypt(paramsBytes, signMsgBytes);

注意要將對方的密文簽名進行base64解碼后,再進行驗簽。

/// <summary>/// 驗證密文是否相同/// </summary>/// <param name="signDataToDecrypt">元數據</param>/// <param name="DataToDecrypt">簽名數據</param>/// <returns></returns>public Boolean RSADecrypt(Byte[] signDataToDecrypt, Byte[] DataToDecrypt){try{//證書路徑string cert = ConfigurationManager.AppSettings["cerAddressPublic"]?.ToString(); ;string certPwd = ConfigurationManager.AppSettings["certPwd"]?.ToString(); ;//調用證書 X509Certificate2 privateCert = new X509Certificate2(cert, certPwd, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();//獲取證書公鑰var publicKey = privateCert.PublicKey.Key.ToXmlString(false);RSA.FromXmlString(publicKey);Boolean signaFlag = RSA.VerifyData(signDataToDecrypt, "SHA256", DataToDecrypt);return signaFlag;}catch (Exception ex){LogHelper.WriteErrorLog(ex);return false;}}

總結

以上是生活随笔為你收集整理的C# 使用X509Certificate2获取数字证书信息对接联通沃支付的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。