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); }