public IHttpActionResult ProcessOrderPayments([FromBody] BankCardInfo bankCardInfo, string orderId, string paymentId) { //search first by order number var order = _customerOrderService.GetByOrderNumber(orderId, coreModel.CustomerOrderResponseGroup.Full); //if not found by order number search by order id if (order == null) { order = _customerOrderService.GetById(orderId, coreModel.CustomerOrderResponseGroup.Full); } if (order == null) { throw new NullReferenceException("order"); } var payment = order.InPayments.FirstOrDefault(x => x.Id == paymentId); if (payment == null) { throw new NullReferenceException("payment"); } var store = _storeService.GetById(order.StoreId); var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == payment.GatewayCode); if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new ProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, BankCardInfo = bankCardInfo }; var result = paymentMethod.ProcessPayment(context); _customerOrderService.Update(new coreModel.CustomerOrder[] { order }); var retVal = new webModel.ProcessPaymentResult(); retVal.InjectFrom(result); retVal.PaymentMethodType = paymentMethod.PaymentMethodType; return(Ok(retVal)); }
public IHttpActionResult ProcessOrderPayments([FromBody]BankCardInfo bankCardInfo, string orderId, string paymentId) { var order = _customerOrderService.GetById(orderId, coreModel.CustomerOrderResponseGroup.Full); if (order == null) { throw new NullReferenceException("order"); } var payment = order.InPayments.FirstOrDefault(x => x.Id == paymentId); if (payment == null) { throw new NullReferenceException("payment"); } var store = _storeService.GetById(order.StoreId); var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == payment.GatewayCode); if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new ProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, BankCardInfo = bankCardInfo }; var result = paymentMethod.ProcessPayment(context); if (result.NewPaymentStatus == PaymentStatus.Pending || result.NewPaymentStatus == PaymentStatus.Paid) { payment.OuterId = result.OuterId; payment.IsApproved = result.NewPaymentStatus == PaymentStatus.Paid; _customerOrderService.Update(new coreModel.CustomerOrder[] { order }); } var retVal = new webModel.ProcessPaymentResult(); retVal.InjectFrom(result); retVal.PaymentMethodType = paymentMethod.PaymentMethodType; return Ok(retVal); }
public IHttpActionResult ProcessOrderPayments(string orderId, string paymentId, [SwaggerOptional] BankCardInfo bankCardInfo) { //search first by order number var order = _customerOrderService.GetByOrderNumber(orderId, coreModel.CustomerOrderResponseGroup.Full); //if not found by order number search by order id if (order == null) order = _customerOrderService.GetById(orderId, coreModel.CustomerOrderResponseGroup.Full); if (order == null) { throw new NullReferenceException("order"); } var payment = order.InPayments.FirstOrDefault(x => x.Id == paymentId); if (payment == null) { throw new NullReferenceException("payment"); } var store = _storeService.GetById(order.StoreId); var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == payment.GatewayCode); if (paymentMethod == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new ProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, BankCardInfo = bankCardInfo }; var result = paymentMethod.ProcessPayment(context); _customerOrderService.Update(new[] { order }); var retVal = new webModel.ProcessPaymentResult(); retVal.InjectFrom(result); retVal.PaymentMethodType = paymentMethod.PaymentMethodType; return Ok(retVal); }