Ejemplo n.º 1
0
        public async Task Run(CreatePaymentRequestData data)
        {
            try
            {
                string content = JsonConvert.SerializeObject(data.RequestData, Startup.JsonSettings);
                this._idempotenceKey = "CreateRequest_" + data.RequestData.Metadata.RequestId.ToString();
                bool isSuccessStatusCode = false;

                await RepeatedCall.ActionAsync(async() =>
                {
                    using (HttpResponseMessage response = await this.GetResponse("", HttpMethod.Post, content))
                    {
                        string str = await response.Content.ReadAsStringAsync();
                        ResponseData <PaymentDoc> result = data.CreateResponseInstance();
                        result.RequestJson  = content;
                        result.ResponseJson = str;
                        isSuccessStatusCode = response.IsSuccessStatusCode;
                    }
                }, 5, 500);

                data.DeserializeResults(isSuccessStatusCode);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка при отправке запроса CreateRequest и десериализации ответа");
                data.ExceptionData = ex;
            }
        }
Ejemplo n.º 2
0
        private async Task CreatePayments()
        {
            using (SqlConnection conn = _sqlServer.GetConnection())
            {
                await conn.OpenAsync();

                while (true)
                {
                    PaymentRequest request = null;
                    using (SqlCommand cmd = _sqlServer.GetSpCommand("payment.GetYandexKassaRequest", conn))
                    {
                        cmd.AddTinyIntParam("@Status", (byte)PaymentRequestStatus.Arrived);
                        using (SqlDataReader dr = await cmd.ExecuteReaderAsync())
                        {
                            if (dr.Read())
                            {
                                request = new PaymentRequest();
                                request.FillFromReader(dr);
                            }
                        }
                    }

                    if (request == null)
                    {
                        break;
                    }

                    CreatePaymentInDoc createPaymentDoc = new CreatePaymentInDoc();
                    createPaymentDoc.Amount.Amount = request.Amount;
                    createPaymentDoc.Capture       = true;               // После того, как гость подтвердил платёж, мы уже не должны подтверждать его
                    createPaymentDoc.Description   = "Дарение чаевых по агентскому договору tips24.ru/" + request.Place.Id.ToString() +
                                                     (request.EmployeeId.HasValue ? "-" + request.EmployeeId.Value.ToString() : "");
                    createPaymentDoc.PaymentMethodData.Phone = request.UserLogin;
                    createPaymentDoc.Metadata.RequestId      = request.Id;

                    CreatePaymentRequestData data = await this.SendCreatePaymentRequest(createPaymentDoc);

                    bool isError = (data.HasError || data.ResponseData.Response.Status == PaymentDoc.StatusType.Canceled);

                    using (SqlCommand cmd = _sqlServer.GetSpCommand("payment.UpdateYandexKassaRequestStatus", conn))
                    {
                        cmd.AddIntParam("@RequestId", request.Id);
                        cmd.AddTinyIntParam("@Status", (byte)(isError ? PaymentRequestStatus.CreateFailed : PaymentRequestStatus.Created));
                        cmd.AddVarCharParam("@KassaPaymentId", 50, (isError ? null : data.ResponseData.Response.Id));
                        await cmd.ExecuteNonQueryAsync();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private async Task <CreatePaymentRequestData> SendCreatePaymentRequest(CreatePaymentInDoc createPaymentDoc)
        {
            CreatePaymentRequestData data = new CreatePaymentRequestData(createPaymentDoc);

            try
            {
                await CreatePaymentRequest.Run(this._client, data, this._logger);
            }
            catch (Exception e)
            {
                this._logger.LogError(e.ToString());
            }
            finally
            {
                this._fileLogger.WriteCreateLog(createPaymentDoc.Metadata.RequestId, data);
            }

            return(data);
        }
Ejemplo n.º 4
0
 public void WriteCreateLog(int requestId, CreatePaymentRequestData data)
 {
     WriteLog(requestId, "CreatePayment", data.ResponseData, data.ExceptionData);
 }
Ejemplo n.º 5
0
 public static async Task Run(HttpClient client, CreatePaymentRequestData data, ILogger logger)
 {
     CreatePaymentRequest request = new CreatePaymentRequest(client, logger);
     await request.Run(data);
 }