Skip to content

Commit 4213202

Browse files
committed
feat: Add headers() function to retrieve all headers from response
1 parent e2a1125 commit 4213202

File tree

6 files changed

+150
-1
lines changed

6 files changed

+150
-1
lines changed

src/Barnetik/Tbai/Api/AbstractResponse.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public function header(string $key): string
2525
return $this->headers[$key];
2626
}
2727

28+
public function headers(): array
29+
{
30+
return $this->headers;
31+
}
32+
2833
public function saveResponseContent(string $path): void
2934
{
3035
file_put_contents($path, $this->content);

src/Barnetik/Tbai/Api/ResponseInterface.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ interface ResponseInterface
77
public function __construct(string $status, array $headers, string $content);
88
public function status(): string;
99
public function header(string $key): string;
10+
public function headers(): array;
1011
public function content(): string;
1112
public function isDelivered(): bool;
1213
public function isCorrect(): bool;

tests/Barnetik/Tbai/Api/Araba/EndpointTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,46 @@ public function test_ZuzenduCancel_is_delivered(): void
294294

295295
$this->assertTrue($response->isDelivered());
296296
}
297+
298+
public function test_TicketBai_response_headers_can_be_retrieved(): void
299+
{
300+
$nif = $_ENV['TBAI_ARABA_ISSUER_NIF'];
301+
$issuer = $_ENV['TBAI_ARABA_ISSUER_NAME'];
302+
$license = $_ENV['TBAI_ARABA_APP_LICENSE'];
303+
$developer = $_ENV['TBAI_ARABA_APP_DEVELOPER_NIF'];
304+
$appName = $_ENV['TBAI_ARABA_APP_NAME'];
305+
$appVersion = $_ENV['TBAI_ARABA_APP_VERSION'];
306+
307+
$ticketbai = $this->ticketBaiMother->createTicketBai($nif, $issuer, $license, $developer, $appName, $appVersion, TicketBai::TERRITORY_ARABA);
308+
$signedFilename = tempnam(__DIR__ . '/../../__files/signedXmls', 'signed-');
309+
rename($signedFilename, $signedFilename . '.xml');
310+
$signedFilename = $signedFilename . '.xml';
311+
312+
$certFile = $_ENV['TBAI_ARABA_P12_PATH'];
313+
$certPassword = $_ENV['TBAI_ARABA_PRIVATE_KEY'];
314+
$privateKey = PrivateKey::p12($certFile);
315+
316+
$ticketbai->sign($privateKey, $certPassword, $signedFilename);
317+
318+
$endpoint = new Endpoint(true, true);
319+
320+
$response = $endpoint->submitInvoice($ticketbai, $privateKey, $certPassword, self::SUBMIT_RETRIES, self::SUBMIT_RETRY_DELAY);
321+
322+
$responseFile = tempnam(__DIR__ . '/../../__files/responses', 'response-');
323+
file_put_contents($responseFile, $response->content());
324+
325+
if (!$response->isCorrect()) {
326+
echo "\n";
327+
echo "VatId / IFZ / NIF: " . $_ENV['TBAI_ARABA_ISSUER_NIF'] . "\n";
328+
echo "Date:" . date('Y-m-d H:i:s') . "\n";
329+
echo "IP: " . file_get_contents('https://ipecho.net/plain') . "\n";
330+
echo "Sent file: " . $endpoint->debugData(AbstractTerritory::DEBUG_SENT_FILE) . "\n";
331+
echo "Signed file: " . basename($signedFilename) . "\n";
332+
echo "Main error message: " . $response->mainErrorMessage() . "\n";
333+
echo "Response file: " . basename($responseFile) . "\n";
334+
}
335+
336+
$this->assertIsArray($response->headers());
337+
}
338+
297339
}

tests/Barnetik/Tbai/Api/Bizkaia/EndpointTest.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,4 +760,70 @@ public function test_wrong_issuer_is_marked_as_incorrect_response(): void
760760
$this->assertFalse($response->isCorrect());
761761
$this->assertFalse($response->isDelivered());
762762
}
763+
764+
public function test_TicketBai_response_headers_can_be_retrieved(): void
765+
{
766+
$certFile = $_ENV['TBAI_BIZKAIA_P12_PATH'];
767+
$certPassword = $_ENV['TBAI_BIZKAIA_PRIVATE_KEY'];
768+
$privateKey = PrivateKey::p12($certFile);
769+
770+
$signedFilename = tempnam(__DIR__ . '/../../__files/signedXmls', 'signed-');
771+
rename($signedFilename, $signedFilename . '.xml');
772+
$signedFilename = $signedFilename . '.xml';
773+
774+
$ticketbai = $this->ticketBaiMother->createBizkaiaTicketBai();
775+
$ticketbai->sign($privateKey, $certPassword, $signedFilename);
776+
777+
$endpoint = new Api(TicketBai::TERRITORY_BIZKAIA, true, true);
778+
779+
$response = $endpoint->submitInvoice($ticketbai, $privateKey, $certPassword, self::SUBMIT_RETRIES, self::SUBMIT_RETRY_DELAY);
780+
781+
$responseFile = tempnam(__DIR__ . '/../../__files/responses', 'response-');
782+
file_put_contents($responseFile, $response->content());
783+
784+
if (!$response->isCorrect()) {
785+
echo "\n";
786+
echo "VatId / IFZ / NIF: " . $ticketbai->issuerVatId() . "\n";
787+
echo "Date:" . date('Y-m-d H:i:s') . "\n";
788+
echo "IP: " . file_get_contents('https://ipecho.net/plain') . "\n";
789+
echo "eus-bizkaia-n3-tipo-respuesta: " . $response->header('eus-bizkaia-n3-tipo-respuesta') . "\n";
790+
echo "eus-bizkaia-n3-identificativo: " . $response->header('eus-bizkaia-n3-identificativo') . "\n";
791+
echo "eus-bizkaia-n3-codigo-respuesta: " . $response->header('eus-bizkaia-n3-codigo-respuesta') . "\n";
792+
echo "Main error message: " . $response->mainErrorMessage() . "\n";
793+
echo "Sent file: " . $endpoint->debugData(Api::DEBUG_SENT_FILE) . "\n";
794+
echo "Signed file: " . basename($signedFilename) . "\n";
795+
echo "Response file: " . basename($responseFile) . "\n";
796+
}
797+
798+
$this->assertIsArray($response->headers());
799+
$this->assertArrayHasKey('eus-bizkaia-n3-tipo-respuesta', $response->headers());
800+
}
801+
802+
public function test_headers_can_be_retrieved_on_incorrect_response(): void
803+
{
804+
$certFile = $_ENV['TBAI_BIZKAIA_P12_PATH'];
805+
$certPassword = $_ENV['TBAI_BIZKAIA_PRIVATE_KEY'];
806+
$privateKey = PrivateKey::p12($certFile);
807+
808+
$signedFilename = tempnam(__DIR__ . '/../../__files/signedXmls', 'signed-');
809+
rename($signedFilename, $signedFilename . '.xml');
810+
$signedFilename = $signedFilename . '.xml';
811+
812+
$json = json_decode($this->getFilesContents('tbai-sample-with-multiple-same-vat.json'), true);
813+
$json['invoice']['header']['invoiceNumber'] = (string)time();
814+
sleep(1);
815+
816+
$ticketbai = TicketBai::createFromJson($this->ticketBaiMother->createBizkaiaVendor(), $json);
817+
$ticketbai->sign($privateKey, $certPassword, $signedFilename);
818+
819+
$endpoint = new Api(TicketBai::TERRITORY_BIZKAIA, true, true);
820+
$response = $endpoint->submitInvoice($ticketbai, $privateKey, $certPassword, self::SUBMIT_RETRIES, self::SUBMIT_RETRY_DELAY);
821+
822+
$this->assertFalse($response->isCorrect());
823+
$this->assertFalse($response->isDelivered());
824+
825+
$this->assertIsArray($response->headers());
826+
$this->assertArrayHasKey('eus-bizkaia-n3-tipo-respuesta', $response->headers());
827+
}
828+
763829
}

tests/Barnetik/Tbai/Api/Gipuzkoa/EndpointTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,4 +691,39 @@ public function test_sending_duplicated_invoice_number_returns_duplicated_error(
691691
$this->assertFalse($response->isDelivered());
692692
$this->assertFalse($response->isCorrect());
693693
}
694+
695+
public function test_TicketBai_response_headers_can_be_retrieved(): void
696+
{
697+
$certFile = $_ENV['TBAI_GIPUZKOA_P12_PATH'];
698+
$certPassword = $_ENV['TBAI_GIPUZKOA_PRIVATE_KEY'];
699+
$privateKey = PrivateKey::p12($certFile);
700+
701+
$ticketbai = $this->ticketBaiMother->createGipuzkoaTicketBai();
702+
$signedFilename = tempnam(__DIR__ . '/../../__files/signedXmls', 'signed-');
703+
rename($signedFilename, $signedFilename . '.xml');
704+
$signedFilename = $signedFilename . '.xml';
705+
706+
$ticketbai->sign($privateKey, $certPassword, $signedFilename);
707+
708+
$endpoint = new Endpoint(true, true);
709+
710+
$response = $endpoint->submitInvoice($ticketbai, $privateKey, $certPassword, self::SUBMIT_RETRIES, self::SUBMIT_RETRY_DELAY);
711+
712+
$responseFile = tempnam(__DIR__ . '/../../__files/responses', 'response-');
713+
file_put_contents($responseFile, $response->content());
714+
715+
if (!$response->isCorrect()) {
716+
echo "\n";
717+
echo "VatId / IFZ / NIF: " . $_ENV['TBAI_GIPUZKOA_ISSUER_NIF'] . "\n";
718+
echo "Date:" . date('Y-m-d H:i:s') . "\n";
719+
echo "IP: " . file_get_contents('https://ipecho.net/plain') . "\n";
720+
echo "Sent file: " . $endpoint->debugData(AbstractTerritory::DEBUG_SENT_FILE) . "\n";
721+
echo "Signed file: " . basename($signedFilename) . "\n";
722+
echo "Main error message: " . $response->mainErrorMessage() . "\n";
723+
echo "Response file: " . basename($responseFile) . "\n";
724+
}
725+
726+
$this->assertIsArray($response->headers());
727+
}
728+
694729
}

tests/Barnetik/Tbai/__files/tbai-rectification-sample.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
{
3838
"invoiceNumber": "1707477547",
3939
"sentDate": "09-02-2024",
40-
"serie": "TESTSERIE82"
40+
"series": "TESTSERIE82"
4141
}
4242
]
4343
},

0 commit comments

Comments
 (0)