public virtual async Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice, CancellationToken cancellationToken = default) { var lightningClient = await GetLightningClient(cryptoCode, true); var network = _btcPayNetworkProvider.GetNetwork <BTCPayNetwork>(cryptoCode); if (lightningInvoice?.BOLT11 is null || !BOLT11PaymentRequest.TryParse(lightningInvoice.BOLT11, out _, network.NBitcoinNetwork)) { ModelState.AddModelError(nameof(lightningInvoice.BOLT11), "The BOLT11 invoice was invalid."); } if (!ModelState.IsValid) { return(this.CreateValidationError(ModelState)); } var param = lightningInvoice?.MaxFeeFlat != null || lightningInvoice?.MaxFeePercent != null ? new PayInvoiceParams { MaxFeePercent = lightningInvoice.MaxFeePercent, MaxFeeFlat = lightningInvoice.MaxFeeFlat } : null; var result = await lightningClient.Pay(lightningInvoice.BOLT11, param, cancellationToken); return(result.Result switch { PayResult.CouldNotFindRoute => this.CreateAPIError("could-not-find-route", "Impossible to find a route to the peer"), PayResult.Error => this.CreateAPIError("generic-error", result.ErrorDetail), PayResult.Ok => Ok(new LightningPaymentData { TotalAmount = result.Details?.TotalAmount, FeeAmount = result.Details?.FeeAmount }), _ => throw new NotSupportedException("Unsupported Payresult") });
public virtual async Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice) { var lightningClient = await GetLightningClient(cryptoCode, true); var network = _btcPayNetworkProvider.GetNetwork <BTCPayNetwork>(cryptoCode); if (lightningInvoice?.BOLT11 is null || !BOLT11PaymentRequest.TryParse(lightningInvoice.BOLT11, out _, network.NBitcoinNetwork)) { ModelState.AddModelError(nameof(lightningInvoice.BOLT11), "The BOLT11 invoice was invalid."); } if (!ModelState.IsValid) { return(this.CreateValidationError(ModelState)); } var result = await lightningClient.Pay(lightningInvoice.BOLT11); switch (result.Result) { case PayResult.CouldNotFindRoute: return(this.CreateAPIError("could-not-find-route", "Impossible to find a route to the peer")); case PayResult.Error: return(this.CreateAPIError("generic-error", result.ErrorDetail)); case PayResult.Ok: return(Ok()); default: throw new NotSupportedException("Unsupported Payresult"); } }
public virtual async Task PayLightningInvoice(string cryptoCode, PayLightningInvoiceRequest request, CancellationToken token = default) { if (request == null) { throw new ArgumentNullException(nameof(request)); } var response = await _httpClient.SendAsync( CreateHttpRequest($"api/v1/server/lightning/{cryptoCode}/invoices/pay", bodyPayload : request, method : HttpMethod.Post), token); await HandleResponse(response); }
public virtual async Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice) { var lightningClient = await GetLightningClient(cryptoCode, true); var network = _btcPayNetworkProvider.GetNetwork <BTCPayNetwork>(cryptoCode); if (lightningClient == null || network == null) { return(NotFound()); } try { BOLT11PaymentRequest.TryParse(lightningInvoice.Invoice, out var bolt11PaymentRequest, network.NBitcoinNetwork); } catch (Exception) { ModelState.AddModelError(nameof(lightningInvoice), "The BOLT11 invoice was invalid."); } if (CheckValidation(out var errorActionResult)) { return(errorActionResult); } var result = await lightningClient.Pay(lightningInvoice.Invoice); switch (result.Result) { case PayResult.Ok: return(Ok()); case PayResult.CouldNotFindRoute: ModelState.AddModelError(nameof(lightningInvoice.Invoice), "Could not find route"); break; case PayResult.Error: ModelState.AddModelError(nameof(lightningInvoice.Invoice), result.ErrorDetail); break; } return(BadRequest(new ValidationProblemDetails(ModelState))); }
public override Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice) { return(base.PayInvoice(cryptoCode, lightningInvoice)); }
public override Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice, CancellationToken cancellationToken = default) { return(base.PayInvoice(cryptoCode, lightningInvoice, cancellationToken)); }