public static PaymentRequestStatusInfo Error(PaymentRequestProcessingError processingError) { return(new PaymentRequestStatusInfo { Status = PaymentRequestStatus.Error, ProcessingError = processingError }); }
public static PaymentRequestStatusInfo Error(PaymentRequestProcessingError processingError, decimal paid, DateTime?date) { return(new PaymentRequestStatusInfo { Status = PaymentRequestStatus.Error, ProcessingError = processingError, Amount = paid, Date = date }); }
private async Task UpdateStatusAsync(IPaymentRequest paymentRequest, PaymentRequestStatusInfo statusInfo = null) { PaymentRequestStatusInfo newStatusInfo = statusInfo ?? await _paymentRequestStatusResolver.GetStatus(paymentRequest.WalletAddress); PaymentRequestStatus previousStatus = paymentRequest.Status; PaymentRequestProcessingError previousProcessingError = paymentRequest.ProcessingError; paymentRequest.Status = newStatusInfo.Status; paymentRequest.PaidDate = newStatusInfo.Date; if (newStatusInfo.Amount.HasValue) { paymentRequest.PaidAmount = newStatusInfo.Amount.Value; } paymentRequest.ProcessingError = (paymentRequest.Status == PaymentRequestStatus.Error || paymentRequest.Status == PaymentRequestStatus.SettlementError) ? newStatusInfo.ProcessingError : PaymentRequestProcessingError.None; await _paymentRequestRepository.UpdateAsync(paymentRequest); // if we are updating status from "InProcess" to any other - we have to release the lock if (previousStatus == PaymentRequestStatus.InProcess) { await _paymentLocksService.ReleaseLockAsync(paymentRequest.Id, paymentRequest.MerchantId); } PaymentRequestRefund refundInfo = await GetRefundInfoAsync(paymentRequest.WalletAddress); if (paymentRequest.Status != previousStatus || (paymentRequest.Status == PaymentRequestStatus.Error && paymentRequest.ProcessingError != previousProcessingError)) { await _paymentRequestPublisher.PublishAsync(paymentRequest, refundInfo); IAssetGeneralSettings assetSettings = await _assetSettingsService.GetGeneralAsync(paymentRequest.PaymentAssetId); // doing auto settlement only once // Some flows assume we can get updates from blockchain multiple times for the same transaction // which leads to the same payment request status if (paymentRequest.StatusValidForSettlement() && (assetSettings?.AutoSettle ?? false)) { if (paymentRequest.Status != PaymentRequestStatus.Confirmed && !_autoSettleSettingsResolver.AllowToMakePartialAutoSettle(paymentRequest.PaymentAssetId)) { return; } await SettleAsync(paymentRequest.MerchantId, paymentRequest.Id); } } }
public static InvoiceStatus Convert(PaymentRequestStatus status, PaymentRequestProcessingError error) { switch (status) { case PaymentRequestStatus.New: return(InvoiceStatus.Unpaid); case PaymentRequestStatus.Cancelled: return(InvoiceStatus.Removed); case PaymentRequestStatus.InProcess: return(InvoiceStatus.InProgress); case PaymentRequestStatus.Confirmed: return(InvoiceStatus.Paid); case PaymentRequestStatus.RefundInProgress: return(InvoiceStatus.RefundInProgress); case PaymentRequestStatus.Refunded: return(InvoiceStatus.Refunded); case PaymentRequestStatus.Error: switch (error) { case PaymentRequestProcessingError.PaymentExpired: return(InvoiceStatus.PastDue); case PaymentRequestProcessingError.LatePaid: return(InvoiceStatus.LatePaid); case PaymentRequestProcessingError.PaymentAmountBelow: return(InvoiceStatus.Underpaid); case PaymentRequestProcessingError.PaymentAmountAbove: return(InvoiceStatus.Overpaid); case PaymentRequestProcessingError.RefundNotConfirmed: return(InvoiceStatus.NotConfirmed); case PaymentRequestProcessingError.UnknownPayment: case PaymentRequestProcessingError.UnknownRefund: return(InvoiceStatus.InternalError); default: throw new Exception($"Unknown payment request error '{error}'"); } default: throw new Exception($"Unknown payment request status '{status}'"); } }
public static InvoiceStatus ToInvoiceStatus(this PaymentRequestStatus status, PaymentRequestProcessingError error) { switch (status) { case PaymentRequestStatus.New: return(InvoiceStatus.Unpaid); case PaymentRequestStatus.Cancelled: return(InvoiceStatus.Removed); case PaymentRequestStatus.InProcess: return(InvoiceStatus.InProgress); case PaymentRequestStatus.Confirmed: return(InvoiceStatus.Paid); case PaymentRequestStatus.RefundInProgress: return(InvoiceStatus.RefundInProgress); case PaymentRequestStatus.Refunded: return(InvoiceStatus.Refunded); case PaymentRequestStatus.Error: switch (error) { case PaymentRequestProcessingError.PaymentExpired: return(InvoiceStatus.PastDue); case PaymentRequestProcessingError.LatePaid: return(InvoiceStatus.LatePaid); case PaymentRequestProcessingError.PaymentAmountBelow: return(InvoiceStatus.Underpaid); case PaymentRequestProcessingError.PaymentAmountAbove: return(InvoiceStatus.Overpaid); case PaymentRequestProcessingError.RefundNotConfirmed: return(InvoiceStatus.NotConfirmed); case PaymentRequestProcessingError.UnknownPayment: case PaymentRequestProcessingError.UnknownRefund: return(InvoiceStatus.InternalError); default: return(InvoiceStatus.None); } default: return(InvoiceStatus.None); } }