greenter / consulta-cpe
PHP Client de Consulta Integrada de Comprobante de Pago - SUNAT.
Installs: 2 874
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 1
Forks: 6
Open Issues: 0
pkg:composer/greenter/consulta-cpe
Requires
- php: >=7.1
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ^6.2 || ^7.3
Requires (Dev)
- phpstan/phpstan: ^0.12.51
- phpunit/phpunit: ^7.4
Suggests
- ext-mbstring: guzzle ^6, phpunit required
This package is auto-updated.
Last update: 2025-10-22 01:42:07 UTC
README
PHP Client para API de CONSULTA INTEGRADA DE COMPROBANTE DE PAGO expuesta por SUNAT.
Requerimientos
- PHP 7.1 o posterior
- curlextension 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.
- 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).
- 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
| Código | Descripción | 
|---|---|
| 01 | Factura | 
| 03 | Boleta de venta | 
| 04 | Liquidación de compra | 
| 07 | Nota de crédito | 
| 08 | Nota de débito | 
| R1 | Recibo por honorarios | 
| R7 | Nota de crédito de recibos | 
Estado del comprobante (Códigos devuelto en $data->getEstadoCp())
| Código | Descripción | 
|---|---|
| 0 | NO EXISTE (Comprobante no informado) | 
| 1 | ACEPTADO (Comprobante aceptado) | 
| 2 | ANULADO (Comunicado en una baja) | 
| 3 | AUTORIZADO (con autorización de imprenta) | 
| 4 | NO AUTORIZADO (no autorizado por imprenta) | 
Estado del contribuyente (Códigos devuelto en $data->getEstadoRuc())
| Código | Descripción | 
|---|---|
| 00 | ACTIVO | 
| 01 | BAJA PROVISIONAL | 
| 02 | BAJA PROV. POR OFICIO | 
| 03 | SUSPENSION TEMPORAL | 
| 10 | BAJA DEFINITIVA | 
| 11 | BAJA DE OFICIO | 
| 22 | INHABILITADO-VENT.UNICA | 
Condición de Domicilio del Contribuyente (Códigos devuelto en $data->getCondDomiRuc())
| Código | Descripción | 
|---|---|
| 00 | HABIDO | 
| 09 | PENDIENTE | 
| 11 | POR VERIFICAR | 
| 12 | NO HABIDO | 
| 20 | NO HALLADO | 
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ó elclient_id, fue emisor o receptor.