This post is in relation to a previous discussion: #76089
I decided to just code it myself. There's no CSS and it violates all kinds of best practices, but - it's super simple (50 lines of code), and - it works!
The merchant just needs to enter the amount, the order number (optional), and a description (optional).
The OpenNode checkout will then open in a new window, with the option of lightning or on-chain payments.
To configure - just enter your OpenNode API key on line #13 below, along with your preferred fiat-shitcoin for display purposes. Then deploy to any web server, or even a github pages instance.
<html>
<body style="padding:30px">
<p id="amtTxt"></p><input type="number" id="amtId" />
<p>Order ID:</p><input type="text" id="orderId" />
<p>Description:</p><input type="text" id="descId" />
</br></br>
<button type="button" onclick="makeInvoice();">Make Invoice</button>
<script defer>
// Enter OpenNode INVOICE API key (first one) and preferred Fiat Currency
// https://app.opennode.com/developers/integrations
const apiKey = 'long-random-string';
const currency = 'EUR';
// put currency in the text description
document.getElementById("amtTxt").innerHTML = "Invoice Amount (" + currency + "):"
function makeInvoice() {
const data = JSON.stringify({
currency: currency,
auto_settle: true,
amount: document.getElementById("amtId").value,
order_id: document.getElementById("orderId").value,
description: document.getElementById("descId").value
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.addEventListener('readystatechange', function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
const res = JSON.parse(this.responseText);
window.open(res.data.hosted_checkout_url, '_blank');
}
});
xhr.open('POST', 'https://api.opennode.com/v1/charges');
xhr.setRequestHeader('accept', 'application/json');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Authorization', apiKey);
xhr.send(data);
}
</script>
</body>
</html>