npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

isignthis-psp

v3.0.4

Published

Module for interfacing with iSignThis as a payment service provider (PSP)

Downloads

17

Readme

isignthis-psp

UPDATE 2.x.x: Node-style callbacks are deprecated, but can still be found in versions 1.x.x

Module for interfacing with iSignThis as a payment service provider (PSP)

Constructor

Module constructor

Arguments

Argument | Type | Default | Description ---------- | ------ | ---------- | ----------- settings | Object | Required | An object of settings required or supported by the module.

option object

Field | Type | Default | Description ---------- | ------ | ---------- | ----------- clientCertificate | Buffer | Required | Client certificate used for communication clientKey | Buffer | Required | Client private key used for communication merchantId | String | Required | iSignThis merchant identifier log | Object | console-log-level instance | Bunyan-compatible logger baseUrl | String | "https://gateway.isignthis.com" | Base URL (without trailing slash) to iSignThis to use instead of default acquirerId | String | "node-isignthis-psp" | Default acquirer to use if none specified when creating a payment

Example

var fs = require('fs');
var ISignThis = require('isignthis-psp');

var iSignThis = new ISignThis({
  clientCertificate: fs.readFileSync(certFile),
  clientKey: fs.readFileSync(keyFile),
  merchantId: "my_merchant",
  acquirerId: "clearhaus"
});

Payments

Payment object

This section describes the object that is returned on success from createPayment and getPayment.

Field | Type | Description ------------- | --------- | ----------- id | String | PSP-specific identifier for this payment acquirerId | String | Acquirer used for this payment? (options.acquirerId as passed to the constructor) state | String | State of the payment. Is one of the following strings: pending - Payment has been initiated, but is waiting for action from the PSP or the end-user.rejected - Payment was rejected before the end-user entered any payment details.declined - Payment was declined after the end-user entered payment details.failed - Payment failed due to an error with the PSP.expired - Payment expired before it was completed.completed - Payment completed successfully. event | String | The event field describes an event, a system action that has been triggered either automatically or by an operator. expiryTime | Date | Time when payment expires in ISO-8601 format redirectUrl | String | URL where the payment is processed by the user. transactions | Object | Information about the transaction(s) related to the payment →id | String | Acquirer-specific identifier for this transaction. →amount | Integer | Amount (denominated in sub-unit of →currency) of this transaction →currency | String | Currency denominating amountidentity | Object | Information about the KYC/SCA identity returned with the transaction. If no identity is returned, value will be nullidentity.id | String | Identity ID →identity.url | String | URL to get provider specific identity information raw | Object | The payment object from the PSP. The contents of this object will differ between different PSPs, and should be treated as an opaque blob. card | Object | Information about the card →token | String | The credit card token to use for a preauthorized card payment →last4 | String | The last four digits of the credit card number →bin | String | The credit card bin →brand | String | The credit card brand →expiryDate | String | The credit card expiry date (e.g. 1217 for Dec, 2017) →recurringId | String | ID to use for recurring payments.

createPayment: Create payment

Initiate a payment

createPayment(options)

options arguments

Argument | Type | Default | Description ------------- | ------ | ---------- | ----------- workflow | String | Required | Workflow identifier given by iSignThis.
acquirerId | String | acquirerId from constructor | What acquirer should be used for this payment? returnUrl | String (URL fragment) | Required | URL to redirect end-user to after a successful payment. Note: The PSP transaction ID will be appended to the URL, so it should be something like https://example.com/payment-complete?transaction_id= amount | Integer | Required | Amount (denominated in sub-unit of currency) to create a payment for. currency | String | Required | Currency code denominating amount. client | Object | Required | Object with information about the client initiating the payment. Only the ip field is required. initRecurring | Boolean | (Optional) | If payment is the first in a series of recurring payments. →ip | String | Required | IP address of client →name | String | null | Full name of client →dob | String | null | Date of birth of client →country | String | null | Country code (ISO-3166-1 alpha-2) of country of citizenship of client →email | String (Email address) | null | Email address of client →address | String | null | Physical street address of client account | Object  | Required | Object with information about the account (e.g. the internal user or equivalent) →id | String | Required | Unique identifier for this account (e.g. internal user ID or equivalent) →secret | String | null | Secret used by iSignThis →name | String | null | Full name of account owner transaction | Object | {} | Information about the transaction(s) related to the payment →id | String | null | Internal reference →reference | String | null | Internal reference for the transaction(s)

Returns

The function return a Promise which resolves in a payment object.

Example

var options = {
  workflow: 'CORE',
  acquirerId: 'clearhaus',
  returnUrl: 'https://example.com/payment-complete?transaction_id=',
  amount: 5000,
  currency: 'USD', // 50.00 USD
  client: {
    ip: '127.0.0.1',
    userAgent: 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531...'
  },
  account: {
    id: 'user-12345'
  }
};

return PSP.createPayment(options)
  .then(payment => {
    // Handle payment creation success
  })
  .catch(err => {
    // Handle error
  });
});

processRecurringPayment: Process recurring payment

Process a recurring payment using a recurringId from a succeded payment with initRecurring: true

processRecurringPayment(options)

options arguments

Argument | Type | Default | Description ------------- | ------ | ---------- | ----------- workflow | String | Required | Workflow identifier given by iSignThis.
acquirerId | String | acquirerId from constructor | What acquirer should be used for this payment? recurringId | String | Required | If payment is the first in a series of recurring payments. https://example.com/payment-complete?transaction_id= client | Object | Required | Object with information about the client initiating the payment. Only the ip field is required. →ip | String | Required | IP address of client →name | String | null | Full name of client →dob | String | null | Date of birth of client →country | String | null | Country code (ISO-3166-1 alpha-2) of country of citizenship of client →email | String (Email address) | null | Email address of client →address | String | null | Physical street address of client account | Object  | Required | Object with information about the account (e.g. the internal user or equivalent) →id | String | Required | Unique identifier for this account (e.g. internal user ID or equivalent) →secret | String | null | Secret used by iSignThis →name | String | null | Full name of account owner transaction | Object | {} | Information about the transaction(s) related to the payment →id | String | null | Internal reference →reference | String | null | Internal reference for the transaction(s)

Returns

The function return a Promise which resolves in a payment object.

Example

const options = {
  acquirerId: 'clearhaus',
  recurringId: 'recurring-id-string',
  client: {
    ip: '127.0.0.1',
    userAgent: 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531...'
  },
  account: {
    id: 'user-12345'
  }
};

return PSP.processRecurringPayment(options)
  .then(payment => {
    // Handle payment creation success
  })
  .catch(err => {
    // Handle error
  });
});

getPayment: Read payment

Get updated information about an existing payment

getPayment(paymentId);

Arguments

Argument | Type | Default | Description ------------- | ------ | ---------- | ----------- paymentId | String | Required | ID of payment to query. Comes from the id property of the payment object.

Returns

The function return a Promise which resolves in a payment object.

Example

const paymentId = '12345678-4321-2345-6543-456787656789';
return PSP.getPayment(paymentId)
  .then(payment => {
    // Handle payment creation success
  })
  .catch(err => {
    // Handle error
  });
});

isCallbackValid: Validate callback

Validate a callback sent from iSignThis.

isCallbackValid(request);

Arguments

Argument | Type | Default | Description ------------- | ------ | ---------- | ----------- request | Object | Required | Whole request object with headers and body.

Returns

Returns true if callback is valid

Example

const request = {
  headers: {
  	 'content-type': 'application/json',
	  accept: 'application/json',
	  host: 'example.com',
	  authorization: 'Bearer token_value',
	  'content-length': '1297',
	  connection: 'close',
  },
  body: {}
};

// Result is either true or false
const result = isCallbackValid(request);

parsePayment: Read payment

Get updated information about an existing payment

parsePayment(requestBody);

Arguments

Argument | Type | Default | Description ------------- | ------ | ---------- | ----------- requestBody | Object | Required | Body of the request object. In this case its a payment object from iSignThis.

Result

This function returns a payment object.

Example

const requestBody = {
  id: "c97f0bfc-c1ac-46c3-96d8-6605a63d380d",
  uid: "c97f0bfc-c1ac-46c3-96d8-6605a63d380d",
  secret: "f8fd310d-3755-4e63-ae98-ab3629ef245d",
  mode: "registration",
  original_message: {
    merchant_id: merchantId,
    transaction_id: transactionId,
    reference: transactionReference
  },
  expires_at: "2016-03-06T13:36:59.196Z",
  transactions: [
    {
      acquirer_id: acquirerId,
      bank_id: "2774d451-5499-41a6-a37e-6a90f2b8673c",
      response_code: "20000",
      success: true,
      amount: "0.70",
      currency: "DKK",
      message_class: "authorization-and-capture",
      status_code: "20000"
    },
    {
      acquirer_id: acquirerId,
      bank_id: "73f63c0b-7c59-416f-89e5-17dcc38b64ac",
      response_code: "20000",
      success: true,
      amount: "0.30",
      currency: "DKK",
      message_class: "authorization-and-capture",
      status_code: "20000"
    }
  ],
  state: "PENDING",
  compound_state: "PENDING.AWAIT_SECRET"
}

// result is a payment object
const payment = PSP.parsePayment(requestBody);