// **** Helper Methods **** public static string GetValue(string key) { var basket = API.Basket.GetBasket(); var paymentProvider = new PaymentProvider(basket.Payment.Providers.FirstOrDefault().Id); return(paymentProvider.GetSetting(key)); }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var orderId = HttpContext.Current.Request.QueryString["orderid"] ?? ""; if (paymentProvider == null || string.IsNullOrEmpty(orderId)) { return(null); } orderInfo = OrderHelper.GetOrder(orderId); if (orderInfo != null) { var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias); var secret = paymentProvider.GetSetting("secret"); var amount = HttpContext.Current.Request.QueryString["amount"] ?? "0"; var validated = true; if (secret != string.Empty) { var sb = new StringBuilder(); foreach (var key in HttpContext.Current.Request.QueryString.AllKeys) { if (key != "hash") { sb.Append(HttpContext.Current.Request.QueryString[key]); } } var calculated = ePayPaymentBase.MD5(sb.ToString() + secret).ToUpperInvariant(); var incoming = (HttpContext.Current.Request.QueryString["hash"] ?? "").ToUpperInvariant(); validated = calculated == incoming; if (!validated) { //checksum error Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming hash " + incoming + " - calculated hash " + calculated); } } if (validated && (amount == orderInfo.ChargedAmountInCents.ToString())) { orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; orderInfo.Save(); } else { orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.Save(); if (validated) { //checksum already logged, must be problem with amount Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming amount " + amount.ToString() + " - order amount " + orderInfo.ChargedAmountInCents.ToString()); } } } HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Write("OK"); HttpContext.Current.Response.Flush(); return(orderInfo); }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var orderId = HttpContext.Current.Request.QueryString["orderid"] ?? ""; if (paymentProvider == null || string.IsNullOrEmpty(orderId)) { return null; } orderInfo = OrderHelper.GetOrder(orderId); if (orderInfo != null) { var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias); var secret = paymentProvider.GetSetting("secret"); var amount = HttpContext.Current.Request.QueryString["amount"] ?? "0"; var validated = true; if (secret != string.Empty) { var sb = new StringBuilder(); foreach (var key in HttpContext.Current.Request.QueryString.AllKeys) { if (key != "hash") { sb.Append(HttpContext.Current.Request.QueryString[key]); } } var calculated = ePayPaymentBase.MD5(sb.ToString() + secret).ToUpperInvariant(); var incoming = (HttpContext.Current.Request.QueryString["hash"] ?? "").ToUpperInvariant(); validated = calculated == incoming; if (!validated) { //checksum error Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming hash " + incoming + " - calculated hash " + calculated); } } if (validated && (amount == orderInfo.ChargedAmountInCents.ToString())) { orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; orderInfo.Save(); } else { orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.Save(); if (validated) { //checksum already logged, must be problem with amount Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming amount " + amount.ToString() + " - order amount " + orderInfo.ChargedAmountInCents.ToString()); } } } HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Write("OK"); HttpContext.Current.Response.Flush(); return orderInfo; }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var data = HttpContext.Current.Request["Data"]; var seal = HttpContext.Current.Request["Seal"]; Log.Instance.LogDebug("Omnikassa data: " + data + " Omnikassa seal: " + seal); var securityKey = paymentProvider.GetSetting("SecurityKey"); // Verifieer de Seal var sha256 = SHA256.Create(); var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey)); if (seal.ToLower() == ByteArrayToHexString(hashValue).ToLower()) // Seal is goed { // Lees de gewenste waarden uit de server response var dataItems = ParseData(data); var transactionCode = dataItems.First(i => i.Key == "transactionReference").Value; var responseCode = dataItems.First(i => i.Key == "responseCode").Value; Log.Instance.LogDebug("Omnikassa transactionCode: " + transactionCode + " responseCode: " + responseCode); orderInfo = OrderHelper.GetOrder(transactionCode); Log.Instance.LogDebug("Omnikassa orderInfo: " + orderInfo.OrderNumber); var successUrl = paymentProvider.SuccessUrl(); var cancelUrl = paymentProvider.ErrorUrl(); var redirectUrl = successUrl; //Code Beschrijving //00 Transaction success, authorization accepted (transactie gelukt, autorisatie geaccepteerd). //02 Please call the bank because the authorization limit on the card has been exceeded (neem contact op met de bank; de autorisatielimiet op de kaart is overschreden) //03 Invalid merchant contract (ongeldig contract webwinkel) //05 Do not honor, authorization refused (niet inwilligen, autorisatie geweigerd) //12 Invalid transaction, check the parameters sent in the request (ongeldige transactie, controleer de in het verzoek verzonden parameters). //14 Invalid card number or invalid Card Security Code or Card (for //MasterCard) or invalid Card Verification Value (for Visa/MAESTRO) (ongeldig kaartnummer of ongeldige beveiligingscode of kaart (voor MasterCard) of ongeldige waarde kaartverificatie (voor Visa/MAESTRO)) //17 Cancellation of payment by the end user (betaling geannuleerd door eindgebruiker/klant) //24 Invalid status (ongeldige status). //25 Transaction not found in database (transactie niet gevonden in database) //30 Invalid format (ongeldig formaat) //34 Fraud suspicion (vermoeden van fraude) //40 Operation not allowed to this Merchant (handeling niet toegestaan voor deze webwinkel) //60 Pending transaction (transactie in behandeling) //63 Security breach detected, transaction stopped (beveiligingsprobleem gedetecteerd, transactie gestopt). //75 The number of attempts to enter the card number has been exceeded (three tries exhausted) (het aantal beschikbare pogingen om het card‐nummer in te geven is overschreden (max. drie)) //90 Acquirer server temporarily unavailable (server acquirer tijdelijk onbeschikbaar) //94 Duplicate transaction (duplicaattransactie). (transactiereferentie al gereserveerd) //97 Request time‐out; transaction refused (time‐out voor verzoek; transactie geweigerd) //99 Payment page temporarily unavailable (betaalpagina tijdelijk niet beschikbaar) if (orderInfo.Paid == false) { switch (responseCode) { case "00": orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; break; case "60": case "90": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPaymentProvider; break; case "17": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = "CANCELLED"; redirectUrl = cancelUrl; break; case "EXPIRED": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = "EXPIRED"; redirectUrl = cancelUrl; break; default: orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPaymentProvider; redirectUrl = cancelUrl; break; } orderInfo.Save(); } HttpContext.Current.Response.Redirect(redirectUrl); } else { throw new Exception("SEAL BROKEN"); } return(orderInfo); }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var transactionId = HttpContext.Current.Request["transactionid"]; if (string.IsNullOrEmpty(transactionId)) { Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler transactionId == null"); return(null); } orderInfo = OrderHelper.GetOrder(transactionId); if (orderInfo.Paid != false) { Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler Order Already Paid for transactionId: " + transactionId); return(null); } var accountId = paymentProvider.GetSetting("accountId"); var siteId = paymentProvider.GetSetting("siteId"); var siteSecureId = paymentProvider.GetSetting("siteSecureId"); var testURL = paymentProvider.GetSetting("testURL"); var liveUrl = paymentProvider.GetSetting("url"); var statusRequest = new StatusRequest { AccountId = long.Parse(accountId), TransactionId = transactionId, SiteId = long.Parse(siteId), SiteSecureId = long.Parse(siteSecureId) }; var apiURL = paymentProvider.TestMode ? testURL : liveUrl; try { var httpWebRequest = (HttpWebRequest)WebRequest.Create(apiURL); httpWebRequest.Method = "POST"; httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(statusRequest.GetXml()); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()); streamWriter.Write(statusRequest.GetXml()); streamWriter.Close(); var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); var streamReader = new StreamReader(httpWebResponse.GetResponseStream()); var xmlDoc = XDocument.Parse(streamReader.ReadToEnd()); Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler XML Answer: " + HttpUtility.HtmlEncode(xmlDoc.ToString(SaveOptions.None))); var ewallet = xmlDoc.Root.Element("ewallet"); var status = ewallet.Element("status").Value; orderInfo.Status = OrderStatus.WaitingForPayment; //– completed: succesvol voltooid //– initialized: aangemaakt, maar nog niet voltooid //– uncleared: aangemaakt, maar nog niet vrijgesteld (credit cards) //– void: geannuleerd //– declined: afgewezen //– refunded: terugbetaald //– expired: verlopen switch (status) { case "completed": orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; break; case "uncleared": orderInfo.Status = OrderStatus.WaitingForPaymentProvider; break; case "declined": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = status; break; case "expired": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = status; break; case "void": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = status; break; } orderInfo.Save(); } catch (Exception ex) { Log.Instance.LogError("MultiSafePayPaymentResponseHandler.HandlePaymentResponse: " + ex); } return(orderInfo); }
/// <summary> /// Handles the response /// </summary> public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var payPalTestMode = paymentProvider != null && paymentProvider.TestMode; var liveUrl = "https://www.paypal.com/cgi-bin/webscr"; var testUrl = "https://www.sandbox.paypal.com/us/cgi-bin/webscr"; var configLiveUrl = paymentProvider.GetSetting("Url"); var configTestUrl = paymentProvider.GetSetting("testUrl"); if (!string.IsNullOrEmpty(configLiveUrl)) { liveUrl = configLiveUrl; } if (!string.IsNullOrEmpty(configTestUrl)) { testUrl = configTestUrl; } var req = payPalTestMode ? (HttpWebRequest)WebRequest.Create(testUrl) : (HttpWebRequest)WebRequest.Create(liveUrl); //Set values for the request back req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; var param = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.ContentLength); var strRequest = Encoding.ASCII.GetString(param); strRequest += "&cmd=_notify-validate"; req.ContentLength = strRequest.Length; //for proxy //WebProxy proxy = new WebProxy(new Uri("http://url:port#")); //req.Proxy = proxy; //Send the request to PayPal and get the response var streamOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII); streamOut.Write(strRequest); streamOut.Close(); var streamIn = new StreamReader(req.GetResponse().GetResponseStream()); var strResponse = streamIn.ReadToEnd(); streamIn.Close(); Log.Instance.LogDebug("PAYPAL RETURN strResponse: " + strResponse); switch (strResponse) { case "VERIFIED": { // PayPal POSTS some values var paymentStatus = HttpContext.Current.Request["payment_status"]; Log.Instance.LogDebug("PAYPAL RETURN paymentStatus: " + paymentStatus); // Get identifier created with the RequestHandler var transactionId = HttpContext.Current.Request["custom"]; Log.Instance.LogDebug("PAYPAL RETURN transactionId: " + transactionId); // Match identifier to order var order = OrderHelper.GetOrder(transactionId); // Check for match if (order != null && order.Paid == false) { Log.Instance.LogDebug("PAYPAL RETURN STATUS: " + paymentStatus); // Get statusses from payment provider Response switch (paymentStatus) { case "Completed": order.Paid = true; order.Status = OrderStatus.ReadyForDispatch; break; case "Failed": order.Paid = false; order.Status = OrderStatus.PaymentFailed; break; case "Denied": order.Paid = false; order.Status = OrderStatus.PaymentFailed; break; case "Pending": order.Status = OrderStatus.WaitingForPaymentProvider; break; } order.Save(); orderInfo = order; } } break; case "INVALID": break; } return orderInfo; }
// **** Helper Methods **** public static string GetValue(string key) { var basket = API.Basket.GetBasket(); var paymentProvider = new PaymentProvider(basket.Payment.Providers.FirstOrDefault().Id); return paymentProvider.GetSetting(key); }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var data = HttpContext.Current.Request["Data"]; var seal = HttpContext.Current.Request["Seal"]; Log.Instance.LogDebug("Omnikassa data: " + data + " Omnikassa seal: " + seal); var securityKey = paymentProvider.GetSetting("SecurityKey"); // Verifieer de Seal var sha256 = SHA256.Create(); var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey)); if (seal.ToLower() == ByteArrayToHexString(hashValue).ToLower()) // Seal is goed { // Lees de gewenste waarden uit de server response var dataItems = ParseData(data); var transactionCode = dataItems.First(i => i.Key == "transactionReference").Value; var responseCode = dataItems.First(i => i.Key == "responseCode").Value; Log.Instance.LogDebug("Omnikassa transactionCode: " + transactionCode + " responseCode: " + responseCode); orderInfo = OrderHelper.GetOrder(transactionCode); Log.Instance.LogDebug("Omnikassa orderInfo: " + orderInfo.OrderNumber); var successUrl = paymentProvider.SuccessUrl(); var cancelUrl = paymentProvider.ErrorUrl(); var redirectUrl = successUrl; //Code Beschrijving //00 Transaction success, authorization accepted (transactie gelukt, autorisatie geaccepteerd). //02 Please call the bank because the authorization limit on the card has been exceeded (neem contact op met de bank; de autorisatielimiet op de kaart is overschreden) //03 Invalid merchant contract (ongeldig contract webwinkel) //05 Do not honor, authorization refused (niet inwilligen, autorisatie geweigerd) //12 Invalid transaction, check the parameters sent in the request (ongeldige transactie, controleer de in het verzoek verzonden parameters). //14 Invalid card number or invalid Card Security Code or Card (for //MasterCard) or invalid Card Verification Value (for Visa/MAESTRO) (ongeldig kaartnummer of ongeldige beveiligingscode of kaart (voor MasterCard) of ongeldige waarde kaartverificatie (voor Visa/MAESTRO)) //17 Cancellation of payment by the end user (betaling geannuleerd door eindgebruiker/klant) //24 Invalid status (ongeldige status). //25 Transaction not found in database (transactie niet gevonden in database) //30 Invalid format (ongeldig formaat) //34 Fraud suspicion (vermoeden van fraude) //40 Operation not allowed to this Merchant (handeling niet toegestaan voor deze webwinkel) //60 Pending transaction (transactie in behandeling) //63 Security breach detected, transaction stopped (beveiligingsprobleem gedetecteerd, transactie gestopt). //75 The number of attempts to enter the card number has been exceeded (three tries exhausted) (het aantal beschikbare pogingen om het card‐nummer in te geven is overschreden (max. drie)) //90 Acquirer server temporarily unavailable (server acquirer tijdelijk onbeschikbaar) //94 Duplicate transaction (duplicaattransactie). (transactiereferentie al gereserveerd) //97 Request time‐out; transaction refused (time‐out voor verzoek; transactie geweigerd) //99 Payment page temporarily unavailable (betaalpagina tijdelijk niet beschikbaar) if (orderInfo.Paid == false) { switch (responseCode) { case "00": orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; break; case "60": case "90": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPaymentProvider; break; case "17": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = "CANCELLED"; redirectUrl = cancelUrl; break; case "EXPIRED": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = "EXPIRED"; redirectUrl = cancelUrl; break; default: orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPaymentProvider; redirectUrl = cancelUrl; break; } orderInfo.Save(); } HttpContext.Current.Response.Redirect(redirectUrl); } else { throw new Exception("SEAL BROKEN"); } return orderInfo; }
/// <summary> /// Handles the response /// </summary> public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { #region config helper var merchantId = paymentProvider.GetSetting("merchantId"); var merchantKey = paymentProvider.GetSetting("merchantKey"); var merchantSecret = paymentProvider.GetSetting("merchantSecret"); var url = paymentProvider.GetSetting("url"); var transactionId = HttpContext.Current.Request["id"]; if (orderInfo == null) { orderInfo = OrderHelper.GetOrder(transactionId); } if (orderInfo == null) { Log.Instance.LogError("Easy iDeal response: Order Not Found For TransactionId: " + transactionId); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return(null); } // get the localized (for the right store) payment provider to get the right success/return urls var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias); var redirectUrl = localizedPaymentProvider.ErrorUrl(); var successUrl = localizedPaymentProvider.SuccessUrl(); #endregion try { var paymentStatus = HttpContext.Current.Request["status"]; var salt = HttpContext.Current.Request["salt"]; var checksum = HttpContext.Current.Request["checksum"]; if (string.IsNullOrEmpty(transactionId)) { Log.Instance.LogError("Easy iDeal response: TransactionId IsNullOrEmpty"); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return(null); } if (orderInfo.Paid != false) { Log.Instance.LogDebug("Easy iDeal response: Order already paid! TransactionId: " + transactionId); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return(null); } var transactionCode = OrderHelper.ExtraInformationValue(orderInfo, "extraTransactionCode"); if (string.IsNullOrEmpty(transactionCode)) { Log.Instance.LogDebug("Easy iDeal response: OrderTransactionCode IsNullOrEmpty "); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return(null); } //check validity of request if (CheckChecksumPaymentStatus(transactionId, transactionCode, paymentStatus, salt, checksum)) //only check for payment status if request is valid. //This is a bit redundant, since you allready now the paymentStatus. But we could choose to do something with the extra info you get from this request e.g. IBAN { var args = new SortedList <string, string> { { "TransactionID", transactionId }, { "TransactionCode", transactionCode } }; var xmlRequest = GetXml(TRANSACTIONSTATUS, args, merchantId, merchantKey, merchantSecret); XDocument xmlResponse = XDocument.Parse(PostXml(xmlRequest, url)); var responseStatus = xmlResponse.Element("Response").Element("Status").FirstNode.ToString(); if (responseStatus == "OK") { if (xmlResponse.Element("Response").Element("Transaction").Element("Paid").FirstNode.ToString() == "Y") { orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; redirectUrl = successUrl; } else { orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; } } } } catch (Exception ex) { Log.Instance.LogError("EasyIdealPaymentResponseHandler.HandlePaymentResponse: " + ex); } HttpContext.Current.Response.Redirect(redirectUrl); return(orderInfo); }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var httpRequest = HttpContext.Current.Request; var requestParams = new Dictionary<string, string>(); NameValueCollection httpRequestParams = httpRequest.HttpMethod == "POST" ? httpRequest.Form : httpRequest.QueryString; foreach (string key in httpRequestParams) { requestParams.Add(key, httpRequest[key]); } var buckarooParams = new BuckarooResponseParameters(paymentProvider.GetSetting("SecretKey"), requestParams); if (buckarooParams.IsValid()) { HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); } orderInfo = OrderHelper.GetOrder(buckarooParams.TransactionId); if (orderInfo == null) { throw new ApplicationException("Buckaroo payment handler: no order found with transactionId " + buckarooParams.TransactionId); } var signatureFromBuckaroo = buckarooParams.Signature; var calculatedSignature = buckarooParams.GetSignature(); if (string.Compare(signatureFromBuckaroo, calculatedSignature) != 0) { HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); } Log.Instance.LogError("Buckaroo returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount); if (string.IsNullOrEmpty(buckarooParams.TransactionId)) { HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); } var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias); var succesUrl = localizedPaymentProvider.SuccessUrl(); var failUrl = localizedPaymentProvider.ErrorUrl(); var redirectUrl = succesUrl; if (orderInfo.Paid == true) { Log.Instance.LogError("Buckaroo Already PAID returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount); HttpContext.Current.Response.Redirect(succesUrl); HttpContext.Current.Response.End(); } else { redirectUrl = failUrl; } //190 Succes: De transactie is geslaagd en de betaling is ontvangen / goedgekeurd. Definitief Ja //490 Mislukt: De transactie is mislukt. Definitief Nee //491 Validatie mislukt: De transactie verzoek bevatte fouten en kon niet goed verwerkt worden Definitief Nee //492 Technische storing: Door een technische storing kon de transactie niet worden afgerond //Definitief Nee //690 Afgekeurd: De transactie is afgewezen door de (derde) payment provider. Definitief Nee //790 In afwachting van invoer: De transactie is in de wacht, terwijl de payment enginge staat te wachten //op de inbreng van de consument. Tijdelijk Nee //791 In afwachting van verwerking: De transactie wordt verwerkt. Tijdelijk Nee //792 In afwachting van de consument: de betaling Engine wacht voor de consument om terug te keren van //een website van derden, die nodig is om de transactie te voltooien. Tijdelijk Nee //793 De transactie is onhold. //Tijdelijk Nee //890 Geannuleerd door Gebruiker: De transactie is geannuleerd door de klant. //Definitief Nee //891 Geannuleerd door Merchant: De merchant heeft de transactie geannuleerd. Definitief Nee switch (buckarooParams.StatusCode) { case "190": orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; redirectUrl = succesUrl; break; case "490": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction Failed (490) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "491": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Validation Failed (491) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "492": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Technical Failure (492) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "690": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Payment Denied by 3rd Party (690) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "790": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer input (790) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "791": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Waiting for transaction handling (791) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "792": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer to return from 3rd party website (792) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "793": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction is On Hold (793) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "890": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Customer (890) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "891": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Merchant (891) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; } orderInfo.Save(); HttpContext.Current.Response.Redirect(redirectUrl); return orderInfo; }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { try { var transactionId = HttpContext.Current.Request["transaction_id"]; Log.Instance.LogDebug("Mollie Transaction Id: " + transactionId); if (string.IsNullOrEmpty(transactionId)) { Log.Instance.LogError("Mollie: TransactionId IsNullOrEmpty"); return(null); } orderInfo = OrderHelper.GetOrder(transactionId); if (orderInfo == null) { Log.Instance.LogError("Mollie: Order Not Found For TransactionId: " + transactionId); return(null); } if (orderInfo.Paid != false) { Log.Instance.LogDebug("Mollie: Order already paid! TransactionId: " + transactionId); return(null); } var partnerId = paymentProvider.GetSetting("PartnerId"); var testMode = paymentProvider.TestMode; var idealCheck = new IdealCheck(partnerId, testMode, transactionId); if (idealCheck.Error) { if (idealCheck.Message != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.Message: {0}", idealCheck.Message)); } if (idealCheck.ErrorMessage != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage)); } if (orderInfo.Status == OrderStatus.ReadyForDispatch) { return(null); } orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; if (idealCheck.ErrorMessage != null) { orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage; } } if (idealCheck.Payed) { orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; } else { if (idealCheck.Message != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.Message: {0}", idealCheck.Message)); } if (idealCheck.ErrorMessage != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage)); } orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage; } orderInfo.Save(); } catch (Exception ex) { Log.Instance.LogError("MolliePaymentResponseHandler.HandlePaymentResponse: " + ex); } return(null); }
/// <summary> /// Handles the response /// </summary> public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { #region config helper var merchantId = paymentProvider.GetSetting("merchantId"); var merchantKey = paymentProvider.GetSetting("merchantKey"); var merchantSecret = paymentProvider.GetSetting("merchantSecret"); var url = paymentProvider.GetSetting("url"); var transactionId = HttpContext.Current.Request["id"]; if (orderInfo == null) { orderInfo = OrderHelper.GetOrder(transactionId); } if (orderInfo == null) { Log.Instance.LogError("Easy iDeal response: Order Not Found For TransactionId: " + transactionId); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return null; } // get the localized (for the right store) payment provider to get the right success/return urls var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias); var redirectUrl = localizedPaymentProvider.ErrorUrl(); var successUrl = localizedPaymentProvider.SuccessUrl(); #endregion try { var paymentStatus = HttpContext.Current.Request["status"]; var salt = HttpContext.Current.Request["salt"]; var checksum = HttpContext.Current.Request["checksum"]; if (string.IsNullOrEmpty(transactionId)) { Log.Instance.LogError("Easy iDeal response: TransactionId IsNullOrEmpty"); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return null; } if (orderInfo.Paid != false) { Log.Instance.LogDebug("Easy iDeal response: Order already paid! TransactionId: " + transactionId); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return null; } var transactionCode = OrderHelper.ExtraInformationValue(orderInfo, "extraTransactionCode"); if (string.IsNullOrEmpty(transactionCode)) { Log.Instance.LogDebug("Easy iDeal response: OrderTransactionCode IsNullOrEmpty "); HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); return null; } //check validity of request if (CheckChecksumPaymentStatus(transactionId, transactionCode, paymentStatus, salt, checksum)) //only check for payment status if request is valid. //This is a bit redundant, since you allready now the paymentStatus. But we could choose to do something with the extra info you get from this request e.g. IBAN { var args = new SortedList<string, string> { {"TransactionID", transactionId}, {"TransactionCode", transactionCode} }; var xmlRequest = GetXml(TRANSACTIONSTATUS, args, merchantId, merchantKey, merchantSecret); XDocument xmlResponse = XDocument.Parse(PostXml(xmlRequest, url)); var responseStatus = xmlResponse.Element("Response").Element("Status").FirstNode.ToString(); if (responseStatus == "OK") { if (xmlResponse.Element("Response").Element("Transaction").Element("Paid").FirstNode.ToString() == "Y") { orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; redirectUrl = successUrl; } else { orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; } } } } catch (Exception ex) { Log.Instance.LogError("EasyIdealPaymentResponseHandler.HandlePaymentResponse: " + ex); } HttpContext.Current.Response.Redirect(redirectUrl); return orderInfo; }
/// <summary> /// Handles the response /// </summary> public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var payPalTestMode = paymentProvider != null && paymentProvider.TestMode; var liveUrl = "https://www.paypal.com/cgi-bin/webscr"; var testUrl = "https://www.sandbox.paypal.com/us/cgi-bin/webscr"; var configLiveUrl = paymentProvider.GetSetting("Url"); var configTestUrl = paymentProvider.GetSetting("testUrl"); if (!string.IsNullOrEmpty(configLiveUrl)) { liveUrl = configLiveUrl; } if (!string.IsNullOrEmpty(configTestUrl)) { testUrl = configTestUrl; } var req = payPalTestMode ? (HttpWebRequest)WebRequest.Create(testUrl) : (HttpWebRequest)WebRequest.Create(liveUrl); //Set values for the request back req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; var param = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.ContentLength); var strRequest = Encoding.ASCII.GetString(param); strRequest += "&cmd=_notify-validate"; req.ContentLength = strRequest.Length; //for proxy //WebProxy proxy = new WebProxy(new Uri("http://url:port#")); //req.Proxy = proxy; //Send the request to PayPal and get the response var streamOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII); streamOut.Write(strRequest); streamOut.Close(); var streamIn = new StreamReader(req.GetResponse().GetResponseStream()); var strResponse = streamIn.ReadToEnd(); streamIn.Close(); Log.Instance.LogDebug("PAYPAL RETURN strResponse: " + strResponse); switch (strResponse) { case "VERIFIED": { // PayPal POSTS some values var paymentStatus = HttpContext.Current.Request["payment_status"]; Log.Instance.LogDebug("PAYPAL RETURN paymentStatus: " + paymentStatus); // Get identifier created with the RequestHandler var transactionId = HttpContext.Current.Request["custom"]; Log.Instance.LogDebug("PAYPAL RETURN transactionId: " + transactionId); // Match identifier to order var order = OrderHelper.GetOrder(transactionId); // Check for match if (order != null && order.Paid == false) { Log.Instance.LogDebug("PAYPAL RETURN STATUS: " + paymentStatus); // Get statusses from payment provider Response switch (paymentStatus) { case "Completed": order.Paid = true; order.Status = OrderStatus.ReadyForDispatch; break; case "Failed": order.Paid = false; order.Status = OrderStatus.PaymentFailed; break; case "Denied": order.Paid = false; order.Status = OrderStatus.PaymentFailed; break; case "Pending": order.Status = OrderStatus.WaitingForPaymentProvider; break; } order.Save(); orderInfo = order; } } break; case "INVALID": break; } return(orderInfo); }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { try { var transactionId = HttpContext.Current.Request["transaction_id"]; Log.Instance.LogDebug("Mollie Transaction Id: " + transactionId); if (string.IsNullOrEmpty(transactionId)) { Log.Instance.LogError("Mollie: TransactionId IsNullOrEmpty"); return null; } orderInfo = OrderHelper.GetOrder(transactionId); if (orderInfo == null) { Log.Instance.LogError("Mollie: Order Not Found For TransactionId: " + transactionId); return null; } if (orderInfo.Paid != false) { Log.Instance.LogDebug("Mollie: Order already paid! TransactionId: " + transactionId); return null; } var partnerId = paymentProvider.GetSetting("PartnerId"); var testMode = paymentProvider.TestMode; var idealCheck = new IdealCheck(partnerId, testMode, transactionId); if (idealCheck.Error) { if (idealCheck.Message != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.Message: {0}", idealCheck.Message)); } if (idealCheck.ErrorMessage != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage)); } if (orderInfo.Status == OrderStatus.ReadyForDispatch) { return null; } orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; if (idealCheck.ErrorMessage != null) { orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage; } } if (idealCheck.Payed) { orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; } else { if (idealCheck.Message != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.Message: {0}", idealCheck.Message)); } if (idealCheck.ErrorMessage != null) { Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage)); } orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage; } orderInfo.Save(); } catch (Exception ex) { Log.Instance.LogError("MolliePaymentResponseHandler.HandlePaymentResponse: " + ex); } return null; }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var transactionId = HttpContext.Current.Request["transactionid"]; if (string.IsNullOrEmpty(transactionId)) { Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler transactionId == null"); return null; } orderInfo = OrderHelper.GetOrder(transactionId); if (orderInfo.Paid != false) { Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler Order Already Paid for transactionId: " + transactionId); return null; } var accountId = paymentProvider.GetSetting("accountId"); var siteId = paymentProvider.GetSetting("siteId"); var siteSecureId = paymentProvider.GetSetting("siteSecureId"); var testURL = paymentProvider.GetSetting("testURL"); var liveUrl = paymentProvider.GetSetting("url"); var statusRequest = new StatusRequest { AccountId = long.Parse(accountId), TransactionId = transactionId, SiteId = long.Parse(siteId), SiteSecureId = long.Parse(siteSecureId) }; var apiURL = paymentProvider.TestMode ? testURL : liveUrl; try { var httpWebRequest = (HttpWebRequest) WebRequest.Create(apiURL); httpWebRequest.Method = "POST"; httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(statusRequest.GetXml()); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()); streamWriter.Write(statusRequest.GetXml()); streamWriter.Close(); var httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse(); var streamReader = new StreamReader(httpWebResponse.GetResponseStream()); var xmlDoc = XDocument.Parse(streamReader.ReadToEnd()); Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler XML Answer: " + HttpUtility.HtmlEncode(xmlDoc.ToString(SaveOptions.None))); var ewallet = xmlDoc.Root.Element("ewallet"); var status = ewallet.Element("status").Value; orderInfo.Status = OrderStatus.WaitingForPayment; //– completed: succesvol voltooid //– initialized: aangemaakt, maar nog niet voltooid //– uncleared: aangemaakt, maar nog niet vrijgesteld (credit cards) //– void: geannuleerd //– declined: afgewezen //– refunded: terugbetaald //– expired: verlopen switch (status) { case "completed": orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; break; case "uncleared": orderInfo.Status = OrderStatus.WaitingForPaymentProvider; break; case "declined": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = status; break; case "expired": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = status; break; case "void": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; orderInfo.PaymentInfo.ErrorMessage = status; break; } orderInfo.Save(); } catch (Exception ex) { Log.Instance.LogError("MultiSafePayPaymentResponseHandler.HandlePaymentResponse: " + ex); } return orderInfo; }
public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo) { var httpRequest = HttpContext.Current.Request; Dictionary <string, string> requestParams = new Dictionary <string, string>(); NameValueCollection httpRequestParams = httpRequest.HttpMethod == "POST" ? httpRequest.Form : httpRequest.QueryString; foreach (string key in httpRequestParams) { requestParams.Add(key, httpRequest[key]); } BuckarooResponseParameters buckarooParams = new BuckarooResponseParameters(paymentProvider.GetSetting("SecretKey"), requestParams); if (buckarooParams.IsValid()) { HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); } string signatureFromBuckaroo = buckarooParams.Signature; string calculatedSignature = buckarooParams.GetSignature(); if (string.Compare(signatureFromBuckaroo, calculatedSignature) != 0) { HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); } Log.Instance.LogError("Buckaroo returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount); if (string.IsNullOrEmpty(buckarooParams.TransactionId)) { HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl()); } var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias); var succesUrl = localizedPaymentProvider.SuccessUrl(); var failUrl = localizedPaymentProvider.ErrorUrl(); var redirectUrl = succesUrl; if (orderInfo.Paid == true) { Log.Instance.LogError("Buckaroo Already PAID returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount); HttpContext.Current.Response.Redirect(succesUrl); HttpContext.Current.Response.End(); } else { redirectUrl = failUrl; } //190 Succes: De transactie is geslaagd en de betaling is ontvangen / goedgekeurd. Definitief Ja //490 Mislukt: De transactie is mislukt. Definitief Nee //491 Validatie mislukt: De transactie verzoek bevatte fouten en kon niet goed verwerkt worden Definitief Nee //492 Technische storing: Door een technische storing kon de transactie niet worden afgerond //Definitief Nee //690 Afgekeurd: De transactie is afgewezen door de (derde) payment provider. Definitief Nee //790 In afwachting van invoer: De transactie is in de wacht, terwijl de payment enginge staat te wachten //op de inbreng van de consument. Tijdelijk Nee //791 In afwachting van verwerking: De transactie wordt verwerkt. Tijdelijk Nee //792 In afwachting van de consument: de betaling Engine wacht voor de consument om terug te keren van //een website van derden, die nodig is om de transactie te voltooien. Tijdelijk Nee //793 De transactie is onhold. //Tijdelijk Nee //890 Geannuleerd door Gebruiker: De transactie is geannuleerd door de klant. //Definitief Nee //891 Geannuleerd door Merchant: De merchant heeft de transactie geannuleerd. Definitief Nee switch (buckarooParams.StatusCode) { case "190": orderInfo.Paid = true; orderInfo.Status = OrderStatus.ReadyForDispatch; redirectUrl = succesUrl; break; case "490": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction Failed (490) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "491": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Validation Failed (491) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "492": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Technical Failure (492) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "690": orderInfo.Paid = false; orderInfo.Status = OrderStatus.PaymentFailed; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Payment Denied by 3rd Party (690) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "790": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer input (790) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "791": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Waiting for transaction handling (791) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "792": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer to return from 3rd party website (792) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "793": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction is On Hold (793) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "890": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Customer (890) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; case "891": orderInfo.Paid = false; orderInfo.Status = OrderStatus.WaitingForPayment; redirectUrl = failUrl; Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Merchant (891) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber); break; } orderInfo.Save(); HttpContext.Current.Response.Redirect(redirectUrl); return(orderInfo); }