greenter/consulta-cpe

PHP Client de Consulta Integrada de Comprobante de Pago - SUNAT.

v1.1.0 2021-07-21 16:35 UTC

This package is auto-updated.

Last update: 2024-08-21 23:07:57 UTC


README

CI

PHP Client para API de CONSULTA INTEGRADA DE COMPROBANTE DE PAGO expuesta por SUNAT.

Requerimientos

  • PHP 7.1 o posterior
  • curl extension habilitado.

Instalación

Utilizando Composer:

composer require greenter/consulta-cpe

Uso

Primero es necesario obtener el client_id, client_secret desde el portal de SUNAT, puedes seguir la guía oficial.

  1. Solicitud de token.
<?php

$apiInstance = new \Greenter\Sunat\ConsultaCpe\Api\AuthApi(
    new \GuzzleHttp\Client()
);

$grant_type = 'client_credentials'; // Constante
$scope = 'https://api.sunat.gob.pe/v1/contribuyente/contribuyentes'; // Constante
$client_id = 'client_id_example'; // client_id generado en menú sol
$client_secret = 'client_secret_example'; // client_secret generado en menú sol

try {
    $result = $apiInstance->getToken($grant_type, $scope, $client_id, $client_secret);
        
    echo 'Token: '.$result->getAccessToken().PHP_EOL;
    echo 'Expira: '.$result->getExpiresIn().' segundos'.PHP_EOL;
} catch (Exception $e) {
    echo 'Excepcion cuando invocaba AuthApi->getToken: ', $e->getMessage(), PHP_EOL;
}

No necesitas solicitar un token por cada consulta, puedes usar el mismo durante el tiempo de expiración, generalmente 3600 seg (1h).

  1. Consulta de CPE.
<?php

// Token generado en el ejemplo anterior
$token = 'xxxxxxxx';

$config = \Greenter\Sunat\ConsultaCpe\Configuration::getDefaultConfiguration()->setAccessToken($token);

$apiInstance = new \Greenter\Sunat\ConsultaCpe\Api\ConsultaApi(
    new GuzzleHttp\Client(),
    $config->setHost($config->getHostFromSettings(1))
);
$ruc = '20000000001'; // RUC de quién realiza la consulta

$cpeFilter = (new \Greenter\Sunat\ConsultaCpe\Model\CpeFilter())
            ->setNumRuc('20000000001') // RUC del emisor
            ->setCodComp('01') // Tipo de comprobante
            ->setNumeroSerie('F001')
            ->setNumero('1')
            ->setFechaEmision('20/10/2020')
            ->setMonto('100.00');

try {
    $result = $apiInstance->consultarCpe($ruc, $cpeFilter);
    if (!$result->getSuccess()) {
        echo $result->getMessage();
        return;
    }

    $data = $result->getData();
    switch ($data->getEstadoCp()) {
        case '0': echo 'NO EXISTE'; break;
        case '1': echo 'ACEPTADO'; break;
        case '2': echo 'ANULADO'; break;
        case '3': echo 'AUTORIZADO'; break;
        case '4': echo 'NO AUTORIZADO'; break;
    }

    echo PHP_EOL.'Estado RUC: '.$data->getEstadoRuc();
    echo PHP_EOL.'Condicion RUC: '.$data->getCondDomiRuc();

} catch (Exception $e) {
    echo 'Excepcion cuando invocaba ConsultaApi->consultarCpe: ', $e->getMessage(), PHP_EOL;
}

Tabla de códigos

Tipo de comprobante

Estado del comprobante (Códigos devuelto en $data->getEstadoCp())

Estado del contribuyente (Códigos devuelto en $data->getEstadoRuc())

Condición de Domicilio del Contribuyente (Códigos devuelto en $data->getCondDomiRuc())

FAQ

  • ¿Puedo consultar los comprobantes de cualquier RUC con el mismo client_id?
    Solo se pueden consultar los comprobantes en donde el RUC que generó el client_id, fue emisor o receptor.

Docs Models