public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback) { if (callback != null && callback.Parameters != null && callback.Parameters.Any(param => param.Key == "orderid")) { var orderId = callback.Parameters.First(param => param.Key == "orderid").Value; //some payment method require customer number to be passed and returned. First search customer order by number var order = _customerOrderService.GetByOrderNumber(orderId, CustomerOrderResponseGroup.Full); //if order not found by order number search by order id if (order == null) { order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); } var store = _storeService.GetById(order.StoreId); var parameters = new NameValueCollection(); foreach (var param in callback.Parameters) { parameters.Add(param.Key, param.Value); } var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess); if (paymentMethod != null) { var paymentOuterId = paymentMethod.ValidatePostProcessRequest(parameters).OuterId; var payment = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId); if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null) { _customerOrderService.Update(new CustomerOrder[] { order }); } return(Ok(retVal)); } } return(Ok(new PostProcessPaymentResult { ErrorMessage = "cancel payment" })); }
public IHttpActionResult UpdateOrders(string action, string order_number, string carrier, string service, string tracking_number, ShipNotice shipnotice) { var order = _orderService.GetByOrderNumber(shipnotice.OrderNumber, CustomerOrderResponseGroup.Full); if (order == null) { return(BadRequest("Order not found")); } order.Patch(shipnotice); _orderService.Update(new[] { order }); return(Ok(shipnotice)); }
public IHttpActionResult GetByNumber(string number) { var retVal = _customerOrderService.GetByOrderNumber(number, coreModel.CustomerOrderResponseGroup.Full); if (retVal == null) { return(Ok()); } //Scope bound security check var scopes = _permissionScopeService.GetObjectPermissionScopeStrings(retVal).ToArray(); if (!_securityService.UserHasAnyPermission(User.Identity.Name, scopes, OrderPredefinedPermissions.Read)) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } var result = retVal.ToWebModel(); //Set scopes for UI scope bounded ACL checking result.Scopes = scopes; return(Ok(result)); }
public IHttpActionResult RegisterPayment() { var orderId = HttpContext.Current.Request.Form["orderid"]; var order = _customerOrderService.GetByOrderNumber(orderId, CustomerOrderResponseGroup.Full); if (order == null) { order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); } if (order == null) { throw new NullReferenceException("Order not found"); } var store = _storeService.GetById(order.StoreId); var parameters = new NameValueCollection(); foreach (var key in HttpContext.Current.Request.QueryString.AllKeys) { parameters.Add(key, HttpContext.Current.Request.Form[key]); } foreach (var key in HttpContext.Current.Request.Form.AllKeys) { parameters.Add(key, HttpContext.Current.Request.Form[key]); } var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == dibsCode); if (paymentMethod != null) { var validateResult = paymentMethod.ValidatePostProcessRequest(parameters); var paymentOuterId = validateResult.OuterId; var payment = order.InPayments.FirstOrDefault(x => x.GatewayCode == dibsCode && (int)(x.Sum * 100) == Convert.ToInt32(parameters["amount"], CultureInfo.InvariantCulture)); if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null && retVal.IsSuccess) { _customerOrderService.Update(new CustomerOrder[] { order }); return(Ok()); } } return(StatusCode(System.Net.HttpStatusCode.NotFound)); }