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; } }
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(); } } } }
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); }
public void WriteCreateLog(int requestId, CreatePaymentRequestData data) { WriteLog(requestId, "CreatePayment", data.ResponseData, data.ExceptionData); }
public static async Task Run(HttpClient client, CreatePaymentRequestData data, ILogger logger) { CreatePaymentRequest request = new CreatePaymentRequest(client, logger); await request.Run(data); }