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