✏️ 正在编辑: NFSe.php
路径:
/srv/systems_dir/koruspay/library/Core/Service/NFSe.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Carbon\Carbon; use Service_Log as Log; use Zend_Controller_Request_Abstract as Request; use Service_exception_NFSeNotFoundException as NFSeNotFoundException; class Core_Service_NFSe { /** @var string */ public const CONCLUIDO = 'CONCLUIDO', REJEITADO = 'REJEITADO' ; /** @var string */ public const EMPTY_DOCKETS = 'Nenhum registro foi informado'; /** @var string */ public const DOCKET_SENDED = 'A nota dessa transação já foi emitida'; /** @var Model_NFSe */ private $model; /** @var Yuppie_Core_EmissorApi */ private $senderApi; public function __construct() { $this->model = new Model_NFSe(); $this->senderApi = new Yuppie_Core_EmissorApi(); } /** * @throws Zend_Http_Client_Exception * @throws Zend_Session_Exception */ public function send($docketId = null) { if (empty($docketId)) { throw new DomainException(self::EMPTY_DOCKETS); } if ($this->model->validNFSeIssued($docketId)) { throw new DomainException(self::DOCKET_SENDED); }; $dataNFSe = $this->model->getDataNFSe($docketId); $result = $this->senderApi->autenticar()->emitir($dataNFSe); $this->model->send($docketId, $dataNFSe, $result); } /** * @param Zend_Controller_Request_Abstract $request * @throws Zend_Http_Client_Exception * @throws Zend_Session_Exception */ public function sendMultiple(Request $request) { $dockets = $request->get('dockets'); $this->validDockets($dockets); foreach ($dockets as $docket) { if ($this->model->validNFSeIssued($docket)) { continue; }; $dataNFSe = $this->model->getDataNFSe($docket); // $this->validateNFSeIssuanceLimit($dataNFSe['prestador']['id']); try { $result = $this->senderApi->autenticar()->emitir($dataNFSe); } catch (Exception $e) { Log::insertLog('Erro ao emitir NFSe', ['docket' => $docket, 'error' => $e->getMessage()]); continue; } $this->model->send($docket, $dataNFSe, $result); } } /** * @param Zend_Controller_Request_Abstract $request * @throws Zend_Http_Client_Exception * @throws Zend_Session_Exception */ public function resendMultiple(Request $request) { $dockets = $request->get('dockets'); $this->validDockets($dockets); foreach ($dockets as $docket) { $nfse = $this->model->getNFSeError($docket); if (empty($nfse)) { continue; }; $dataNFSe = $this->model->getDataNFSeResend($docket, $nfse['id_integration']); try { $result = $this->senderApi->autenticar()->emitir($dataNFSe); } catch (Exception $e) { Log::insertLog('Erro ao emitir NFSe', ['docket' => $docket, 'error' => $e->getMessage()]); continue; } $this->model->send($docket, $dataNFSe, $result, $nfse['id']); } } /** * @param array|null $dockets */ public function validDockets(?array $dockets): void { if (empty($dockets)) { throw new DomainException(self::EMPTY_DOCKETS); } } /** * @param array|null $data * @throws Exception */ public function downloadNFSeResolve(?array $data = []) { Log::startLog('Callback NFSe ' . $data['idIntegracao']); Log::insertLog('data', $data ?: []); switch ($data['situacao']) { case self::CONCLUIDO: $this->authorizeNFSe($data); break; case self::REJEITADO: $this->rejectNFSe($data); break; default: } Log::endLog('Callback NFSe.'); } /** * @param array $data * @return int * @throws Exception */ private function authorizeNFSe(array $data) { $nfse = $this->getNFSeFromWebhook($data); $authorization = $this->model->newAuthorization($nfse['id'], $data); Log::insertLog('Autorizacao gerada', ['id' => $authorization]); return $authorization; } /** * @param array|null $data * @return int|null * @throws Exception */ private function rejectNFSe(?array $data): ?int { $nfse = $this->getNFSeFromWebhook($data); $rejeicao = $this->model->rejectNote($nfse['id'], $data); Log::insertLog('A nota ' . $nfse['idIntegracao'] . ' Foi rejeitada'); return $rejeicao; } /** * @param array $data * @return array|null */ private function getNFSeFromWebhook(array $data): ?array { if (empty($data['idIntegracao'])) { Throw new NFSeNotFoundException(); } $nfse = $this->model->getNFSeByIdIntegration($data['idIntegracao']); if (empty($nfse)) { throw new NFSeNotFoundException(); } return $nfse; } /** * @param string $url * @return Zend_Http_Response * @throws Zend_Http_Client_Exception * @throws Zend_Session_Exception */ public function pdf(string $url) { return $this->senderApi->autenticar()->pdf($url); } public function xml(string $url) { return $this->senderApi->autenticar()->xml($url); } /** * @param int $authorization * @return Zend_Db_Table_Row_Abstract|null */ public function getNFSeAuthorization(int $authorization): ?Zend_Db_Table_Row_Abstract { return $this->model->getAuthorization($authorization); } /** * @param int $provider */ public function validateNFSeIssuanceLimit(int $provider): void { $issuedInTheMonth = $this->model->getNotesIssuedMonthCount(Carbon::now()); $limit = $this->model->getLimitNFSeMonth($provider); if ($limit <= $issuedInTheMonth) { throw new DomainException("Você atingiu o limite de " . $limit . " notas mensais"); } } }
💾 保存文件
← 返回文件管理器