Llave del CSD de clientes

Subir la llave

Subir las llaves, al igual que los certificados, se realiza en Front-End, subiendo los archivos como Form Data (multipart form-data). A la derecha verás una función declarada en JavaScript para browser, la cual no depende de ningun framework y puede ser llamada tal cual.

Para ejecutar esta función usando un input normal de HTML puedes hacer lo siguiente, usando un input para el archivo y otro para la contraseña.

POST: https://api.fiscalpop.com/api/v1/upload/key/:authToken

Respuesta del request

  • keyPem: Key del CSD en formato PEM

  • keyModulus: El Modulus de la llave del CSD
    El Modulus es una valor de tipo MD5 de OPENSSL que encuentras en los certificados CSR (tal como los CSD).

  • cer: El Cer en formato PEM

  • cerNumber: El número de serie del Certificado, como lo solicita el SAT.

  • cerModulus:
    El Modulus es una valor de tipo MD5 de OPENSSL que encuentras en los certificados CSR (tal como los CSD).

  • notBefore: El CSD puede usarse a partir de esta fecha, no antes.

  • notAfter: Fecha de caducidad del CSD, después de esta fecha, no puede usarse.

  • authToken: La llave de acceso del cliente, confirmando el token usado

  • masterToken: Esta es la llave de acceso principal, confirmando la clave usada para crear el cliente.

  • modulusMatch: Valor true / false que indica si la llave pertenece al certificado
    Si el modulusMatch es true, y las fechas notBefore / notAfter son válidas, el cliente esta listo para facturar

    .

Los archivos de tu emisor (Cer y Key) no se guardan, una vez procesados se descartan permanentemente, de esta manera no tienes porque preocuparte de almacenamiento seguro

Subir Llave CSD

HTML

JavaScript

Subir archivo con HTML solo

multipart/form-data


<form action="https://api.fiscalpop.com/api/v1/upload/key/:authToken" method="post" enctype="multipart/form-data">
    <label for="password">Contraseña:</label>
    <input type="text" id="password" name="password">
    <label for="upload">Llave KEY:</label>
    <input type="file" accept=".key" id="upload" name="upload">
    <input type="submit" value="Submit">
</form>

Subir archivo con JavaScript

multipart/form-data


<form onsubmit="makeFormData(event);">
    <label for="password">Contraseña:</label>
    <input type="text" id="password" name="password">
    <label for="upload">Llave KEY:</label>
    <input type="file" accept=".key" id="upload" name="upload">
    <input type="submit" value="Submit">
</form>

function makeFormData(event) {
    event.preventDefault();
    const password = document.getElementById("password").value;
    const keyFile = document.getElementById("upload").files[0];
    // Asumiento que rfc y authToken están definidas en otro lado
    uploadKey(keyFile, rfc, authToken, password);
}

function uploadKey(keyFile, rfc, authToken, password) {
    const compatibleFileName = new File([keyFile], rfc+'.key', {type: 'application/pkcs8'})
    const formData = new FormData();
    formData.append('upload', compatibleFileName);
    formData.append('password', password);
    return fetch('https://api.fiscalpop.com/api/v1/upload/key/'+authToken, {
        method: 'POST',
        credentials: 'omit',
        body: formData
    }).then(response => {
        if (response.ok) {
            return response.json()
        } else {
            throw response.text();
        }
    }).then(respuesta => {
        console.log('respuesta: ', respuesta);        
        // Ejecuta tu propia lógica aquí 
    }).catch(errProm => {
        errProm.then(err => {
            // El error desde el servidor se recibe como "Promise" 
            console.log('Key submit err: ', err);
            // Ejecuta tu propia lógica de error aquí 
        })
        .catch(() => null);
    });
}

Respuesta correcta


{
    keyPem: '...',
    keyModulus: '...',
    cer: '...',
    cerNumber: '...',
    cerModulus: '...',
    notBefore: 2020-08-27T06:53:19.174Z,
    notAfter: 2024-08-27T06:53:19.174Z,
    authToken: '...',
    masterToken: '...',
    modulusMatch: true,
}