Beispiel #1
0
        private async Task HandlePaymentRejected(string[] topics, string data)
        {
            var rejectedPaymentModel = _eventDecoder.DecodeTransferRejectedEvent(topics, data);

            var statusUpdateResult =
                await _paymentsStatusUpdater.TokensRefundSucceedAsync(rejectedPaymentModel.PaymentRequestId);

            if (statusUpdateResult != PaymentStatusUpdateErrorCodes.None)
            {
                _log.Error(message: "Could not mark payment as RefundSucceeded/ExpirationTokensRefundSucceeded because of error",
                           context: new { Error = statusUpdateResult, Payment = rejectedPaymentModel });

                return;
            }

            var partnerPayment = await GetPaymentRequest(rejectedPaymentModel.PaymentRequestId);

            //We should have value for Sending amount at this stage for sure
            rejectedPaymentModel.Amount = partnerPayment.TokensSendingAmount.Value;

            await PublishPaymentProcessedEvent(rejectedPaymentModel, ProcessedPartnerPaymentStatus.Rejected);
        }
        private async Task HandleTransferRejected(string[] topics, string data)
        {
            var rejectedTransferModel = _eventDecoder.DecodeTransferRejectedEvent(topics, data);
            var resultError           = await _paymentsService.RejectPaymentTransferAsync(rejectedTransferModel.TransferId);

            if (resultError != PaymentTransfersErrorCodes.None)
            {
                _log.Error(message: "Unable reject a payment transfer because of error",
                           context: new { Error = resultError, rejectedTransferModel.TransferId });
                return;
            }

            _log.Info("Payment transfer was successfully marked as rejected", context: rejectedTransferModel.TransferId);

            var paymentTransfer = await _paymentTransfersRepository.GetByTransferIdAsync(rejectedTransferModel.TransferId);

            if (paymentTransfer == null)
            {
                throw new InvalidOperationException(
                          $"Payment transfer with id: {rejectedTransferModel.TransferId} which was just rejected was not found in DB");
            }

            await _transferProcessedPublisher.PublishAsync(new PaymentTransferProcessedEvent
            {
                TransferId     = paymentTransfer.TransferId,
                Status         = ProcessedPaymentTransferStatus.Rejected,
                InvoiceId      = paymentTransfer.InvoiceId,
                CampaignId     = paymentTransfer.SpendRuleId,
                CustomerId     = paymentTransfer.CustomerId,
                Timestamp      = DateTime.UtcNow,
                Amount         = paymentTransfer.AmountInTokens,
                InstalmentName = paymentTransfer.InstalmentName,
                LocationCode   = paymentTransfer.LocationCode,
            });

            _log.Info("Payment transfer processed event published", context: rejectedTransferModel.TransferId);
        }