コード例 #1
0
    protected override async Task Process(ISupportedPaymentMethod paymentMethod, PayoutData[] payouts)
    {
        await using var ctx = _applicationDbContextFactory.CreateContext();


        var lightningSupportedPaymentMethod = (LightningSupportedPaymentMethod)paymentMethod;

        if (lightningSupportedPaymentMethod.IsInternalNode &&
            !(await Task.WhenAll((await _storeRepository.GetStoreUsers(_PayoutProcesserSettings.StoreId))
                                 .Where(user => user.Role == StoreRoles.Owner).Select(user => user.Id)
                                 .Select(s => _userService.IsAdminUser(s)))).Any(b => b))
        {
            return;
        }

        var client =
            lightningSupportedPaymentMethod.CreateLightningClient(_network, _options.Value,
                                                                  _lightningClientFactoryService);



        foreach (var payoutData in payouts)
        {
            var blob  = payoutData.GetBlob(_btcPayNetworkJsonSerializerSettings);
            var claim = await _payoutHandler.ParseClaimDestination(PaymentMethodId, blob.Destination);

            try
            {
                switch (claim.destination)
                {
                case LNURLPayClaimDestinaton lnurlPayClaimDestinaton:
                    var lnurlResult = await UILightningLikePayoutController.GetInvoiceFromLNURL(payoutData, _payoutHandler, blob,
                                                                                                lnurlPayClaimDestinaton, _network.NBitcoinNetwork);

                    if (lnurlResult.Item2 is not null)
                    {
                        continue;
                    }

                    if (await TrypayBolt(client, blob, payoutData,
                                         lnurlResult.Item1))
                    {
                        ctx.Attach(payoutData);
                        payoutData.State = PayoutState.Completed;
                    }

                    break;

                case BoltInvoiceClaimDestination item1:
                    if (await TrypayBolt(client, blob, payoutData, item1.PaymentRequest))
                    {
                        ctx.Attach(payoutData);
                        payoutData.State = PayoutState.Completed;
                    }

                    break;
                }
            }
            catch (Exception e)
            {
                Logs.PayServer.LogError(e, $"Could not process payout {payoutData.Id}");
            }
        }


        await ctx.SaveChangesAsync();
    }
コード例 #2
0
 //we group per store and init the transfers by each
 async Task <bool> TrypayBolt(ILightningClient lightningClient, PayoutBlob payoutBlob, PayoutData payoutData,
                              BOLT11PaymentRequest bolt11PaymentRequest)
 {
     return((await UILightningLikePayoutController.TrypayBolt(lightningClient, payoutBlob, payoutData, bolt11PaymentRequest,
                                                              payoutData.GetPaymentMethodId())).Result == PayResult.Ok);
 }