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.
Estas credenciales son própias de tu sitio y deben ser tratadas de forma segura. No compartas tus credenciales en áreas de acceso público como Github, código del lado de cliente u otros lugares de facil acceso para terceros.
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
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