private void button3_Click(object sender, EventArgs e) { bool verify; string s; Common c = new Common(); IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(iep); //tạo init request gửi tới merchant InitiateRequest initiateRequest = new InitiateRequest(); c.send(initiateRequest.ToMessage(), ref client); //nhận init response từ merchant string receiveMessage = c.receive(ref client); string[] initRES = receiveMessage.Split('-'); merchantCertificate = new X509Certificate2(c.StringToByteArray(initRES[2])); gatewayCertificate = new X509Certificate2(c.StringToByteArray(initRES[3])); if (c.VerifyCertificate(caCertificate, merchantCertificate) == false || c.VerifyCertificate(caCertificate, gatewayCertificate) == false)//xác thực chứng chỉ nhận được { s = "Xác thực kết nối thất bại"; openThongBaoForm(s); } else { merchantPublicKey = merchantCertificate.GetRSAPublicKey().ToXmlString(false); gatewayPublicKey = gatewayCertificate.GetRSAPublicKey().ToXmlString(false); verify = c.Verify(merchantPublicKey, initRES[1], initRES[0]); if (verify == false) { s = "Xác thực kết nối thất bại"; openThongBaoForm(s); } else { //tạo purchase request string[] initREQValue = initRES[0].Split(':'); InitiateResponse initiateResponse = new InitiateResponse(initREQValue[0], initREQValue[1], initREQValue[2]); OrderInfomation oi = new OrderInfomation(maDH, maKH, DateTime.Now.ToString("ddMMyyyy"), initiateResponse.getTransID(), initiateResponse.getBrandID(), soTien); PaymentInstructions pi = new PaymentInstructions(cardNumber, CVV, dateValid, soTien, initiateResponse.getTransID(), initiateResponse.getBrandID()); PurchaseRequest purchaseRequest = new PurchaseRequest(oi.OIToString(), pi.PIToString(), customerPrivateKey, gatewayPublicKey, c.ByteArrayToString(customerCertificate.GetRawCertData())); c.send(purchaseRequest.ToMessage(), ref client); //nhận purchase response receiveMessage = c.receive(ref client); string[] splitRES = receiveMessage.Split('-'); PurchaseResponse purchaseResponse = new PurchaseResponse(splitRES[0], splitRES[1], splitRES[2]); merchantCertificate = new X509Certificate2(c.StringToByteArray(purchaseResponse.getCertificate())); if (c.VerifyCertificate(caCertificate, merchantCertificate) == false)//xác thực chứng chỉ từ purchase response { s = "Xác thực kết nối thất bại"; openThongBaoForm(s); } else { if (purchaseResponse.verify() == false) { s = "Xác thực kết nối thất bại"; openThongBaoForm(s); } else { string[] splitPurchase = purchaseResponse.getMessage().Split(':');//message = transid:RRPID:maKQ:KQ if (splitPurchase[2].CompareTo("1") == 0) { KetQua form = new KetQua("Thanh toán thành công"); form.Show(); this.Hide(); this.Close(); } else if (splitPurchase[2].CompareTo("2") == 0) { s = "Thông tin tài khoản không đúng"; openThongBaoForm(s); } else { s = "Xác thực kết nối thất bại"; openThongBaoForm(s); } } } client.Close(); } } }
public ActionResult Index(FormCollection collection) { bool verify; cardNumber = collection["CardNumber"]; CVV = collection["CVV"]; dateValid = collection["DateValid"]; Common c = new Common(); //lấy dữ liệu /* * System.IO.Stream s=PrivateKey.InputStream; * byte[] buffer = new byte[1024]; * using (MemoryStream ms = new MemoryStream()) * { * int read; * while ((read = s.Read(buffer, 0, buffer.Length)) > 0) * { * ms.Write(buffer, 0, read); * } * byte[] privateKeyByte = ms.ToArray(); * customerPrivateKey = System.Text.Encoding.ASCII.GetString(privateKeyByte); * } * s.Flush(); * s = Certificate.InputStream; * using (MemoryStream ms = new MemoryStream()) * { * int read; * while ((read = s.Read(buffer, 0, buffer.Length)) > 0) * { * ms.Write(buffer, 0, read); * } * byte[] certificateByte = ms.ToArray(); * customerCertificate = new X509Certificate2(certificateByte); * }*/ //khởi tạo kết nối đến customer IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(iep); //tạo init request gửi tới merchant InitiateRequest initiateRequest = new InitiateRequest(); c.send(initiateRequest.ToMessage(), ref client); //nhận init response từ merchant string receiveMessage = c.receive(ref client); string[] initRES = receiveMessage.Split('-'); merchantCertificate = new X509Certificate2(c.StringToByteArray(initRES[2])); gatewayCertificate = new X509Certificate2(c.StringToByteArray(initRES[3])); if (c.VerifyCertificate(caCertificate, merchantCertificate) == false || c.VerifyCertificate(caCertificate, gatewayCertificate) == false)//xác thực chứng chỉ nhận được { ViewBag.thongbao = "Xác thực kết nối thất bại"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } else { merchantPublicKey = merchantCertificate.GetRSAPublicKey().ToXmlString(false); gatewayPublicKey = gatewayCertificate.GetRSAPublicKey().ToXmlString(false); verify = c.Verify(merchantPublicKey, initRES[1], initRES[0]); if (verify == false) { ViewBag.thongbao = "Xác thực kết nối thất bại"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } else { //tạo purchase request string[] initREQValue = initRES[0].Split(':'); InitiateResponse initiateResponse = new InitiateResponse(initREQValue[0], initREQValue[1], initREQValue[2]); OrderInfomation oi = new OrderInfomation(maDH, maKH, DateTime.Now.ToString("ddMMyyyy"), initiateResponse.getTransID(), initiateResponse.getBrandID(), soTien); PaymentInstructions pi = new PaymentInstructions(cardNumber, CVV, dateValid, soTien, initiateResponse.getTransID(), initiateResponse.getBrandID()); PurchaseRequest purchaseRequest = new PurchaseRequest(oi.OIToString(), pi.PIToString(), customerPrivateKey, gatewayPublicKey, c.ByteArrayToString(customerCertificate.GetRawCertData())); c.send(purchaseRequest.ToMessage(), ref client); //nhận purchase response receiveMessage = c.receive(ref client); string[] splitRES = receiveMessage.Split('-'); PurchaseResponse purchaseResponse = new PurchaseResponse(splitRES[0], splitRES[1], splitRES[2]); merchantCertificate = new X509Certificate2(c.StringToByteArray(purchaseResponse.getCertificate())); if (c.VerifyCertificate(caCertificate, merchantCertificate) == false)//xác thực chứng chỉ từ purchase response { ViewBag.thongbao = "Xác thực kết nối thất bại"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } else { if (purchaseResponse.verify() == false) { ViewBag.thongbao = "Xác thực kết nối thất bại"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } else { string[] splitPurchase = purchaseResponse.getMessage().Split(':');//message = transid:RRPID:maKQ:KQ if (splitPurchase[2].CompareTo("1") == 0) { return(RedirectToAction("KetQua", new { kq = "Thanh toán thành công" })); } else if (splitPurchase[2].CompareTo("2") == 0) { ViewBag.thongbao = "Thông tin tài khoản không đúng"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } else if (splitPurchase[2].CompareTo("3") == 0) { ViewBag.thongbao = "Số tiền thanh toán vượt quá hạn mức của thẻ"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } else { ViewBag.thongbao = "Xác thực kết nối thất bại"; ViewBag.TaiKhoan = tenKH; ViewBag.SoLuong = soLuong; ViewBag.SoTien = soTien; return(this.View()); } } } } } }
static void Main(string[] args) { X509Certificate2 customerCertificate, merchantCertificate, gatewayCertificate; string customerPrivateKey, merchantPublicKey, gatewayPublicKey; bool verify; Common c = new Common(); IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(iep); //tạo init request gửi tới merchant InitiateRequest initiateRequest = new InitiateRequest(); c.send(initiateRequest.ToMessage(), client); //nhận init response từ merchant string receiveMessage = c.receive(client); string[] initRES = receiveMessage.Split('-'); merchantCertificate = new X509Certificate2(c.StringToByteArray(initRES[2])); gatewayCertificate = new X509Certificate2(c.StringToByteArray(initRES[3])); merchantPublicKey = merchantCertificate.GetRSAPublicKey().ToXmlString(false); gatewayPublicKey = gatewayCertificate.GetRSAPublicKey().ToXmlString(false); verify = c.Verify(merchantPublicKey, initRES[1], initRES[0]); Console.WriteLine("verify init response: " + verify); //tạo purchase request string[] value = File.ReadAllLines("d:/file/input.txt"); string[] initREQValue = initRES[0].Split(':'); InitiateResponse initiateResponse = new InitiateResponse(initREQValue[0], initREQValue[1], initREQValue[2]); OrderInfomation oi = new OrderInfomation(Convert.ToInt32(value[0]), Convert.ToInt32(value[1]), DateTime.Now.ToString("ddMMyyyy"), initiateResponse.getTransID(), initiateResponse.getBrandID(), Convert.ToDouble(value[2])); PaymentInstructions pi = new PaymentInstructions(value[3], value[4], value[5], Convert.ToDouble(value[2]), initiateResponse.getTransID(), initiateResponse.getBrandID()); customerPrivateKey = File.ReadAllText(value[6]); customerCertificate = new X509Certificate2(value[7], "123456"); PurchaseRequest purchaseRequest = new PurchaseRequest(oi.OIToString(), pi.PIToString(), customerPrivateKey, gatewayPublicKey, c.ByteArrayToString(customerCertificate.GetRawCertData())); c.send(purchaseRequest.ToMessage(), client); //nhận purchase response receiveMessage = c.receive(client); string[] splitRES = receiveMessage.Split('-'); PurchaseResponse purchaseResponse = new PurchaseResponse(splitRES[0], splitRES[1], splitRES[2]); Console.WriteLine("verify purchase response: " + purchaseResponse.verify()); //Console.WriteLine(purchaseResponse.getMessage()); Console.Read(); }
public static void Thread1(object sock) { int maDH; Console.WriteLine("start connect with customer client"); X509Certificate2 caCertificate = new X509Certificate2("d:/file/ca.crt"); string gatewayPublicKey; string merchantPrivateKey = File.ReadAllText("d:/file/MerchantPrivateKey.xml"); X509Certificate2 merchantCertificate = new X509Certificate2("d:/file/merchant.crt"); X509Certificate2 gatewayCertificate = new X509Certificate2("d:/file/gateway.crt"); X509Certificate2 customerCertificate; Common c = new Common(); Socket socket = (Socket)sock; string receiveMessage = c.receive(ref socket); string[] firstMessage = receiveMessage.Split('-'); string s; //thông điệp nhận được là Hủy đơn hàng hoặc init request if (firstMessage[0].CompareTo("HUYDONHANG") == 0) { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "localhost"; builder.UserID = "sa"; builder.Password = "******"; builder.InitialCatalog = "QuanLyBanSach"; using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) { connection.Open(); string sql; StringBuilder sb = new StringBuilder(); sb.Append("DELETE FROM ChiTietDonHang WHERE MaDonHang = @maDH;"); sql = sb.ToString(); using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@maDH", firstMessage[1]); int rowsAffected = command.ExecuteNonQuery(); } sb.Clear(); sb.Append("DELETE FROM DonHang WHERE MaDonHang = @maDH;"); sql = sb.ToString(); using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@maDH", firstMessage[1]); int rowsAffected = command.ExecuteNonQuery(); } connection.Close(); } } else { InitiateRequest initiateRequest = new InitiateRequest(firstMessage[0], firstMessage[1], firstMessage[2], firstMessage[3], firstMessage[4]); //tạo init response gatewayPublicKey = gatewayCertificate.GetRSAPublicKey().ToXmlString(false); InitiateResponse initiateResponse = new InitiateResponse(initiateRequest.getLIDC(), initiateRequest.getLanguage(), initiateRequest.getRRPID(), initiateRequest.getBrandID(), c.ByteArrayToString(merchantCertificate.GetRawCertData()), c.ByteArrayToString(gatewayCertificate.GetRawCertData())); string sendMessage = initiateResponse.ToMessage(merchantPrivateKey); c.send(sendMessage, ref socket); //nhận purchase request receiveMessage = c.receive(ref socket); string[] purchase = receiveMessage.Split('-'); customerCertificate = new X509Certificate2(c.StringToByteArray(purchase[5])); if (c.VerifyCertificate(caCertificate, customerCertificate) == false) { Console.WriteLine("verify purchase request certificate false"); s = initiateResponse.getTransID() + ":" + c.Random(2) + ":" + 4 + ":" + "xac thuc that bai"; PurchaseResponse purchaseResponse = new PurchaseResponse(s); c.send(purchaseResponse.ToMessage(), ref socket); } else { PurchaseRequest purchaseRequest = new PurchaseRequest(purchase[0], purchase[1], purchase[2], purchase[3], purchase[4], purchase[5]); if (purchaseRequest.verify() == false)//xác thực purchase request { Console.WriteLine("verify purchase request false"); s = initiateResponse.getTransID() + ":" + purchaseRequest.getRRPID() + ":" + 4 + ":" + "xac thuc that bai"; PurchaseResponse purchaseResponse = new PurchaseResponse(s); c.send(purchaseResponse.ToMessage(), ref socket); } else { Console.WriteLine("verify purchase request true"); maDH = purchaseRequest.getMaDH(); //tạo authorization request gửi tới gateway AuthorizationRequest authorizationRequest = new AuthorizationRequest(purchaseRequest.getTransID(), Convert.ToDouble(purchaseRequest.getTien()), merchantPrivateKey, gatewayPublicKey, purchaseRequest.getCustommerCertificate(), c.ByteArrayToString(merchantCertificate.GetRawCertData()), purchaseRequest.getMessageToGateway(), purchaseRequest.getDigitalEnvelop()); IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1235); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(iep); c.send(authorizationRequest.ToMessage(), ref client); //nhận authorization response receiveMessage = c.receive(ref client); string[] splitAuthRES = receiveMessage.Split('-'); AuthorizationResponse authorizationResponse; if (splitAuthRES.Length < 5)//trường hợp nhận thông báo lỗi từ isuuer { gatewayCertificate = new X509Certificate2(c.StringToByteArray(splitAuthRES[3])); if (c.VerifyCertificate(caCertificate, gatewayCertificate) == true)//kiểm tra chứng chỉ nhận từ gateway { Console.WriteLine("verify authorization response certificate true"); authorizationResponse = new AuthorizationResponse(splitAuthRES[0], splitAuthRES[1], splitAuthRES[2], splitAuthRES[3]); if (authorizationResponse.verifyMessage() == true) { Console.WriteLine("verify authorization response true"); //tạo purchase response và gởi customer string[] messageRES = authorizationResponse.getMessage().Split(':'); PurchaseResponse purchaseResponse = new PurchaseResponse(messageRES[0] + ":" + purchaseRequest.getRRPID() + ":" + messageRES[2] + ":" + messageRES[3]); c.send(purchaseResponse.ToMessage(), ref socket); } } } else { gatewayCertificate = new X509Certificate2(c.StringToByteArray(splitAuthRES[6])); if (c.VerifyCertificate(caCertificate, gatewayCertificate) == true)//kiểm tra chứng chỉ nhận từ gateway { Console.WriteLine("verify authorization response certificate true"); authorizationResponse = new AuthorizationResponse(splitAuthRES[0], splitAuthRES[1], splitAuthRES[2], splitAuthRES[3], splitAuthRES[4], splitAuthRES[5], splitAuthRES[6]); if (authorizationResponse.verifyMessage() == true) { Console.WriteLine("verify authorization response true"); //lưu token SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "localhost"; builder.UserID = "sa"; builder.Password = "******"; builder.InitialCatalog = "Bank"; using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) { connection.Open(); string sql; StringBuilder sb = new StringBuilder(); sb.Clear(); sb.Append("INSERT Token (TransID, SignToken, EncryptToken, EncryptKey) "); sb.Append("VALUES (@id, @sign, @token, @key);"); sql = sb.ToString(); using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@id", authorizationResponse.getTransID()); command.Parameters.AddWithValue("@sign", authorizationResponse.getSignToken()); command.Parameters.AddWithValue("@token", authorizationResponse.getEncryptToken()); command.Parameters.AddWithValue("@key", authorizationResponse.getEncryptKeyToken()); int rowsAffected = command.ExecuteNonQuery(); } connection.Close(); } //tạo purchase response và gởi customer string[] messageRES = authorizationResponse.getMessage().Split(':'); PurchaseResponse purchaseResponse = new PurchaseResponse(messageRES[0] + ":" + purchaseRequest.getRRPID() + ":" + messageRES[2] + ":" + messageRES[3]); c.send(purchaseResponse.ToMessage(), ref socket); //Console.WriteLine(purchaseResponse.getMessage()); //tạo capture request gửi tới gateway string merchantCard = "012541AR09O5"; string merchantCVV = "012345"; string merchantDateValid = "25062019"; //---->lấy token string signToken = "", encryptToken = "", encryptKeyToken = ""; using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) { connection.Open(); string sql; sql = "SELECT TransID, SignToken, EncryptToken, EncryptKey FROM Token;"; using (SqlCommand command = new SqlCommand(sql, connection)) { using (SqlDataReader sqlReader = command.ExecuteReader()) { while (sqlReader.Read()) { if (sqlReader.GetString(0).CompareTo(authorizationResponse.getTransID()) == 0) { signToken = sqlReader.GetString(1); encryptToken = sqlReader.GetString(2); encryptKeyToken = sqlReader.GetString(3); } } } } connection.Close(); } CaptureRequest captureRequest = new CaptureRequest(purchaseRequest.getTransID(), merchantCard, merchantCVV, merchantDateValid, Convert.ToInt64(purchaseRequest.getTien()), gatewayPublicKey, signToken, encryptToken, encryptKeyToken); c.send(captureRequest.ToMessage(), ref client); //nhận capture response từ gateway receiveMessage = c.receive(ref client); string[] splitCaptureResponse = receiveMessage.Split('-'); gatewayCertificate = new X509Certificate2(c.StringToByteArray(splitCaptureResponse[3])); if (c.VerifyCertificate(caCertificate, gatewayCertificate) == true) { Console.WriteLine("verify capture response certificate true"); CaptureResponse captureResponse = new CaptureResponse(splitCaptureResponse[0], splitCaptureResponse[1], splitCaptureResponse[2], splitCaptureResponse[3]); if (captureResponse.verify() == true) { Console.WriteLine("verify capture response true"); using (SqlConnection connection = new SqlConnection(builder.ConnectionString))//lưu capture response { connection.Open(); string sql; StringBuilder sb = new StringBuilder(); sb.Clear(); //lưu capture response sb.Append("INSERT LogCaptureResponse (SignMessage, EncryptMessage, EncryptKey) "); sb.Append("VALUES (@sign, @encrypt, @key);"); sql = sb.ToString(); using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@sign", captureResponse.getSignMessage()); command.Parameters.AddWithValue("@encrypt", captureResponse.getEncryptMessage()); command.Parameters.AddWithValue("@key", captureResponse.getEncryptKey()); int rowsAffected = command.ExecuteNonQuery(); } //xác nhận tình trạng thanh toán của đơn hàng connection.Close(); } builder.InitialCatalog = "QuanLyBanSach"; using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) { connection.Open(); string sql; StringBuilder sb = new StringBuilder(); sb.Clear(); sb.Append("UPDATE DonHang SET DaThanhToan = @thanhtoan WHERE MaDonHang = @id"); sql = sb.ToString(); using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@thanhtoan", 1); command.Parameters.AddWithValue("@id", maDH); int rowsAffected = command.ExecuteNonQuery(); } connection.Close(); } } } } } } client.Close(); } } } socket.Close(); }