public GatewayOrderDetails GetGatewayOrderDetails(string orderReferenceId, GatewayToken token) { GatewayOrderDetails gatewayResponse = null; try { var baseUrl = ConfigurationManager.AppSettings["BaseURLWebAPIService"]; var response = _webApiClient.HTTPGetRequest(baseUrl, "orders/" + orderReferenceId, "", token.token); if (response != null) { if (response.StatusCode == HttpStatusCode.OK) { using (var streamReader = new StreamReader(response.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); gatewayResponse = JsonConvert.DeserializeObject <GatewayOrderDetails>(responseText); } } } } catch (Exception ex) { throw ex; } return(gatewayResponse); }
public ActionResult Webhook(GatewayWebhook webhook) { _completeOrderService.DelayExecution(15); if (webhook.type != "order_update") { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Type.")); } if (webhook.@event != "order_complete") { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Event.")); } if (string.IsNullOrEmpty(webhook.object_uuid)) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Object.")); } int id = 0; if (webhook.object_uuid.Contains("_")) { int.TryParse(webhook.object_uuid.Split('_')[0], out id); } if (id <= 0) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Object.")); } CheckoutRequest request = null; try { request = _completeOrderService.GetCurrentRequest(id); } catch { return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting request info from database.")); } if (request == null) { return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting request info from database.")); } if (request.status == Status.Completed) { return(new HttpStatusCodeResult(HttpStatusCode.OK)); } var errorMsg = ""; GatewayToken token = null; try { token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password); } catch (Exception ex) { errorMsg = "Complete order from Webhook failed. Gateway authentication transaction failed."; _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null); return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Gateway authentication failed.")); } if (token == null) { errorMsg = "Complete order from Webhook failed. Gateway authentication transaction failed."; _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null); return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Gateway authentication failed.")); } //get order details GatewayOrderDetails gatewayOrderDetailsResponse = null; try { var orderReferenceId = request.id.ToString() + "_" + request.orderid.ToString(); gatewayOrderDetailsResponse = _gatewayChekoutService.GetGatewayOrderDetails(orderReferenceId, token); } catch (Exception ex) { errorMsg = "Complete order from Webhook failed. Error getting order details."; _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null); return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting order details.")); } if (gatewayOrderDetailsResponse == null) { errorMsg = "Complete order from Webhook failed. Error getting order details."; _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null); return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting order details.")); } if (!_completeOrderService.CompleteOrder(1, "", "", request, gatewayOrderDetailsResponse)) { return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError)); } return(new HttpStatusCodeResult(HttpStatusCode.OK)); }
public ActionResult CompleteCheckout(int id, string rk, string k) { if (k != Md5Helper.GetMd5Hash(id + rk + rk + id)) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Key parameter is not valid.")); } CheckoutRequest request = null; try { request = _completeOrderService.GetCurrentRequest(id); } catch { return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting current request from database.")); } if (request == null) { return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting current request from database.")); } if (request.status == Status.Completed) { return(Redirect(request.returnurl)); } _completeOrderService.UpdateRequest(id, Status.Running); var errorMsg = ""; GatewayToken token = null; try { token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password); } catch (Exception ex) { errorMsg = "Complete order failed. Gateway Authentication Failed."; _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null); return(Redirect(request.errorurl)); } if (token == null) { errorMsg = "Complete order failed. Gateway Authentication Failed."; _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null); return(Redirect(request.errorurl)); } //get order details GatewayOrderDetails gatewayOrderDetailsResponse = null; try { var orderReferenceId = request.id.ToString() + "_" + request.orderid.ToString(); gatewayOrderDetailsResponse = _gatewayChekoutService.GetGatewayOrderDetails(orderReferenceId, token); } catch (Exception ex) { errorMsg = "Complete order failed. Error getting order details from gateway."; _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null); return(Redirect(request.errorurl)); } if (gatewayOrderDetailsResponse == null) { errorMsg = "Complete order failed. Error getting order details from gateway."; _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null); return(Redirect(request.errorurl)); } if (!_completeOrderService.CompleteOrder(1, "", "", request, gatewayOrderDetailsResponse)) { return(Redirect(request.errorurl)); } return(Redirect(request.returnurl)); }
public bool CompleteOrder(int approved, string errorcode, string errormessage, CheckoutRequest request, GatewayOrderDetails gatewayOrderDetails) { var success = false; var randomKey = Guid.NewGuid().ToString("N"); var privateKey = ConfigurationManager.AppSettings["AppTestSecretKey"]; var transactionId = gatewayOrderDetails.reference_id; var completeOrderRequest = new CompleteOrderRequest() { orderid = request.orderid, transactionid = transactionId, invoice = request.invoice, errormessage = errormessage, errorcode = errorcode, amount = request.amounttotal, approved = approved, randomkey = randomKey, signature = Md5Helper.GetMd5Hash(randomKey + privateKey + request.orderid + request.invoice + transactionId) }; try { var response = _webApiClient.HTTPPostRequest(request.notificationurl, "", completeOrderRequest, null); CompleteOrderResponse completeOrderResponse = null; if (response != null) { if (response.StatusCode == HttpStatusCode.OK) { using (var streamReader = new StreamReader(response.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); completeOrderResponse = JsonConvert.DeserializeObject <CompleteOrderResponse>(responseText); } } } if (completeOrderResponse != null) { if (completeOrderResponse.processed == 1) { _repository.UpdateCheckoutRequestStatus(request.id, Status.Completed); success = true; } else { _repository.UpdateCheckoutRequestStatus(request.id, Status.Failed); } } } catch { _repository.UpdateCheckoutRequestStatus(request.id, Status.Failed); } return(success); }