예제 #1
0
        private async Task <bool> CreatePayment(PaymentRequest request, ResponseData <PaymentDoc> response, SqlConnection conn, SqlTransaction tx)
        {
            Share.Payment payment = new Share.Payment();

            payment.Id     = 0;
            payment.Status = Share.PaymentStatus.Accounted;
            //payment.DocumentName = response.Response.Id;
            //payment.DocumentNumber = response.Response.Id;
            //payment.DocumentDate = DateTime.ParseExact(response.Response.CapturedAt, "O", CultureInfo.InvariantCulture).Date;

            payment.ExternalId      = response.Response.Id;
            payment.DataSource      = "YDXKAS";
            payment.Provider        = "YKSBER";
            payment.OriginalAmount  = request.Amount;
            payment.ReceivedAmount  = decimal.Floor(request.Amount * 96M) / 100M;
            payment.PaymentDateTime = request.CreateDateTime;
            payment.IsTimeSpecified = true;
            payment.ArrivalDateTime = DateTime.Now;
            payment.Fio             = "";
            payment.Address         = "";
            payment.Purpose         = response.Response.Description;
            payment.PlaceId         = request.Place.Id;
            payment.EmployeeId      = request.EmployeeId;
            payment.RawData         = response.ResponseJson;

            bool result = await this._shareService.ProceedPayment(payment, conn, tx);

            if (result)
            {
                request.PaymentId = payment.Id;
            }

            return(result);
        }
예제 #2
0
        private async Task <(CreatePaymentResult, Share.Payment, Exception)> CreatePayment(PaymentRequest request, SqlConnection conn, SqlTransaction tx)
        {
            Share.Payment payment = new Share.Payment();

            try
            {
                payment.Id     = 0;
                payment.Status = Share.PaymentStatus.Approved;
                //payment.DocumentName = response.Response.Id;
                //payment.DocumentNumber = response.Response.Id;
                //payment.DocumentDate = DateTime.ParseExact(response.Response.CapturedAt, "O", CultureInfo.InvariantCulture).Date;

                payment.ExternalId      = request.OrderId;
                payment.DataSource      = "SBBACQ";
                payment.Provider        = request.PaymentProvider;
                payment.OriginalAmount  = request.Amount;
                payment.ReceivedAmount  = decimal.Floor(request.Amount * 98M) / 100M;
                payment.PaymentDateTime = request.CreateDateTime;
                payment.IsTimeSpecified = true;
                payment.ArrivalDateTime = DateTime.Now;
                payment.Fio             = "";
                payment.Address         = "";
                payment.Purpose         = "";
                payment.PlaceId         = request.PlaceId;
                payment.EmployeeId      = request.EmployeeId;
                payment.RawData         = JsonConvert.SerializeObject(request);

                if (await this._shareService.ProceedPayment(payment, conn, tx))
                {
                    request.PaymentId = payment.Id;
                    return(CreatePaymentResult.Success, payment, null);
                }
                else
                {
                    return(CreatePaymentResult.Duplicate, payment, null);
                }
            }
            catch (Exception ex)
            {
                string exStr = ex.ToString();
                _logger.LogError(exStr);
                Helper.SaveDiagMessage(_sqlServer, DiagOptions.Tech, "SbAcquiringHostedService.CreatePayment: " + exStr, _logger);
                return(CreatePaymentResult.Fail, payment, ex);
            }
        }
예제 #3
0
        private async Task ProcessRequest(PaymentRequest request, SqlConnection conn)
        {
            CreatePaymentResult result;

            Share.Payment payment   = null;
            Exception     exception = null;

            using (SqlTransaction tx = conn.BeginTransaction())
            {
                (result, payment, exception) = await this.CreatePayment(request, conn, tx);

                if (result == CreatePaymentResult.Success)
                {
                    await CompleteRequest(request, conn, tx);
                }
                else if (result == CreatePaymentResult.Fail)
                {
                    await FailedToCompleteRequest(request, conn, tx);
                }

                tx.Commit();
            }

            DiagOptions o = DiagOptions.Tech;
            string      message;

            if (result == CreatePaymentResult.Success)
            {
                o       = DiagOptions.Tech | DiagOptions.Biz;
                message = "SbAcq: Платёж " + payment.Id.ToString() + (payment.Status == Share.PaymentStatus.Approved ? " успешно проведён" : " ожидает подтверждения") + ": " + payment.RawData;
            }
            else if (result == CreatePaymentResult.Duplicate)
            {
                message = "SbAcq: Платёж уже обработан: " + payment.RawData;
            }
            else
            {
                message = "SbAcq: Ошибка \"" + exception.Message + "\" при проведении платежа: " + payment.RawData;
            }

            Helper.SaveDiagMessage(_sqlServer, o, message, _logger);
        }