Skip to content

Commit 131c8a3

Browse files
authored
Merge pull request #3 from tecnospeed/feature/download
Feature/download
2 parents f789394 + aeb7be6 commit 131c8a3

File tree

11 files changed

+180
-0
lines changed

11 files changed

+180
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ teste.php
55
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
66
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
77
# composer.lock
8+
!/examples/tmp/.gitkeep
9+
/examples/tmp/

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# Changelog
22
Alterações na biblioteca
33

4+
## [1.2.0] - 11/03/2019
5+
### Adicionado
6+
7+
Download de PDF da NFSe utilizando o id, também como CNPJ do Prestador e ID Integração.
8+
49
## [1.1.0] - 11/03/2019
510
### Adicionado
611

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,25 @@ Nos links a seguir você encontra exemplos dos cadastros dos tipos:
6464
### Consultando uma NFSe
6565

6666
Para consultar uma NFSe é necessário criar um objeto do tipo `TecnoSpeed\Plugnotas\Configuration`, setar ele num novo objeto `TecnoSpeed\Plugnotas\Nfse` utilizando o método `setConfiguration`.
67+
6768
Após este setup realizado, existe duas possibilidades de consulta, pelo ID da nota ou protocolo gerado na hora que você enviou a nota, ou passando o ID Integração e o CNPJ do Prestador utilizado para criar a NFSe. Os respectivos métodos são: `findByCnpjAndIdIntegracao` e `findByIdOrProtocol`.
6869

6970
Exemplo utilizando o [método findByCnpjAndIdIntegracao pode ser encontrado aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.consulta.cnpjId.php) e [exemplo utilizando o método findByIdOrProtocol pode ser encontrado aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.consulta.cnpjId.php).
7071

72+
### Download do PDF de uma NFSe
73+
74+
Da mesma forma que a consulta o download do PDF da Nfse necessita de um objeto do tipo `TecnoSpeed\Plugnotas\Configuration`, o qual deve ser setado num novo objeto `TecnoSpeed\Plugnotas\Nfse` utilizando o método `setConfiguration`.
75+
Uma particularidade é que é necessário indicar a pasta para escrita dos arquivos no objeto de configuração utilizando o método `setNfseDownloadDirectory`.
76+
77+
Existe a possibilidade de realizar o download utilizando o ID da nota retornado na criação utilizando o método `download`, como também realizar o download utilizando o CNPJ do Prestador e o ID Integração utilizados no envio da NFSe através do método `downloadPdfByCnpjAndIdIntegracao`.
78+
79+
Os arquivos serão salvos na pasta configurada (a qual precisa ter permissão de escrita), o padrão do nome do arquivo será o seguinte:
80+
81+
* Quando utilizado o método `download`: <pasta informada>/<id>.pdf
82+
* Quando utilizado o método `downloadPdfByCnpjAndIdIntegracao`: <pasta informada>/<cnpj>-<id integração>.pdf
83+
84+
[Exemplo de download utilizando o ID pode ser encontrado aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.download.php) e [exemplo de download utilizando o CNPJ e ID Integração aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.download.cnpjId.php).
85+
7186
### Exemplos
7287

7388
Você pode conferir alguns exemplos na pasta `/examples`.

examples/nfse.download.cnpjId.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
require '../vendor/autoload.php';
4+
5+
use TecnoSpeed\Plugnotas\Configuration;
6+
use TecnoSpeed\Plugnotas\Nfse;
7+
8+
try {
9+
// Criando configuração (este objeto é onde você irá colocar seu api-key)
10+
$configuration = new Configuration(
11+
Configuration::TYPE_ENVIRONMENT_SANDBOX, // Ambiente a ser enviada a requisição
12+
'2da392a6-79d2-4304-a8b7-959572c7e44d' // API-Key
13+
);
14+
$configuration->setNfseDownloadDirectory('./tmp/');
15+
16+
$nfse = new Nfse();
17+
$nfse->setConfiguration($configuration);
18+
$download = $nfse->downloadPdfByCnpjAndIdIntegracao('00000000000191', '000000000001914');
19+
var_dump($download);
20+
} catch (\Exception $e) {
21+
var_dump($e);
22+
}
23+

examples/nfse.download.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
require '../vendor/autoload.php';
4+
5+
use TecnoSpeed\Plugnotas\Configuration;
6+
use TecnoSpeed\Plugnotas\Nfse;
7+
8+
try {
9+
// Criando configuração (este objeto é onde você irá colocar seu api-key)
10+
$configuration = new Configuration(
11+
Configuration::TYPE_ENVIRONMENT_SANDBOX, // Ambiente a ser enviada a requisição
12+
'2da392a6-79d2-4304-a8b7-959572c7e44d' // API-Key
13+
);
14+
$configuration->setNfseDownloadDirectory('./tmp/');
15+
16+
$nfse = new Nfse();
17+
$nfse->setConfiguration($configuration);
18+
$download = $nfse->downloadPdf('5c3118127ab98414de5e2bd6');
19+
var_dump($download);
20+
} catch (\Exception $e) {
21+
var_dump($e);
22+
}
23+

src/Communication/CallApi.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,37 @@ public function send($method, $destination, $data)
5858
return ResponseObject::parse($response);
5959
}
6060
}
61+
62+
public function download($method, $destination, $data, $fileName)
63+
{
64+
try {
65+
if ($method === 'GET') {
66+
$response = $this->client->request(
67+
$method,
68+
$destination,
69+
[
70+
'headers' => $this->headers,
71+
'sink' => $fileName
72+
]
73+
);
74+
75+
return ResponseObject::parse($response);
76+
}
77+
78+
$response = $this->client->request(
79+
$method,
80+
$destination,
81+
[
82+
'headers' => $this->headers,
83+
'json' => $data,
84+
'sink' => $fileName
85+
]
86+
);
87+
88+
return true;
89+
} catch (ClientException $ce) {
90+
$response = $ce->getResponse();
91+
return ResponseObject::parse($response);
92+
}
93+
}
6194
}

src/Configuration.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Configuration
1111

1212
private $apiKey = self::API_KEY_SANDBOX;
1313
private $environment = self::TYPE_ENVIRONMENT_SANDBOX;
14+
private $nfseDownloadDirectory;
1415

1516
public function __construct($environment = self::TYPE_ENVIRONMENT_SANDBOX, $apiKey = self::API_KEY_SANDBOX)
1617
{
@@ -46,4 +47,14 @@ public function getUrl()
4647

4748
return self::URL_SANDBOX;
4849
}
50+
51+
public function setNfseDownloadDirectory($directory)
52+
{
53+
$this->nfseDownloadDirectory = $directory;
54+
}
55+
56+
public function getNfseDownloadDirectory()
57+
{
58+
return $this->nfseDownloadDirectory;
59+
}
4960
}

src/Interfaces/IDfe.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
interface IDfe
88
{
9+
public function downloadPdf($id);
10+
public function downloadPdfByCnpjAndIdIntegracao($cnpj, $idIntegracao);
11+
public function find($id);
912
public function findByCnpjAndIdIntegracao($cnpj, $idIntegracao);
1013
public function findByIdOrProtocol($idOrProtocol);
1114
public function send(Configuration $configuration);

src/Nfse.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public function setConfiguration(Configuration $configuration)
4545
$this->configuration = $configuration;
4646
}
4747

48+
public function getConfiguration()
49+
{
50+
return $this->configuration;
51+
}
52+
4853
public function setEnviarEmail($enviarEmail)
4954
{
5055
if (!v::boolVal()->validate($enviarEmail)) {
@@ -203,6 +208,16 @@ public static function fromArray($data)
203208
return Hydratate::toObject(Nfse::class, $data);
204209
}
205210

211+
public function find($id)
212+
{
213+
if (!$this->configuration) {
214+
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
215+
}
216+
217+
$communication = new CallApi($this->configuration);
218+
return $communication->send('GET', "/nfse/${id}", null);
219+
}
220+
206221
public function findByCnpjAndIdIntegracao($cnpj, $idIntegracao)
207222
{
208223
if (!$this->configuration) {
@@ -222,4 +237,42 @@ public function findByIdOrProtocol($idOrProtocol)
222237
$communication = new CallApi($this->configuration);
223238
return $communication->send('GET', "/nfse/consultar/${idOrProtocol}", null);
224239
}
240+
241+
public function downloadPdf($id)
242+
{
243+
if (!$this->configuration) {
244+
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
245+
}
246+
247+
if (!$this->configuration->getNfseDownloadDirectory()) {
248+
throw new RequiredError('É necessário setar o diretório para download do PDF.');
249+
}
250+
251+
$communication = new CallApi($this->configuration);
252+
return $communication->download(
253+
'GET',
254+
"/nfse/pdf/${id}",
255+
null,
256+
$this->configuration->getNfseDownloadDirectory() . '/' . $id . '.pdf'
257+
);
258+
}
259+
260+
public function downloadPdfByCnpjAndIdIntegracao($cnpj, $idIntegracao)
261+
{
262+
if (!$this->configuration) {
263+
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
264+
}
265+
266+
if (!$this->configuration->getNfseDownloadDirectory()) {
267+
throw new RequiredError('É necessário setar o diretório para download do PDF.');
268+
}
269+
270+
$communication = new CallApi($this->configuration);
271+
return $communication->download(
272+
'GET',
273+
"/nfse/pdf/${idIntegracao}/${cnpj}",
274+
null,
275+
$this->configuration->getNfseDownloadDirectory() . '/' . $cnpj . '-' . $idIntegracao . '.pdf'
276+
);
277+
}
225278
}

tests/ConfigurationTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,11 @@ public function testTestChangeEnvironment()
2828
$this->assertSame($configuration->getEnvironment(), Configuration::TYPE_ENVIRONMENT_PRODUCTION);
2929
$this->assertSame($configuration->getUrl(), 'https://api.plugnotas.com.br');
3030
}
31+
32+
public function testWithNfseDownloadDirectory()
33+
{
34+
$configuration = new Configuration();
35+
$configuration->setNfseDownloadDirectory('/some/test/directory/');
36+
$this->assertSame($configuration->getNfseDownloadDirectory(), '/some/test/directory/');
37+
}
3138
}

tests/NfseTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use TecnoSpeed\Plugnotas\Common\Endereco;
88
use TecnoSpeed\Plugnotas\Common\Telefone;
99
use TecnoSpeed\Plugnotas\Common\ValorAliquota;
10+
use TecnoSpeed\Plugnotas\Configuration;
1011
use TecnoSpeed\Plugnotas\Error\RequiredError;
1112
use TecnoSpeed\Plugnotas\Error\ValidationError;
1213
use TecnoSpeed\Plugnotas\Nfse;
@@ -175,6 +176,8 @@ public function testWithValidData()
175176
$impressao = new Impressao();
176177
$impressao->setCamposCustomizados(['teste'=>'testeImpressao']);
177178

179+
$configuration = new Configuration();
180+
178181
$nfse = new Nfse();
179182
$nfse->setCidadePrestacao($cidadePrestacao);
180183
$nfse->setEnviarEmail(false);
@@ -185,6 +188,7 @@ public function testWithValidData()
185188
$nfse->setServico($this->getServico());
186189
$nfse->setSubstituicao(false);
187190
$nfse->setTomador($this->getTomador());
191+
$nfse->setConfiguration($configuration);
188192

189193
$this->assertSame($nfse->getCidadePrestacao()->getDescricao(), 'Cidade de Teste');
190194
$this->assertSame($nfse->getEnviarEmail(), false);
@@ -195,6 +199,7 @@ public function testWithValidData()
195199
$this->assertSame($nfse->getServico()->getIdIntegracao(), 'A001XT');
196200
$this->assertSame($nfse->getSubstituicao(), false);
197201
$this->assertSame($nfse->getTomador()->getCpfCnpj(), '00000000000191');
202+
$this->assertInstanceOf(Configuration::class, $nfse->getConfiguration());
198203
}
199204

200205
public function testCreateObjectFromArray()

0 commit comments

Comments
 (0)