private async Task ReceivedPayment(InvoiceEntity invoice, PaymentEntity payment) { _logger.LogInformation( $"Invoice {invoice.Id} received payment {payment.GetCryptoPaymentData().GetValue()} {payment.GetCryptoCode()} {payment.GetCryptoPaymentData().GetPaymentId()}"); var paymentData = (ZcashLikePaymentData)payment.GetCryptoPaymentData(); var paymentMethod = invoice.GetPaymentMethod(payment.Network, ZcashPaymentType.Instance); if (paymentMethod != null && paymentMethod.GetPaymentMethodDetails() is ZcashLikeOnChainPaymentMethodDetails Zcash && Zcash.Activated && Zcash.GetPaymentDestination() == paymentData.GetDestination() && paymentMethod.Calculate().Due > Money.Zero) { var walletClient = _ZcashRpcProvider.WalletRpcClients[payment.GetCryptoCode()]; var address = await walletClient.SendCommandAsync <CreateAddressRequest, CreateAddressResponse>( "create_address", new CreateAddressRequest() { Label = $"btcpay invoice #{invoice.Id}", AccountIndex = Zcash.AccountIndex }); Zcash.DepositAddress = address.Address; Zcash.AddressIndex = address.AddressIndex; await _invoiceRepository.NewPaymentDetails(invoice.Id, Zcash, payment.Network); _eventAggregator.Publish( new InvoiceNewPaymentDetailsEvent(invoice.Id, Zcash, payment.GetPaymentMethodId())); paymentMethod.SetPaymentMethodDetails(Zcash); invoice.SetPaymentMethod(paymentMethod); } _eventAggregator.Publish( new InvoiceEvent(invoice, InvoiceEvent.ReceivedPayment) { Payment = payment }); }
public static InvoicePaymentMethodDataModel.Payment ToPaymentModel(InvoiceEntity entity, PaymentEntity paymentEntity) { var data = paymentEntity.GetCryptoPaymentData(); return(new InvoicePaymentMethodDataModel.Payment() { Destination = data.GetDestination(), Id = data.GetPaymentId(), Status = !paymentEntity.Accounted ? InvoicePaymentMethodDataModel.Payment.PaymentStatus.Invalid : data.PaymentConfirmed(paymentEntity, entity.SpeedPolicy) || data.PaymentCompleted(paymentEntity) ? InvoicePaymentMethodDataModel.Payment.PaymentStatus.Settled : InvoicePaymentMethodDataModel.Payment.PaymentStatus.Processing, Fee = paymentEntity.NetworkFee, Value = data.GetValue(), ReceivedDate = paymentEntity.ReceivedTime.DateTime }); }