mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 14:04:26 +01:00
Remove BIP70 support
This commit is contained in:
@@ -350,57 +350,6 @@ namespace BTCPayServer.Tests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
|
||||||
[Trait("Integration", "Integration")]
|
|
||||||
public void CanPayUsingBIP70()
|
|
||||||
{
|
|
||||||
using (var tester = ServerTester.Create())
|
|
||||||
{
|
|
||||||
tester.Start();
|
|
||||||
var user = tester.NewAccount();
|
|
||||||
user.GrantAccess();
|
|
||||||
user.RegisterDerivationScheme("BTC");
|
|
||||||
Assert.True(user.BitPay.TestAccess(Facade.Merchant));
|
|
||||||
var invoice = user.BitPay.CreateInvoice(new Invoice()
|
|
||||||
{
|
|
||||||
Buyer = new Buyer() { email = "test@fwf.com" },
|
|
||||||
Price = 5000.0m,
|
|
||||||
Currency = "USD",
|
|
||||||
PosData = "posData",
|
|
||||||
OrderId = "orderId",
|
|
||||||
//RedirectURL = redirect + "redirect",
|
|
||||||
//NotificationURL = CallbackUri + "/notification",
|
|
||||||
ItemDesc = "Some description",
|
|
||||||
FullNotifications = true
|
|
||||||
}, Facade.Merchant);
|
|
||||||
|
|
||||||
Assert.False(invoice.Refundable);
|
|
||||||
|
|
||||||
var url = new BitcoinUrlBuilder(invoice.PaymentUrls.BIP72);
|
|
||||||
var request = url.GetPaymentRequest();
|
|
||||||
var payment = request.CreatePayment();
|
|
||||||
|
|
||||||
Transaction tx = new Transaction();
|
|
||||||
tx.Outputs.AddRange(request.Details.Outputs.Select(o => new TxOut(o.Amount, o.Script)));
|
|
||||||
var cashCow = tester.ExplorerNode;
|
|
||||||
tx = cashCow.FundRawTransaction(tx).Transaction;
|
|
||||||
tx = cashCow.SignRawTransaction(tx);
|
|
||||||
|
|
||||||
payment.Transactions.Add(tx);
|
|
||||||
|
|
||||||
payment.RefundTo.Add(new PaymentOutput(Money.Coins(1.0m), new Key().ScriptPubKey));
|
|
||||||
var ack = payment.SubmitPayment();
|
|
||||||
Assert.NotNull(ack);
|
|
||||||
|
|
||||||
Eventually(() =>
|
|
||||||
{
|
|
||||||
var localInvoice = user.BitPay.GetInvoice(invoice.Id, Facade.Merchant);
|
|
||||||
Assert.Equal("paid", localInvoice.Status);
|
|
||||||
Assert.True(localInvoice.Refundable);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
[Trait("Integration", "Integration")]
|
[Trait("Integration", "Integration")]
|
||||||
public async Task CanSetLightningServer()
|
public async Task CanSetLightningServer()
|
||||||
|
|||||||
@@ -1,117 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using BTCPayServer.Filters;
|
|
||||||
using BTCPayServer.Logging;
|
|
||||||
using BTCPayServer.Payments;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using NBitcoin;
|
|
||||||
using NBitcoin.Payment;
|
|
||||||
|
|
||||||
namespace BTCPayServer.Controllers
|
|
||||||
{
|
|
||||||
public partial class InvoiceController
|
|
||||||
{
|
|
||||||
[HttpGet]
|
|
||||||
[Route("i/{invoiceId}/{cryptoCode?}")]
|
|
||||||
[AcceptMediaTypeConstraint("application/bitcoin-paymentrequest")]
|
|
||||||
public async Task<IActionResult> GetInvoiceRequest(string invoiceId, string cryptoCode = null)
|
|
||||||
{
|
|
||||||
if (cryptoCode == null)
|
|
||||||
cryptoCode = "BTC";
|
|
||||||
var invoice = await _InvoiceRepository.GetInvoice(invoiceId);
|
|
||||||
var network = _NetworkProvider.GetNetwork(cryptoCode);
|
|
||||||
var paymentMethodId = new PaymentMethodId(cryptoCode, Payments.PaymentTypes.BTCLike);
|
|
||||||
if (invoice == null || invoice.IsExpired() || network == null || !invoice.Support(paymentMethodId))
|
|
||||||
return NotFound();
|
|
||||||
|
|
||||||
var dto = invoice.EntityToDTO(_NetworkProvider);
|
|
||||||
var paymentMethod = dto.CryptoInfo.First(c => c.GetpaymentMethodId() == paymentMethodId);
|
|
||||||
PaymentRequest request = new PaymentRequest
|
|
||||||
{
|
|
||||||
DetailsVersion = 1
|
|
||||||
};
|
|
||||||
request.Details.Expires = invoice.ExpirationTime;
|
|
||||||
request.Details.Memo = invoice.ProductInformation.ItemDesc;
|
|
||||||
request.Details.Network = network.NBitcoinNetwork;
|
|
||||||
request.Details.Outputs.Add(new PaymentOutput() { Amount = paymentMethod.Due, Script = BitcoinAddress.Create(paymentMethod.Address, network.NBitcoinNetwork).ScriptPubKey });
|
|
||||||
request.Details.MerchantData = Encoding.UTF8.GetBytes(invoice.Id);
|
|
||||||
request.Details.Time = DateTimeOffset.UtcNow;
|
|
||||||
request.Details.PaymentUrl = new Uri(invoice.ServerUrl.WithTrailingSlash() + ($"i/{invoice.Id}"), UriKind.Absolute);
|
|
||||||
|
|
||||||
var store = await _StoreRepository.FindStore(invoice.StoreId);
|
|
||||||
if (store == null)
|
|
||||||
throw new BitpayHttpException(401, "Unknown store");
|
|
||||||
|
|
||||||
if (store.StoreCertificate != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
request.Sign(store.StoreCertificate, PKIType.X509SHA256);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logs.PayServer.LogWarning(ex, "Error while signing payment request");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PaymentRequestActionResult(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
[Route("i/{invoiceId}", Order = 99)]
|
|
||||||
[Route("i/{invoiceId}/{cryptoCode}", Order = 99)]
|
|
||||||
[MediaTypeConstraint("application/bitcoin-payment")]
|
|
||||||
public async Task<IActionResult> PostPayment(string invoiceId, string cryptoCode = null)
|
|
||||||
{
|
|
||||||
var invoice = await _InvoiceRepository.GetInvoice(invoiceId);
|
|
||||||
if (cryptoCode == null)
|
|
||||||
cryptoCode = "BTC";
|
|
||||||
var network = _NetworkProvider.GetNetwork(cryptoCode);
|
|
||||||
if (network == null || invoice == null || invoice.IsExpired() || !invoice.Support(new PaymentMethodId(cryptoCode, Payments.PaymentTypes.BTCLike)))
|
|
||||||
return NotFound();
|
|
||||||
|
|
||||||
var wallet = _WalletProvider.GetWallet(network);
|
|
||||||
if (wallet == null)
|
|
||||||
return NotFound();
|
|
||||||
var payment = PaymentMessage.Load(Request.Body, network.NBitcoinNetwork);
|
|
||||||
var unused = wallet.BroadcastTransactionsAsync(payment.Transactions);
|
|
||||||
await _InvoiceRepository.AddRefundsAsync(invoiceId, payment.RefundTo.Select(p => new TxOut(p.Amount, p.Script)).ToArray(), network.NBitcoinNetwork);
|
|
||||||
return new PaymentAckActionResult(payment.CreateACK(invoiceId + " is currently processing, thanks for your purchase..."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class PaymentRequestActionResult : IActionResult
|
|
||||||
{
|
|
||||||
PaymentRequest req;
|
|
||||||
public PaymentRequestActionResult(PaymentRequest req)
|
|
||||||
{
|
|
||||||
this.req = req;
|
|
||||||
}
|
|
||||||
public Task ExecuteResultAsync(ActionContext context)
|
|
||||||
{
|
|
||||||
context.HttpContext.Response.Headers["Content-Transfer-Encoding"] = "binary";
|
|
||||||
context.HttpContext.Response.ContentType = "application/bitcoin-paymentrequest";
|
|
||||||
req.WriteTo(context.HttpContext.Response.Body);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public class PaymentAckActionResult : IActionResult
|
|
||||||
{
|
|
||||||
PaymentACK req;
|
|
||||||
public PaymentAckActionResult(PaymentACK req)
|
|
||||||
{
|
|
||||||
this.req = req;
|
|
||||||
}
|
|
||||||
public Task ExecuteResultAsync(ActionContext context)
|
|
||||||
{
|
|
||||||
context.HttpContext.Response.Headers["Content-Transfer-Encoding"] = "binary";
|
|
||||||
context.HttpContext.Response.ContentType = "application/bitcoin-paymentack";
|
|
||||||
req.WriteTo(context.HttpContext.Response.Body);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -593,7 +593,11 @@ namespace BTCPayServer.Controllers
|
|||||||
[BitpayAPIConstraint(false)]
|
[BitpayAPIConstraint(false)]
|
||||||
public async Task<IActionResult> InvalidatePaidInvoice(string invoiceId)
|
public async Task<IActionResult> InvalidatePaidInvoice(string invoiceId)
|
||||||
{
|
{
|
||||||
var invoice = await _InvoiceRepository.GetInvoice(invoiceId);
|
var invoice = (await _InvoiceRepository.GetInvoices(new InvoiceQuery()
|
||||||
|
{
|
||||||
|
InvoiceId = invoiceId,
|
||||||
|
UserId = GetUserId()
|
||||||
|
})).FirstOrDefault();
|
||||||
if (invoice == null)
|
if (invoice == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
await _InvoiceRepository.UpdatePaidInvoiceToInvalid(invoiceId);
|
await _InvoiceRepository.UpdatePaidInvoiceToInvalid(invoiceId);
|
||||||
|
|||||||
Reference in New Issue
Block a user