Autenticación

Para interactuar con la API de Link de pagos debes autenticar tus peticiones, de esta forma identificamos y validamos la información para que tus operaciones sean seguras. La API utiliza Web Services Security UsernameToken Profile 1.1.

Credenciales API

Para integrarse con nuestra API al igual que Checkout debes contar con tus credenciales login y secretKey.

  • login: Identificador del sitio, puede considerarse público pues viaja como dato plano en las peticiones API.
  • secretKey: Llave secreta del sitio, debe ser privada, a partir de este dato se generará un nuevo tranKey que será enviado en las peticiones.

Objeto Authentication

El parámetro auth debe ser enviado en todas la peticiones API y contiene el grupo de propiedades necesarias para verificar la autenticación.

  • Name
    auth.login
    Type
    string
    is Required
    REQUIRED
    Description

    Identificador del sitio

  • Name
    auth.tranKey
    Type
    string
    is Required
    REQUIRED
    Description

    Credencial tranKey generado. A continuación se explica en detalle.

  • Name
    auth.nonce
    Type
    string
    is Required
    REQUIRED
    Description

    Valor aleatorio para cada solicitud codificado en Base64.

  • Name
    auth.seed
    Type
    string
    is Required
    REQUIRED
    Description

    Fecha actual, la cual se genera en formato ISO 8601.

Autenticación de Ejemplo

{    
  "auth": {
    "login":"1441d14df19ec88431e513bb990326e1",
    "tranKey":"DGYymv6ohpYwtLWon/iADE/COoo9JXt4jqyk6D006PY=",
    "nonce":"enQ4dXh3YWhkMWM=",
    "seed":"2023-06-21T09:56:06-05:00"
  },
  ...
}

Cómo generar tu autenticación

Debes conocer y preparar los siguientes datos:

login: Credencial login provista al inicar tu integración. Identificador del sitio.

secretKey: Credencial secretKey provista al iniciar tu integración. Llave secreta del sitio.

seed: Se trata de la fecha en la que se generó la autenticación. La fecha debe estar en formato ISO 8601.
Ejemplo: 2023-06-21T09:56:06-05:00

nonce: Valor arbitrario que identifica a una petición cómo única.
Se genera y se utiliza para otras operaciones.
Al momento de enviarlo, debe ser codificado en base 64.
Ejemplo: base64('927342197')

tranKey: Se genera en cada solicitud de forma programática.
Se genera con la siguiente fórmula Base64(SHA-256(nonce + seed + secretKey)) esta fórmula debe ser traducida según el lenguaje de programación utilizado.

Generate authentication

$login = "siteLogin";
$secretKey = "siteSecretKey";
$seed = date('c');
$rawNonce = rand();

$tranKey = base64_encode(hash('sha256', $rawNonce.$seed.$secretKey, true));
$nonce = base64_encode($rawNonce);

$body = [
  "auth" => [
    "login" => $login,
    "tranKey" => $tranKey,
    "nonce" => $nonce,
    "seed" => $seed,
  ],
  // ... other params
];

Posibles errores

Código
Causa
101
Identificador de sitio no existe ( Login incorrecto o no se encuentra en el ambiente).
102
El hash de TranKey no coincide (Trankey incorrecto o mal formado).
103
Fecha de la semilla mayor de 5 minutos.
104
Sitio inactivo.

Errores frecuentes

Mensaje de error “Fallo al obtener información del sitio”:
Posiblemente se deba a que estas intentando usar credenciales en el ambiente incorrecto, verifica que estés usando las credenciales correctas para el ambiente de pruebas o producción.

Mensaje de error “Autenticación mal formada”:
Se presenta cuando el sistema no detecta que se esté enviando login, tranKey, seed o nonce en la estructura auth enviada, también puede presentarse si se envían estos datos pero de manera incorrecta, es decir sin el parámetro content-type “application/json” de manera que el servidor interpreta la petición como texto en lugar de un arreglo de datos. Puedes validar esto haciendo la petición a la URL https://dnetix.co/p2p/client y capturando la respuesta, es una especie de espejo de la petición que te permitirá comprobar los parámetros y el body del mensaje.

SoapFault responde con el mensaje "Authentication Failed 103":
En el proceso de autenticación, Placetopay revisamos el campo Created, este campo debe estar en el tiempo GMT o el tiempo local usando el tiempo de zona. Si obtienes esta respuesta, se debe a que tu tiempo no es preciso con el tiempo real. Nosotros solo permitimos 5 minutos de diferencia entre los tiempos. Puedes usar NTP para mantener la precisión del reloj.

Dando los mismos valores EXACTOS que en los ejemplos anteriores a la BASE64(SHA256($Nonce + $Created . $secretKey)) estoy obteniendo un password digest diferente.:
Mantén en mente que BASE64 debería ser para el raw output de la SHA256 y de acuerdo con todos los lenguajes de programación este puede ser requerido para configurar esta opción, por ejemplo. En PHP base64_encode(hash('sha256' … , true)) este parámetro retornaría el raw output para el SHA256 algorithm