Certificado de clientes

Certificados de pruebas

Recuerda que los clientes de prueba deben usar certificados especiales y no los certificados reales de algún emisor.

Si un cliente de pruebas usara un certificado real, no verás ningún error hasta el momento que quieras emitir una factura.

El RFC a usar para pruebas, es el mismo del nombre del archivo que descargarías, escoge cualquiera de los archivos de abajo.

Contraseña de la llave: 12345678a
Régimen de emisor pruebas: 601

Subir el certificado

Subir los certificados se realiza en Front-End, subiendo los archivos como Form Data (x-www-form-urlencoded). 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.

POST: https://api.fiscalpop.com/api/v1/upload/cer/:authToken
<input type="file" accept=".cer" onchange="uploadCertificate()">

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

    .

Subir Cer CSD

HTML

JavaScript

Subir archivo con HTML solo

multipart/form-data


<form action="https://api.fiscalpop.com/api/v1/upload/cer/:authToken" method="post" enctype="multipart/form-data">
    <label for="upload">Certificado:</label>
    <input type="file" accept=".cer" id="upload" name="upload">
    <input type="submit" value="Submit">
</form>

Subir archivo desde Web

multipart/form-data


<form onsubmit="makeFormData(event);">
    <label for="upload">Certificado:</label>
    <input type="file" accept=".cer" id="upload" name="upload">
    <input type="submit" value="Submit">
</form>

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

function uploadCertificate(cerFile, rfc, authToken) {
    const compatibleFileName = new File([cerFile], rfc+'.cer', {type: 'application/pkix-cert'})
    const formData = new FormData();
    formData.append('upload', compatibleFileName);
    return fetch('https://api.fiscalpop.com/api/v1/upload/cer/'+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('Cert 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,
}