greenter/consulta-cpe

PHP 付款凭证集成查询客户端 - SUNAT。

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

This package is auto-updated.

Last update: 2024-09-21 23:19:46 UTC


README

CI

PHP 客户端用于 SUNAT 展示的 付款凭证集成查询 API。

需求

  • PHP 7.1 或更高版本
  • curl 扩展启用。

安装

使用 Composer

composer require greenter/consulta-cpe

用法

首先需要从 SUNAT 站点获取 client_idclient_secret,你可以参考 官方指南

  1. 请求 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 小时)。

  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 作为发件人或收件人的凭证。

文档模型