private void ProcessStatusCallback(string orderCheck, Payment payment, SppContainer <Order> orderStatus) { if (orderCheck == orderStatus.Data.ClientReference) { var isStatusCallbackProperty = payment.PaymentProperties.SingleOrDefault(x => x.Key == "isStatusCallback"); if (isStatusCallbackProperty != null) { payment.RemovePaymentProperty(isStatusCallbackProperty); } payment.PaymentStatus = GetSchibstedUtil(payment.PaymentMethod).GetPaymentStatusFromOrderStatus(orderStatus.Data.Status); var orderService = new OrderService(); switch (payment.PaymentStatus.PaymentStatusId) { case (int)PaymentStatusCode.Acquired: orderService.ChangeOrderStatus(payment.PurchaseOrder, OrderStatus.Get((int)OrderStatusCode.CompletedOrder)); break; case (int)PaymentStatusCode.Cancelled: orderService.ChangeOrderStatus(payment.PurchaseOrder, OrderStatus.Get((int)OrderStatusCode.Cancelled)); break; case (int)PaymentStatusCode.Refunded: orderService.ChangeOrderStatus(payment.PurchaseOrder, OrderStatus.Get((int)OrderStatusCode.Cancelled)); break; } if (!string.IsNullOrEmpty(payment["nextChangedOrders"])) { var changedOrders = payment["nextChangedOrders"].Split(','); var nextOrder = changedOrders.FirstOrDefault(); if (nextOrder != null) { var nextPayment = Payment.SingleOrDefault(x => x.TransactionId == changedOrders.FirstOrDefault()); if (nextPayment != null) { nextPayment["isStatusCallback"] = "true"; nextPayment["nextChangedOrders"] = string.Join(",", changedOrders.Where(x => x != nextOrder)); ProcessCallback(nextPayment); } } } } }
private void ProcessOrderPayment(string schibstedOrderId, string orderCheck, Payment payment, SppContainer <Order> orderStatus) { var paymentMethod = payment.PaymentMethod; string cancelUrl = paymentMethod.DynamicProperty <string>().CancelUrl; string acceptUrl = paymentMethod.DynamicProperty <string>().AcceptUrl; // Save order id on payment payment.TransactionId = schibstedOrderId; // Compare the checksum, and set payment status if (orderCheck != orderStatus.Data.ClientReference && (orderStatus.Data.ClientReference != null && payment.PurchaseOrder.OrderTotal > 0)) { throw new SecurityException("Checksum mismatch"); } // Process payment var schibstedUtil = GetSchibstedUtil(payment.PaymentMethod); payment.PaymentStatus = schibstedUtil.GetPaymentStatusFromOrderStatus(orderStatus.Data.Status); Uri redirectUrl; if (payment.PaymentStatus != PaymentStatus.Get((int)PaymentStatusCode.Declined)) { ProcessPaymentRequest(new PaymentRequest(payment.PurchaseOrder, payment)); // Changing order status to completed, if necessary if (payment.PaymentStatus == PaymentStatus.Get((int)PaymentStatusCode.Acquired)) { new OrderService().ChangeOrderStatus( payment.PurchaseOrder, OrderStatus.Get((int)OrderStatusCode.CompletedOrder)); } // Redirecting to the confirmation page redirectUrl = new Uri(_absoluteUrlService.GetAbsoluteUrl(acceptUrl)); } else { redirectUrl = new Uri(_absoluteUrlService.GetAbsoluteUrl(cancelUrl)); } redirectUrl = redirectUrl.AddOrderGuidParameter(payment.PurchaseOrder) .AddQueryStringParameter("order_id", schibstedOrderId) .AddQueryStringParameter("code", HttpContext.Current.Request["code"]); HttpContext.Current.Response.Redirect(redirectUrl.AbsoluteUri); }