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