public async Task <JsonResult> GetRequest(Guid?id) { if (id == null) { throw new NullReferenceException(); } var contract = db.Contract.Find(id); HttpClient http = new HttpClient(); Dictionary <string, string> request = new Dictionary <string, string>(); string paymentAmount = (double.Parse(contract.ProjectCost) * 100).ToString("00"); // amount int cents e.i 50 rands is 5000 cents request.Add("PAYGATE_ID", PayGateID); request.Add("REFERENCE", contract.QuotationReference); // Payment ref e.g ORDER NUMBER request.Add("AMOUNT", paymentAmount); request.Add("CURRENCY", "ZAR"); // South Africa request.Add("RETURN_URL", $"{Request.Url.Scheme}://{Request.Url.Authority}/pay/completepayment"); request.Add("TRANSACTION_DATE", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); request.Add("LOCALE", "en-za"); request.Add("COUNTRY", "ZAF"); // get authenticated user's email // use a valid email, paygate will send a transaction confirmation to it var email = db.Client.Where(c => c.UserId == contract.ClientId).FirstOrDefault().Email; request.Add("EMAIL", email); request.Add("CHECKSUM", _payment.GetMd5Hash(request, PayGateKey)); string requestString = _payment.ToUrlEncodedString(request); StringContent content = new StringContent(requestString, Encoding.UTF8, "application/x-www-form-urlencoded"); HttpResponseMessage response = await http.PostAsync("https://secure.paygate.co.za/payweb3/initiate.trans", content); // if the request did not succeed, this line will make the program crash response.EnsureSuccessStatusCode(); string responseContent = await response.Content.ReadAsStringAsync(); Dictionary <string, string> results = _payment.ToDictionary(responseContent); if (results.Keys.Contains("ERROR")) { return(Json(new { success = false, message = "An error occured while initiating your request" }, JsonRequestBehavior.AllowGet)); } if (!_payment.VerifyMd5Hash(results, PayGateKey, results["CHECKSUM"])) { return(Json(new { success = false, message = "MD5 verification failed" }, JsonRequestBehavior.AllowGet)); } bool IsRecorded = _payment.AddTransaction(request, results["PAY_REQUEST_ID"]); if (IsRecorded) { return(Json(new { success = true, message = "Request completed successfully", results }, JsonRequestBehavior.AllowGet)); } return(Json(new { success = false, message = "Failed to record a transaction" }, JsonRequestBehavior.AllowGet)); }
public async Task <JsonResult> GetRequest() { //Sample Order Order orderDb = new Order(); //Self entered value, hard coded. orderDb = db.Orders.Find(getOrderIDD); int patientId = Convert.ToInt32(Session["id"]); HttpClient http = new HttpClient(); Dictionary <string, string> request = new Dictionary <string, string>(); string paymentAmount = (orderDb.TotalPrice * 100).ToString("00"); // amount int cents e.i 50 rands is 5000 cents request.Add("PAYGATE_ID", PayGateID); request.Add("REFERENCE", orderDb.OrderID.ToString()); // Payment ref e.g ORDER NUMBER request.Add("AMOUNT", paymentAmount); request.Add("CURRENCY", "ZAR"); // South Africa request.Add("RETURN_URL", $"{Request.Url.Scheme}://{Request.Url.Authority}/pay/completepayment"); request.Add("TRANSACTION_DATE", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); request.Add("LOCALE", "en-za"); request.Add("COUNTRY", "ZAF"); // get authenticated user's email // use a valid email, paygate will send a transaction confirmation to it //if (HttpContext.User.Identity.IsAuthenticated) //{ // //request.Add("EMAIL", _payment.GetAuthenticatedUser().Email); // request.Add("EMAIL", "*****@*****.**"); //} else if (Session["Title"] == "Patient") { //request.Add("EMAIL", _payment.GetAuthenticatedUser().Email); Patient patient = db.Patients.Find(patientId); request.Add("EMAIL", patient.Email); } else { // put your own email address for the payment confirmation (developer only) request.Add("EMAIL", "*****@*****.**"); } request.Add("CHECKSUM", _payment.GetMd5Hash(request, PayGateKey)); //This place all request key values above to a string encoded in HTTP protocol string requestString = _payment.ToUrlEncodedString(request); StringContent content = new StringContent(requestString, Encoding.UTF8, "application/x-www-form-urlencoded"); //HTTP Response from PAYGATE based on the Request sent to its website from GetRequest actionMethod from Pay Controller. HttpResponseMessage response = await http.PostAsync("https://secure.paygate.co.za/payweb3/initiate.trans", content); // if the request did not succeed, this line will make the program crash response.EnsureSuccessStatusCode(); //Get the Content information from HTTP Responce and convert it a string string responseContent = await response.Content.ReadAsStringAsync(); //Top 4 imperative information from Response (PAYGATE SERVER) to return to user website Dictionary <string, string> results = _payment.ToDictionary(responseContent); if (results.Keys.Contains("ERROR")) { return(Json(new { success = false, message = "An error occured while initiating your request" }, JsonRequestBehavior.AllowGet)); } //if MD5 is not true or equal produce the error if (!_payment.VerifyMd5Hash(results, PayGateKey, results["CHECKSUM"])) { return(Json(new { success = false, message = "MD5 verification failed" }, JsonRequestBehavior.AllowGet)); } bool IsRecorded = _payment.AddTransaction(request, results["PAY_REQUEST_ID"]); if (IsRecorded) { return(Json(new { success = true, message = "Request completed successfully", results }, JsonRequestBehavior.AllowGet)); } return(Json(new { success = false, message = "Failed to record a transaction" }, JsonRequestBehavior.AllowGet)); }
public async Task <JsonResult> GetRequest(string reference) { decimal amount = 0; string email = User.Identity.Name; using (ApplicationDbContext context = new ApplicationDbContext()) { foreach (var item in context.Carts.Where(c => c.Reference == reference && !c.IsDeleted && !c.IsComplete).ToList()) { amount += item.Price * (decimal)item.Quantity; } } HttpClient http = new HttpClient(); Dictionary <string, string> request = new Dictionary <string, string>(); string paymentAmount = (amount * 100).ToString("00"); // amount int cents e.i 50 rands is 5000 cents request.Add("PAYGATE_ID", _payGateID); request.Add("REFERENCE", reference); // Payment ref e.g ORDER NUMBER request.Add("AMOUNT", paymentAmount); request.Add("CURRENCY", "ZAR"); // South Africa request.Add("RETURN_URL", $"{Request.Url.Scheme}://{Request.Url.Authority}/pay/completepayment"); request.Add("TRANSACTION_DATE", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); request.Add("LOCALE", "en-za"); request.Add("COUNTRY", "ZAF"); request.Add("EMAIL", email); request.Add("CHECKSUM", _payment.GetMd5Hash(request, _payGateKey)); string requestString = _payment.ToUrlEncodedString(request); StringContent content = new StringContent(requestString, Encoding.UTF8, "application/x-www-form-urlencoded"); HttpResponseMessage response = await http.PostAsync("https://secure.paygate.co.za/payweb3/initiate.trans", content); // if the request did not succeed, this line will make the program crash response.EnsureSuccessStatusCode(); string responseContent = await response.Content.ReadAsStringAsync(); Dictionary <string, string> results = _payment.ToDictionary(responseContent); if (results.Keys.Contains("ERROR")) { return(Json(new { success = false, message = "An error occured while initiating your request" }, JsonRequestBehavior.AllowGet)); } if (!_payment.VerifyMd5Hash(results, _payGateKey, results["CHECKSUM"])) { return(Json(new { success = false, message = "MD5 verification failed" }, JsonRequestBehavior.AllowGet)); } bool IsRecorded = _payment.AddTransaction(request, results["PAY_REQUEST_ID"]); if (IsRecorded) { return(Json(new { success = true, message = "Request completed successfully", results }, JsonRequestBehavior.AllowGet)); } return(Json(new { success = false, message = "Failed to record a transaction" }, JsonRequestBehavior.AllowGet)); }