public IHttpActionResult ProcessOrderPayments(string orderId, string paymentId, [SwaggerOptional] BankCardInfo bankCardInfo)
        {
            var order = _customerOrderService.GetByIds(new[] { orderId }, CustomerOrderResponseGroup.Full.ToString()).FirstOrDefault();

            if (order == null)
            {
                var searchCriteria = AbstractTypeFactory <CustomerOrderSearchCriteria> .TryCreateInstance();

                searchCriteria.Number        = orderId;
                searchCriteria.ResponseGroup = CustomerOrderResponseGroup.Full.ToString();

                order = _searchService.SearchCustomerOrders(searchCriteria).Results.FirstOrDefault();
            }

            if (order == null)
            {
                throw new InvalidOperationException($"Cannot find order with ID {orderId}");
            }

            var payment = order.InPayments.FirstOrDefault(x => x.Id == paymentId);

            if (payment == null)
            {
                throw new InvalidOperationException($"Cannot find payment with ID {paymentId}");
            }

            var store         = _storeService.GetById(order.StoreId);
            var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == payment.GatewayCode);

            if (paymentMethod == null)
            {
                throw new InvalidOperationException($"Cannot find payment method with code {payment.GatewayCode}");
            }

            var context = new ProcessPaymentEvaluationContext
            {
                Order        = order,
                Payment      = payment,
                Store        = store,
                BankCardInfo = bankCardInfo
            };

            var result = paymentMethod.ProcessPayment(context);

            if (result.OuterId != null)
            {
                payment.OuterId = result.OuterId;
            }

            _customerOrderService.SaveChanges(new[] { order });

            return(Ok(result));
        }
Exemple #2
0
 public static orderDto.BankCardInfo ToBankCardInfoDto(this BankCardInfo model)
 {
     return(OrderConverterInstance.ToBankCardInfoDto(model));
 }
Exemple #3
0
        public bool Bind(BankCardInfo card)
        {
            card.CardNo = card.CardNo.Replace(" ", "");//删除空格
            City city = ChinaArea.GetCity(card.City_Id);

            if (city == null)
            {
                Alert((ResultType)409, "选择的城市有误");
                return(false);
            }
            Province province = ChinaArea.GetProvince(city.Province_ID);

            if (province == null)
            {
                Alert((ResultType)409, "选择的城市有误");
                return(false);
            }
            var fac = UserModuleFactory.GetUserModuleInstance();

            if (fac == null)
            {
                Alert((ResultType)500, "系统错误");
                return(false);
            }
            IUser user = fac.GetUserByCode(card.UserCode);

            if (user == null)
            {
                Alert((ResultType)404, "找不到用户信息");
                return(false);
            }
            if (user.Auth_Status != Interface.Enums.Auth_Status.已认证)
            {
                Alert((ResultType)403, "绑定银行卡必须先认证");
                return(false);
            }
            if (!string.Equals(user.UserName, card.CardHolder))
            {
                Alert((ResultType)403, "持卡人户名与认证姓名不符");
                return(false);
            }
            BankInfo bank = xUtils.GetBankInfoById(card.BankId);

            if (bank == null)
            {
                Alert((ResultType)409, "银行类型有误");
                return(false);
            }
            Tnet_Bank_Account daAcct = new Tnet_Bank_Account();

            daAcct.Account_Name   = card.CardHolder;
            daAcct.Account_Type   = 1;
            daAcct.Bank_Id        = card.BankId;
            daAcct.Bank_Name      = bank.BankName;
            daAcct.Branch_No      = card.BranchNo;
            daAcct.Branch_Bank    = card.BranchName;
            daAcct.Card_No        = card.CardNo;
            daAcct.City_Name      = city.City_Name;
            daAcct.Image_Fullpath = card.CardImage;
            daAcct.Province_Name  = province.Province_Name;
            daAcct.Remarks        = null;
            daAcct.Status         = (int)ValidateStatus.审核中;
            daAcct.User_Id        = user.UserId;
            daAcct.Province_Id    = province.Province_Id;
            daAcct.City_Id        = city.City_ID;
            if (!daAcct.Insert())
            {
                Alert((ResultType)501, "系统错误");
                return(false);
            }
            if (string.Equals(user.UserName, card.CardHolder))//认证名称与绑卡名称一致,自动审核通过
            {
                BankCardProvider bcp = new BankCardProvider();
                bool             res = bcp.Validate(daAcct.Id, true, "系统自动审核", 0);
                Log.Info($"户名验证通过,自动审核!审核结果:{res},错误信息:{bcp.PromptInfo.CustomMessage}");
            }
            return(true);
        }
Exemple #4
0
        public async Task <ActionResult <ProcessOrderPaymentResult> > ProcessOrderPayment(string orderNumber, string paymentNumber, [FromBody][SwaggerOptional] BankCardInfo bankCardInfo)
        {
            //Need lock to prevent concurrent access to same order
            using (await AsyncLock.GetLockByKey(GetAsyncLockKey(orderNumber, WorkContext)).LockAsync())
            {
                var orderDto = await _orderApi.GetByNumberAsync(orderNumber, string.Empty);

                var authorizationResult = await _authorizationService.AuthorizeAsync(User, orderDto, CanAccessOrderAuthorizationRequirement.PolicyName);

                if (!authorizationResult.Succeeded)
                {
                    return(Unauthorized());
                }
                var paymentDto = orderDto.InPayments.FirstOrDefault(x => x.Number.EqualsInvariant(paymentNumber));
                if (paymentDto == null)
                {
                    throw new StorefrontException("payment " + paymentNumber + " not found");
                }
                var processingResult = await _orderApi.ProcessOrderPaymentsAsync(orderDto.Id, paymentDto.Id, bankCardInfo.ToBankCardInfoDto());

                var order = orderDto.ToCustomerOrder(WorkContext.AllCurrencies, WorkContext.CurrentLanguage);
                return(new ProcessOrderPaymentResult
                {
                    OrderProcessingResult = processingResult.ToProcessPaymentResult(order),
                    PaymentMethod = paymentDto.PaymentMethod.ToPaymentMethod(order)
                });
            }
        }
Exemple #5
0
 public BankCardAddedEvent(Guid bankCardId, BankCardInfo info) : base(bankCardId, info)
 {
 }
Exemple #6
0
 public BankCardEvent(Guid bankCardId, BankCardInfo info)
 {
     BankCardId = bankCardId;
     Info       = info;
 }