mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 14:34:23 +01:00
[Greenfield] Select default payoutMethodId if none are selected in the Refund route (#6315)
This commit is contained in:
@@ -51,6 +51,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||||||
private readonly Dictionary<PaymentMethodId, IPaymentLinkExtension> _paymentLinkExtensions;
|
private readonly Dictionary<PaymentMethodId, IPaymentLinkExtension> _paymentLinkExtensions;
|
||||||
private readonly PayoutMethodHandlerDictionary _payoutHandlers;
|
private readonly PayoutMethodHandlerDictionary _payoutHandlers;
|
||||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||||
|
private readonly BTCPayNetworkProvider _networkProvider;
|
||||||
private readonly DefaultRulesCollection _defaultRules;
|
private readonly DefaultRulesCollection _defaultRules;
|
||||||
|
|
||||||
public LanguageService LanguageService { get; }
|
public LanguageService LanguageService { get; }
|
||||||
@@ -65,6 +66,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||||||
Dictionary<PaymentMethodId, IPaymentLinkExtension> paymentLinkExtensions,
|
Dictionary<PaymentMethodId, IPaymentLinkExtension> paymentLinkExtensions,
|
||||||
PayoutMethodHandlerDictionary payoutHandlers,
|
PayoutMethodHandlerDictionary payoutHandlers,
|
||||||
PaymentMethodHandlerDictionary handlers,
|
PaymentMethodHandlerDictionary handlers,
|
||||||
|
BTCPayNetworkProvider networkProvider,
|
||||||
DefaultRulesCollection defaultRules)
|
DefaultRulesCollection defaultRules)
|
||||||
{
|
{
|
||||||
_invoiceController = invoiceController;
|
_invoiceController = invoiceController;
|
||||||
@@ -79,6 +81,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||||||
_paymentLinkExtensions = paymentLinkExtensions;
|
_paymentLinkExtensions = paymentLinkExtensions;
|
||||||
_payoutHandlers = payoutHandlers;
|
_payoutHandlers = payoutHandlers;
|
||||||
_handlers = handlers;
|
_handlers = handlers;
|
||||||
|
_networkProvider = networkProvider;
|
||||||
_defaultRules = defaultRules;
|
_defaultRules = defaultRules;
|
||||||
LanguageService = languageService;
|
LanguageService = languageService;
|
||||||
}
|
}
|
||||||
@@ -338,6 +341,9 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||||||
}
|
}
|
||||||
PaymentPrompt? paymentPrompt = null;
|
PaymentPrompt? paymentPrompt = null;
|
||||||
PayoutMethodId? payoutMethodId = null;
|
PayoutMethodId? payoutMethodId = null;
|
||||||
|
if (request.PayoutMethodId is null)
|
||||||
|
request.PayoutMethodId = invoice.GetDefaultPaymentMethodId(store, _networkProvider)?.ToString();
|
||||||
|
|
||||||
if (request.PayoutMethodId is not null && PayoutMethodId.TryParse(request.PayoutMethodId, out payoutMethodId))
|
if (request.PayoutMethodId is not null && PayoutMethodId.TryParse(request.PayoutMethodId, out payoutMethodId))
|
||||||
{
|
{
|
||||||
var supported = _payoutHandlers.GetSupportedPayoutMethods(store);
|
var supported = _payoutHandlers.GetSupportedPayoutMethods(store);
|
||||||
|
|||||||
@@ -764,34 +764,7 @@ namespace BTCPayServer.Controllers
|
|||||||
paymentMethodId = null;
|
paymentMethodId = null;
|
||||||
if (paymentMethodId is null)
|
if (paymentMethodId is null)
|
||||||
{
|
{
|
||||||
PaymentMethodId? invoicePaymentId = invoice.DefaultPaymentMethod;
|
paymentMethodId = invoice.GetDefaultPaymentMethodId(store, _NetworkProvider, displayedPaymentMethods);
|
||||||
PaymentMethodId? storePaymentId = store.GetDefaultPaymentId();
|
|
||||||
if (invoicePaymentId is not null)
|
|
||||||
{
|
|
||||||
if (displayedPaymentMethods.Contains(invoicePaymentId))
|
|
||||||
paymentMethodId = invoicePaymentId;
|
|
||||||
}
|
|
||||||
if (paymentMethodId is null && storePaymentId is not null)
|
|
||||||
{
|
|
||||||
if (displayedPaymentMethods.Contains(storePaymentId))
|
|
||||||
paymentMethodId = storePaymentId;
|
|
||||||
}
|
|
||||||
if (paymentMethodId is null && invoicePaymentId is not null)
|
|
||||||
{
|
|
||||||
paymentMethodId = invoicePaymentId.FindNearest(displayedPaymentMethods);
|
|
||||||
}
|
|
||||||
if (paymentMethodId is null && storePaymentId is not null)
|
|
||||||
{
|
|
||||||
paymentMethodId = storePaymentId.FindNearest(displayedPaymentMethods);
|
|
||||||
}
|
|
||||||
if (paymentMethodId is null)
|
|
||||||
{
|
|
||||||
var defaultBTC = PaymentTypes.CHAIN.GetPaymentMethodId(_NetworkProvider.DefaultNetwork.CryptoCode);
|
|
||||||
var defaultLNURLPay = PaymentTypes.LNURL.GetPaymentMethodId(_NetworkProvider.DefaultNetwork.CryptoCode);
|
|
||||||
paymentMethodId = displayedPaymentMethods.FirstOrDefault(e => e == defaultBTC) ??
|
|
||||||
displayedPaymentMethods.FirstOrDefault(e => e == defaultLNURLPay) ??
|
|
||||||
displayedPaymentMethods.FirstOrDefault();
|
|
||||||
}
|
|
||||||
isDefaultPaymentId = true;
|
isDefaultPaymentId = true;
|
||||||
}
|
}
|
||||||
if (paymentMethodId is null)
|
if (paymentMethodId is null)
|
||||||
|
|||||||
@@ -371,6 +371,45 @@ namespace BTCPayServer.Services.Invoices
|
|||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = new Dictionary<string, decimal>();
|
} = new Dictionary<string, decimal>();
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
public PaymentMethodId? GetDefaultPaymentMethodId(Data.StoreData store, BTCPayNetworkProvider networkProvider, HashSet<PaymentMethodId>? authorized = null)
|
||||||
|
{
|
||||||
|
PaymentMethodId? paymentMethodId = null;
|
||||||
|
PaymentMethodId? invoicePaymentId = DefaultPaymentMethod;
|
||||||
|
PaymentMethodId? storePaymentId = store.GetDefaultPaymentId();
|
||||||
|
authorized ??= GetPaymentPrompts().Select(p => p.PaymentMethodId).ToHashSet();
|
||||||
|
if (invoicePaymentId is not null)
|
||||||
|
{
|
||||||
|
if (authorized.Contains(invoicePaymentId))
|
||||||
|
paymentMethodId = invoicePaymentId;
|
||||||
|
}
|
||||||
|
if (paymentMethodId is null && storePaymentId is not null)
|
||||||
|
{
|
||||||
|
if (authorized.Contains(storePaymentId))
|
||||||
|
paymentMethodId = storePaymentId;
|
||||||
|
}
|
||||||
|
if (paymentMethodId is null && invoicePaymentId is not null)
|
||||||
|
{
|
||||||
|
paymentMethodId = invoicePaymentId.FindNearest(authorized);
|
||||||
|
}
|
||||||
|
if (paymentMethodId is null && storePaymentId is not null)
|
||||||
|
{
|
||||||
|
paymentMethodId = storePaymentId.FindNearest(authorized);
|
||||||
|
}
|
||||||
|
if (paymentMethodId is null)
|
||||||
|
{
|
||||||
|
var defaultBTC = PaymentTypes.CHAIN.GetPaymentMethodId(networkProvider.DefaultNetwork.CryptoCode);
|
||||||
|
var defaultLNURLPay = PaymentTypes.LNURL.GetPaymentMethodId(networkProvider.DefaultNetwork.CryptoCode);
|
||||||
|
paymentMethodId = authorized.FirstOrDefault(e => e == defaultBTC) ??
|
||||||
|
authorized.FirstOrDefault(e => e == defaultLNURLPay) ??
|
||||||
|
authorized.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return paymentMethodId;
|
||||||
|
}
|
||||||
|
#nullable restore
|
||||||
|
|
||||||
public void UpdateTotals()
|
public void UpdateTotals()
|
||||||
{
|
{
|
||||||
PaidAmount = new Amounts()
|
PaidAmount = new Amounts()
|
||||||
|
|||||||
Reference in New Issue
Block a user