greenter / consulta-cpe
PHP 付款凭证集成查询客户端 - SUNAT。
v1.1.0
2021-07-21 16:35 UTC
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: 2024-09-21 23:19:46 UTC
README
PHP 客户端用于 SUNAT 展示的 付款凭证集成查询 API。
需求
- PHP 7.1 或更高版本
curl
扩展启用。
安装
使用 Composer
composer require greenter/consulta-cpe
用法
首先需要从 SUNAT 站点获取 client_id
和 client_secret
,你可以参考 官方指南。
- 请求 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; }
不需要为每个查询请求 token,你可以使用同一个 token 在有效期内使用,通常为 3600 秒(1 小时)。
- 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; }
代码表
凭证类型
凭证状态(在 $data->getEstadoCp()
返回的代码)
纳税人状态(在 $data->getEstadoRuc()
返回的代码)
纳税人居住条件(在 $data->getCondDomiRuc()
返回的代码)
常见问题解答
- 我可以用同一个
client_id
查询任何 RUC 的凭证吗?
只能查询由生成client_id
的 RUC 作为发件人或收件人的凭证。