Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

redsys-easy

javiertury2.1kMIT5.2.11TypeScript support: included

Node JS interface for Redsys payment gateway

redsys, payment, gateway, interface, tpv, pos, sabadell, caixabank, credit, card, webservice

readme

Redsys Easy

Node JS client and utilities for implementing a redsys payment gateway

Install

npm install redsys-easy

API documentation

Checkout the api documentation to explore the utilities exported by this package.

Usage

These are the most important utilities that redsys-easy provides.

import {
  createRedsysAPI,
  SANDBOX_URLS,
  PRODUCTION_URLS,
  // Create a new orderId
  randomTransactionId,
  // Utilities for 3DS forms
  create3DSMethodForm,
  create3DSv1ChallengeForm,
  create3DSv2ChallengeForm,
  deserializeThreeDSMethodData,
  deserializeCres
} from 'redsys-easy';

const {
  // REST integration
  restIniciaPeticion,
  restTrataPeticion,
  // Redirect integration
  createRedirectForm,
  processRestNotification,
  processSoapNotification,
  createSoapNotificationAnswer
}= createRedsysAPI({
  secretKey: 'sq7HjrUOBfKmC576ILgskD5srU870gJ7',
  urls: SANDBOX_URLS
});

Examples

Despite the name, a redsys payment gateway with 3DS support is quite complex. Don't despair, these examples show how it can be implemented.

Redirection is much simpler but less customizable

Formatters

By default, the main functions exported by this package use the API specified by redsys. To smooth out the corners of this API, it's also possible to wrap them with custom formatters.

As an example, redsys-easy provides some basic typescript-ready formatters.

:warning: Format has changed: Previous versions of redsys-easy used a different format, particularly the amount field.

import {
  createRedsysAPI,
  SANDBOX_URLS,
  // Formatter utils
  useSingleInputFormatter,
  useOutputFormatter,
  usePromiseOutputFormatter,
  // Input formatters
  redirectInputFormatter,
  restIniciaPeticionInputFormatter,
  restTrataPeticionInputFormatter,
  // Output formatters
  restNotificationOutputFormatter,
  soapNotificationOutputFormatter,
  restIniciaPeticionOutputFormatter,
  restTrataPeticionOutputFormatter
} from 'redsys-easy';

const {
  restIniciaPeticion: baseRestIniciaPeticion,
  restTrataPeticion: baseRestTrataPeticion,
  createRedirectForm: baseCreateRedirectForm,
  processRestNotification: baseProcessRestNotification,
  processSoapNotification: baseProcessSoapNotification
} = createRedsysAPI({
  secretKey: 'sq7HjrUOBfKmC576ILgskD5srU870gJ7',
  urls: SANDBOX_URLS
});

/*
 *            External      Internal
 * amount      '33.5'  <->   '3350'
 * currency    'EUR'   <->   '978'
 *
 * expiryYear  '34'
 * expiryMonth '12'
 *                     <->   '3412'
 *
 * lang        'es'    <->   '1'
 * cardBrand   'VISA'  <-    '1'
 * cardCountry 'es'    <-    '724'
 */
export const createRedirectForm = useSingleInputFormatter(baseCreateRedirectForm, redirectInputFormatter);
export const restIniciaPeticion = useSingleInputFormatter(
  usePromiseOutputFormatter(baseRestIniciaPeticion, restIniciaPeticionOutputFormatter),
  restIniciaPeticionInputFormatter
)
export const restTrataPeticion = useSingleInputFormatter(
  usePromiseOutputFormatter(baseRestTrataPeticion, restTrataPeticionOutputFormatter),
  restTrataPeticionInputFormatter
)
export const processRestNotification = useOutputFormatter(baseProcessRestNotification, restNotificationOutputFormatter);
export const processSoapNotification = useOutputFormatter(baseProcessSoapNotification, soapNotificationOutputFormatter);

FAQ

How should I format the amount?

Redsys API uses expects amounts denominated in the smallest unit of a currency. The exported core functions of redsys-easy also follows this convention. The smallest unit of a currency is the smallest integer amount of said currency. For euros, it is cents. So 1.99 EUR would be 199 of the smallest unit.

However you are free to wrap these core functions with a custom formatter. Particularly, redsys-easy optional formatters expect the amount to be formatted as a decimal string currency unit. For euros, it would be '1.99'.

Acknowledgments

Based on previous work

changelog

Changelog

All notable changes to this project will be documented in this file. See commit-and-tag-version for commit guidelines.

5.2.11 (2025-02-20)

Bug Fixes

5.2.10 (2025-02-19)

5.2.9 (2025-02-09)

5.2.8 (2025-01-04)

Bug Fixes

  • input formatter on currencies with zero decimals (1b2f510)

5.2.7 (2024-11-30)

5.2.6 (2024-10-23)

5.2.5 (2024-06-29)

Bug Fixes

  • apply decodeURIComponent only to redirect notifications (3a1f991)
  • deserialize: decode merchant parameters one by one, allowing for decode failures in case a paremeter value is not encoded (e28e99a)

5.2.4 (2024-04-07)

5.2.3 (2024-02-17)

5.2.2 (2024-01-07)

Bug Fixes

  • paygold redirect-related input parameters (791bafc), closes #43

5.2.1 (2023-12-05)

5.2.0 (2023-08-06)

Features

5.1.0 (2023-08-04)

Features

5.0.0 (2023-08-04)

⚠ BREAKING CHANGES

  • export types and refactor response assertion utils

Features

  • export types and refactor response assertion utils (855a3aa)
  • replace Math.random with crypto.randomInt (f3b1b0b)
  • replace node-fetch with undici (fe5abe1)

5.0.0 (2023-08-04)

⚠ BREAKING CHANGES

  • export types and refactor response assertion utils

Features

  • export types and refactor response assertion utils (855a3aa)
  • replace Math.random with crypto.randomInt (f3b1b0b)
  • replace node-fetch with undici (fe5abe1)

4.0.3 (2023-08-04)

4.0.2 (2022-05-14)

Bug Fixes

  • support Ds_Card_Number in response (84199f9), closes #11

4.0.1 (2021-10-22)

Bug Fixes

  • types: notification output parameters (7dd4a46), closes #8

4.0.0 (2021-07-17)

⚠ BREAKING CHANGES

  • The formatter has changed the expect input to be formatted.
  • errors and output formatter
  • formatter: The formatter has a different ouput format for the amount
  • removal of expiryDate in formatted output, formatted param "hour" renamed to "time".
  • error messages

Features

Bug Fixes

  • currency code format (531ca39)
  • currency table (420a8c0)
  • declare tslib as dependency (455830e)
  • escape forward slash in petition params json (91109fe)
  • formatter: conditional price and response (2fddc60)
  • web-service test (4d0ff09)
  • break public interface into composable pieces (3a5efba)
  • errors and output formatter (787dcca)
  • formatters (98927d4)
  • functional programming principles (c5c4ea9)

[3.1.0] (2020-12-03)

Features

  • typescript, rollup and tests (a3f97ec)
  • Generate CommonJS and ESM output
  • tests for types (a45d76f)

Bug Fixes

  • Fill 3D Secure form in redirection test

[3.0.1]

Fixed

  • Length of encrypted 3des message is now limited

[3.0.0]

Changed

  • Removed internal parameters in the form of paramInt. User the new raw property instead.
  • securePayment returns a boolean
  • Parameter dateFrecuency renamed to dateFrequency
  • Parameter CVV2 renamed to cvv

Added

  • A new parameter raw can be used to pass an object with redsys parameters that should not be formatted
  • Updated currencies and error codes
  • Add new formatted parameters, some related to paygold
  • New transaction type PAYLINK
  • Examples

[2.0.0]

Changed

  • Monetary amounts are integers of smallest currency unit
  • Some parameters are split into two: param and paramInt. param uses an ISO format while paramInt uses the internal redsys format. For inputs, paramInt has priority.

Added

  • Notification and web service response parameters are formatted
  • Random transaction ID generator