Skip to content

Cryptocurrency Payments

This plugin template shows how to implement a cryptocurrency payment processor, using the customer-facing display to show a payment QR code webpage.

Download JavaScript

plugin-name/plugin.js
// This is a sample PostalPoint plugin that adds a card payment processor.

exports.init = function () {
    global.apis.pos.registerCryptoProcessor({
        name: "Demo Crypto",
        init: async function () {
            // This is run after PostalPoint starts, and before any other crypto functions are called.
        },
        checkout: async function ( {amount}) {
            // Run the checkout process.
            // amount is the amount of USD to collect, in pennies.

            // If an error is encountered during processing,
            //    display an error message in a dialog and return boolean false.
            //    If this function returns anything except false or undefined, and doesn't throw an error,
            //    it is assumed the payment was successful.

            // Adds a line of text visible to the cashier
            global.apis.pos.addOnscreenPaymentLog("Getting crypto payment...");

            // Display a web page (i.e. with a payment QR code) to the customer on the customer-facing display.
            global.apis.ui.setCustomerScreen("<html></html>", "html");
            global.apis.ui.setCustomerScreen("https://postalpoint.app", "raw");

            // Poll the status of the crypto transaction
            var paymentComplete = false;
            do {
                await global.apis.util.delay(1000);
                paymentComplete = true;
            } while (paymentComplete != true);

            global.apis.pos.addReceiptPayment(
                    new global.apis.pos.ReceiptPayment(
                            (amount / 100).toFixed(2) * 1,
                            "crypto", // Payment type.
                            "Bitcoin\n0.00001234 BTC" // Additional text for receipt
                            )
                    );
            global.apis.pos.addOnscreenPaymentLog("Payment successful!");
            global.apis.ui.clearCustomerScreen();
        },
        cancelCheckout: function () {
            // The user requested to cancel the payment.
            // Reset things accordingly.
            global.apis.ui.clearCustomerScreen();
        },
        isConfigured: function () {
            // Is this plugin properly setup and able to process payments?  If not, return false.
            return true;
        }
    });
}

// Plugin settings to display.
exports.config = [
    {
        type: "password",
        key: "democryproprocessor_apikey",
        defaultVal: "",
        label: "API Key",
        placeholder: "",
        text: "API Key"
    },
    {
        type: "button",
        label: "Test Button",
        text: "Some text about the button",
        onClick: function () {
            global.apis.ui.openSystemWebBrowser("https://postalpoint.app");
        }
    }
];