Ir al contenido

Integraciones

En esta página

SDK de servidor

Usa los clientes oficiales de la Merchant API de Paymos para TypeScript, Python, PHP, Go, .NET, Java, Ruby y Rust, con peticiones tipadas y firma HMAC.

Paymos mantiene SDK oficiales de servidor para ocho ecosistemas de lenguaje. Todos cubren el mismo contrato: facturas, retiros, canales de pago, depósitos de canal, saldos, hora del servidor, paginación por cursor, errores, reintentos, firma de peticiones y verificación de webhooks.

Los ocho se publican en el registro de paquetes de su lenguaje. Instala desde ahí; el repositorio sigue siendo donde se lee el código fuente.

Lenguaje Publicado en Instalación Repositorio oficial
JavaScript / TypeScript npm npm i @paymos/sdk Paymos-labs/typescript-sdk
Python PyPI pip install paymos-sdk Paymos-labs/python-sdk
PHP Packagist composer require paymos/php-sdk Paymos-labs/php-sdk
Go Go modules go get github.com/Paymos-labs/go-sdk/v2 Paymos-labs/go-sdk
.NET NuGet dotnet add package Paymos Paymos-labs/dotnet-sdk
Java Maven Central io.paymos:paymos-java Paymos-labs/java-sdk
Ruby RubyGems gem install paymos Paymos-labs/ruby-sdk
Rust crates.io cargo add paymos Paymos-labs/rust-sdk

Java no tiene un comando de una línea: añade la dependencia io.paymos:paymos-java a tu pom.xml o a tu configuración de Gradle.

Fija una etiqueta de versión inmutable vMAJOR.MINOR.PATCH. La página de releases de cada repositorio indica el runtime admitido, el registro de cambios y el commit de origen a partir del cual se generó la versión.

Superficie común de la API

Todos los clientes exponen seis recursos:

  • system — obtener la hora del servidor para alinear el reloj de las peticiones
  • invoices — crear, obtener, listar, cancelar, confirmar el pago y simular en Sandbox
  • withdrawals — crear, obtener, listar, cancelar y simular la finalización en Sandbox
  • paymentChannels — crear, obtener, listar, bloquear, desbloquear y simular un depósito en Sandbox
  • paymentChannelDeposits — obtener un depósito y consultar el feed de depósitos confirmados
  • balances — listar los saldos disponibles agrupados por moneda

Cada cliente escribe los dos recursos de canal con la convención de su lenguaje: paymentChannels en TypeScript, PHP y Java, payment_channels en Python, Ruby y Rust, y PaymentChannels en Go y .NET.

Los métodos de listado usan paginación por cursor con un límite máximo de página y rechazan un cursor devuelto dos veces. Los reintentos automáticos respetan Retry-After; las peticiones que modifican estado no se reintentan ante errores de transporte ni errores genéricos de servidor. Una petición frenada por el límite de peticiones sí puede reintentarse, porque la API no llegó a aceptarla para su procesamiento.

Un solo contrato para ocho lenguajes

Lo compartido no es solo la lista de endpoints: también el comportamiento. Un único banco de pruebas, independiente del lenguaje, fija qué bytes entran en la firma de una petición, cómo funcionan los reintentos de arriba, cómo recorren las páginas los iteradores de cursor y cómo se verifica un webhook. Una versión sale solo cuando las pruebas del propio SDK se ejecutan contra ese banco.

En la práctica: si te llevas una integración de uno de estos lenguajes a otro, conservas la firma, el recorrido de páginas, los reintentos y el trato de los webhooks. Dos SDK firman con los mismos bytes la misma petición de listado filtrada.

Lo que solo trae PHP

El SDK de PHP incorpora una capa de integración con tiendas que no existe en ningún otro cliente: contraverificación de un webhook contra una lectura fresca de la API, control del importe y la moneda antes de liberar un pedido, descarte de eventos repetidos sobre un almacén intercambiable, un verificador que sostiene a la vez el secreto de Sandbox y el de producción, una conciliación, un mapeo de evento a acción sobre el pedido y almacenamiento cifrado de credenciales.

Esa capa es la razón de que los plugins de CMS sean tan finos: la lógica de estados del pedido vive una sola vez en el SDK que tienen debajo, y no ocho veces encima. A los otros siete no les aplica nada de esto: son cliente, firma, recursos, paginación y verificación de webhooks, y ahí se acaba.

Reglas de seguridad

Estos SDK son exclusivamente de servidor. No pongas nunca un API secret en JavaScript de navegador, en una aplicación móvil, en un repositorio público, en una URL ni en un registro.

La autenticación de las peticiones y la de los webhooks usan firmas distintas. Las peticiones a la API usan HMAC-SHA256 en base64 sobre la petición canónica. Los webhooks usan HMAC-SHA256 en hexadecimal sobre {timestamp}.{cuerpo bruto exacto}. Pasa al verificador del SDK los bytes de la petición sin procesar, antes de decodificar el JSON. Por defecto rechaza una marca temporal que se aleje más de cinco minutos del momento actual, y admite una cabecera con dos valores v1, de modo que una rotación del secreto no te cuesta ningún cambio de código.

Para los esquemas y ejemplos de cada endpoint, continúa con Autenticación, Facturas, Retiros, Saldos y Webhooks.