Socket
Book a DemoInstallSign in
Socket

tap-payment-popupjs

Package Overview
Dependencies
Maintainers
1
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tap-payment-popupjs

library for loading TAP's payment checkout gateway.

2.0.0
latest
Source
npmnpm
Version published
Weekly downloads
14
-74.55%
Maintainers
1
Weekly downloads
 
Created
Source

TAP-Inlinejs

Popup Library for loading TAP's payment checkout gateway. It makes it easy to accept payments from a web application and to create custom, secure payment experiences for merchant apps and websites

Requirements

node >= 12.0.0
npm >= 6.0.0

Introduction

This documentation provides an overview of the TouchandPay Payment Popup (TAPPaymentPop) JavaScript library that facilitates payment integration with the TAP payment gateway. It explains how to use the library, describes its main features and provides an example of how to integrate it with a web page.

Version 2.0.0 (Latest)

Version 2.0.0 introduces an env parameter to simplify environment selection (production or sandbox) and uses a single script URL.

Getting Started (v2.0.0)

To use the TAPPaymentPop JavaScript library (v2.0.0), include the following script tag in your HTML code:

<script src="https://unpkg.com/tap-payment-popupjs@2.0.0/dist/umd/index.js"></script>

You can now use the TAPPaymentPop.setup() method to create an instance of the payment gateway, passing in the required configuration parameters, including the new env parameter.

API (v2.0.0)

The TAPPaymentPop object provides the following methods:

  • initialize(transactionDefaults): Initializes or re-initializes the payment gateway with specified default transaction parameters. Typically called by setup() if the gateway isn't already initialized.
  • setup(transactionDetails, setupCallback): Configures and returns an instance of the payment gateway. transactionDetails is an object with configuration parameters. setupCallback is an optional function that receives the gateway instance.
  • destroy(): Cleans up the current payment gateway instance, removing its iframes and event listeners. Call this if you need to remove the payment popup functionality from the page or before re-initializing with a completely new configuration.

The instance returned by TAPPaymentPop.setup() has the following method:

  • openIframe(): Displays the payment gateway iframe to start the payment process.

Configuration Parameters (v2.0.0)

The TAPPaymentPop.setup() method requires a transactionDetails object with the following parameters:

ParameterRequiredDescription
apiKeyyesYour TAP API key.
envyesEnvironment to use: "production" for production or "sandbox" for testing.
transIDyesA unique transaction ID for this payment attempt.
amountyesThe amount of the transaction (e.g., in Kobo for NGN).
emailyesThe email address of the customer.
phoneif savePaymentDetails is true, then yes; else noThe customer's phone number. Required if savePaymentDetails is true.
savePaymentDetailsnoBoolean (true/false). Set to true if you want to enable saving payment details for the customer. Defaults to false.
customerReferenceif savePaymentDetails is true, then yes; else noA unique reference for the customer, used when savePaymentDetails is true.
customPayloadnoAn object for any other custom data you want to send with the transaction. This data will be nested under customPayload in the backend.
- billerIDno (within customPayload)The biller ID (Special Usecase, include in customPayload).
- productIDno (within customPayload)The product ID (Special Usecase, include in customPayload).
- ...no (within customPayload)Other custom data relevant to your application.
onClosenoA function to call when the payment gateway popup is closed by the user before completion.
callbacknoA function to call when the payment has been successfully completed. It receives the transaction response object as an argument.

Example Usage (v2.0.0)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>TAP Payment Gateway Example (v2.0.0)</title>
  </head>
  <body>
    <form id="pay-form">
      <div class="form-group">
        <label for="amount">Amount (Kobo)</label>
        <input type="number" id="amount" name="amount" class="form-control" required />
      </div>
      <div class="form-group">
        <label for="email">Email</label>
        <input type="email" id="email" name="email" class="form-control" required />
      </div>
      <div class="form-group">
        <label for="phone">Phone</label>
        <input type="text" id="phone" name="phone" class="form-control" /> <!-- Made not required in form for example flexibility -->
      </div>
      <div class="form-group">
        <label for="customerReference">Customer Reference (Optional)</label>
        <input type="text" id="customerReference" name="customerReference" class="form-control" />
      </div>
      <div class="form-group">
        <label>
          <input type="checkbox" id="savePaymentDetails" name="savePaymentDetails" />
          Save Payment Details
        </label>
      </div>
      <div class="form-group">
        <label for="billerID">Biller ID (Optional)</label>
        <input type="text" id="billerID" name="billerID" class="form-control" />
      </div>
      <div class="form-group">
        <label for="productID">Product ID (Optional)</label>
        <input type="text" id="productID" name="productID" class="form-control" />
      </div>
      <button id="pay-btn" type="button" onclick="validateAndPay()" class="btn btn-primary">
        Pay
      </button>
    </form>
    <div id="alert-holder"></div>

    <script type="module" src="https://unpkg.com/tap-payment-popupjs@2.0.0/dist/umd/index.js"></script>
    <script>
      const api_key = "YOUR_API_KEY"; // Replace with your actual API key

      function validateAndPay() {
        const email = document.getElementById("email").value;
        const amountinkobo = document.getElementById("amount").value;
        const phone = document.getElementById("phone").value;
        const savePaymentDetails = document.getElementById("savePaymentDetails").checked;
        const customerReference = document.getElementById("customerReference").value;
        
        const billerID = document.getElementById("billerID").value;
        const productID = document.getElementById("productID").value;

        if (!email || !amountinkobo) { // Phone is conditionally required by the library
          alert("Please fill in Email and Amount.");
          return;
        }

        payWithTAP(email, amountinkobo, phone, savePaymentDetails, customerReference, billerID, productID);
      }

      function payWithTAP(email, amountinkobo, phone, savePaymentDetails, customerReference, billerID, productID) {
        const transactionDetails = {
          apiKey: api_key,
          env: "sandbox", // "production" or "sandbox"
          amount: parseFloat(amountinkobo),
          transID: `TAP-${Date.now()}-${Math.random().toString(36).slice(2)}`,
          email: email,
          phone: phone, 
          savePaymentDetails: savePaymentDetails,
          customerReference: customerReference,
          customPayload: {
            // phone: phone, // phone is a top-level param
            billerID: billerID || undefined,
            productID: productID || undefined,
          },
          callback: function (response) {
            console.log("Payment successful:", response);
            const msg = 'Success. The transaction id is <b>"' + response.transID + '"</b>. Full response: ' + JSON.stringify(response);
            document.getElementById("alert-holder").innerHTML = '<div class="alert alert-success" role="alert">' + msg + "</div>";
            document.getElementById("pay-form").reset();
          },
          onClose: function () {
            console.log("Payment popup closed by user.");
            const msg = "Payment popup closed. Please click the 'Pay' button to try again.";
            document.getElementById("alert-holder").innerHTML = '<div class="alert alert-info" role="alert">' + msg + "</div>";
          }
        };

        try {
            const handler = TAPPaymentPop.setup(transactionDetails);
            if (handler) {
                 handler.openIframe();
            } else {
                console.error("Failed to setup TAPPaymentPop. Check console for errors.");
                // Error messages from setup will be more specific if thrown by the library
            }
        } catch (error) {
            console.error("Error during TAPPaymentPop setup:", error);
            document.getElementById("alert-holder").innerHTML = '<div class="alert alert-danger" role="alert">' + error.message + "</div>";
        }
      }
    </script>
  </body>
</html>

Version 1.0.x (Deprecated)

Note: Version 1.0.x is deprecated. Please upgrade to Version 2.0.0 for the latest features and a simplified environment setup.

Getting Started (v1.0.x - Deprecated)

To use the TAPPaymentPop JavaScript library, you need to first include the following script tag in your HTML code:

<!-- Production -->
<script src="https://unpkg.com/tap-payment-popupjs@1.0.4/dist/umd/index.js"></script>

<!-- Staging/Test -->
<script src="https://unpkg.com/tap-payment-popupjs@1.0.3/dist/umd/index.js"></script>

You can now use the TAPPaymentPop.setup() method to create an instance of the payment gateway, passing in the required configuration parameters.

API (v1.0.x - Deprecated)

The TAPPaymentPop object provides the following methods:

  • initialize(transactionDefaults): Initializes or re-initializes the payment gateway with specified default transaction parameters. Typically called by setup() if the gateway isn't already initialized.
  • setup(transactionDetails, setupCallback): Configures and returns an instance of the payment gateway. transactionDetails is an object with configuration parameters. setupCallback is an optional function that receives the gateway instance.
  • destroy(): Cleans up the current payment gateway instance, removing its iframes and event listeners. Call this if you need to remove the payment popup functionality from the page or before re-initializing with a completely new configuration.

The instance returned by TAPPaymentPop.setup() has the following method:

  • openIframe(): Displays the payment gateway iframe to start the payment process.

Configuration Parameters (v1.0.x - Deprecated)

The TAPPaymentPop.setup() method requires a transactionDetails object with the following parameters:

ParameterRequiredDescription
apiKeyyesYour TAP API key.
transIDyesA unique transaction ID for this payment attempt.
amountyesThe amount of the transaction (e.g., in Kobo for NGN).
emailyesThe email address of the customer.
customPayloadnoAn object for any other custom data you want to send with the transaction. This data will be nested under customPayload in the backend.
- billerIDno (within customPayload)The biller ID (Special Usecase, include in customPayload).
- productIDno (within customPayload)The product ID (Special Usecase, include in customPayload).
- ...no (within customPayload)Other custom data relevant to your application.
onClosenoA function to call when the payment gateway popup is closed by the user before completion.
callbacknoA function to call when the payment has been successfully completed. It receives the transaction response object as an argument.

Example Usage (v1.0.x - Deprecated)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>TAP Payment Gateway Example (v1.0.x - Deprecated)</title>
  </head>
  <body>
    <form id="pay-form">
      <div class="form-group">
        <label for="amount">Amount (Kobo)</label>
        <input type="number" id="amount" name="amount" class="form-control" required />
      </div>
      <div class="form-group">
        <label for="email">Email</label>
        <input type="email" id="email" name="email" class="form-control" required />
      </div>
      <div class="form-group">
        <label for="phone">Phone</label>
        <input type="text" id="phone" name="phone" class="form-control" required />
      </div>
      <div class="form-group">
        <label for="billerID">Biller ID (Optional)</label>
        <input type="text" id="billerID" name="billerID" class="form-control" />
      </div>
      <div class="form-group">
        <label for="productID">Product ID (Optional)</label>
        <input type="text" id="productID" name="productID" class="form-control" />
      </div>
      <button id="pay-btn" type="button" onclick="validateAndPay()" class="btn btn-primary">
        Pay
      </button>
    </form>
    <div id="alert-holder"></div>

    <!-- Ensure you are using the correct version (e.g., Staging/Test for v1.0.3) -->
    <script type="module" src="https://unpkg.com/tap-payment-popupjs@1.0.3/dist/umd/index.js"></script>
    <script>
      const api_key = "TkdLb2VUMk46ZXRoWEdJSEF0Z24xOnB1WVUzd3dvS1c4bw=="; // Replace with your actual API key

      function validateAndPay() {
        const email = document.getElementById("email").value;
        const amountinkobo = document.getElementById("amount").value;
        const phone = document.getElementById("phone").value;
        
        const billerID = document.getElementById("billerID").value;
        const productID = document.getElementById("productID").value;

        if (!email || !amountinkobo || !phone) {
          alert("Please fill in all required fields: Email, Amount, and Phone.");
          return;
        }

        payWithTAP(email, amountinkobo, phone, billerID, productID);
      }

      function payWithTAP(email, amountinkobo, phone, billerID, productID) {
        const transactionDetails = {
          apiKey: api_key,
          amount: parseFloat(amountinkobo),
          transID: `TAP-${Date.now()}-${Math.random().toString(36).slice(2)}`,
          email: email,
          customPayload: {
            phone: phone,
            billerID: billerID || undefined,
            productID: productID || undefined,
          },
          callback: function (response) {
            console.log("Payment successful:", response);
            const msg = 'Success. The transaction id is <b>"' + response.transID + '"</b>. Full response: ' + JSON.stringify(response);
            document.getElementById("alert-holder").innerHTML = '<div class="alert alert-success" role="alert">' + msg + "</div>";
            document.getElementById("pay-form").reset();
          },
          onClose: function () {
            console.log("Payment popup closed by user.");
            const msg = "Payment popup closed. Please click the 'Pay' button to try again.";
            document.getElementById("alert-holder").innerHTML = '<div class="alert alert-info" role="alert">' + msg + "</div>";
          }
        };

        try {
            const handler = TAPPaymentPop.setup(transactionDetails);
            if (handler) {
                 handler.openIframe();
            } else {
                console.error("Failed to setup TAPPaymentPop. Check console for errors.");
                document.getElementById("alert-holder").innerHTML = '<div class="alert alert-danger" role="alert">Could not initialize payment. Please check configuration.</div>';
            }
        } catch (error) {
            console.error("Error during TAPPaymentPop setup:", error);
            document.getElementById("alert-holder").innerHTML = '<div class="alert alert-danger" role="alert">' + error.message + "</div>";
        }
      }
    </script>
  </body>
</html>

Deployment (v1.0.x - Deprecated)

Inline JS is deployed to:

  • Production: https://unpkg.com/tap-payment-popupjs@1.0.4/dist/umd/index.js (Deprecated)
  • Staging / Test: https://unpkg.com/tap-payment-popupjs@1.0.3/dist/umd/index.js (Deprecated)
  • npm: https://www.npmjs.com/package/tap-payment-popupjs (Check for latest v2.0.0)
  • Test Sample (for v1.0.x): https://tap-sdk-demo-staging.netlify.app/

Live Checkout

Checkout Interface is deployed to:

  • Live URL: https://checkout.touchandpay.me
  • Sandbox URL: (The main checkout URL will adapt based on the env parameter in v2.0.0. For v1.0.x, use the Staging/Test script for a sandbox-like environment.)

Keywords

payments

FAQs

Package last updated on 11 Jun 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.