Barnetik/tbai-php-lib

No response from server

Closed this issue · 2 comments

Hola, soy un poco novato en estas cosas, je je. De momento estoy intentando hacer funcionar un "test" para ver que funciona y luego ya dedicar el tiempo necesario a pulirlo y ponerlo bien. Picando de un sitio, etc... voy consiguendo cosas.

Tengo esto codigo de test:

<?php
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../vendor/barnetik/ticketbai/src/Barnetik/Tbai/TicketBai.php';

$ticketBaiMotherPath = __DIR__ . '/../vendor/barnetik/ticketbai/tests/Barnetik/Tbai/Mother/TicketBaiMother.php';
require_once $ticketBaiMotherPath;

$ticketBaiMother = new \Test\Barnetik\Tbai\Mother\TicketBaiMother();

//CIF y Razon Social que me han dado desde TicketBai para el entorno de pruebas. Datos del interesado para el modelo 240
$nif = "A9XXXXXX8"; 
$issuer = "wXXXXXXXXXXXXXXXXXXXXXXXXXR";

//Del fichero 1.0.6 del entorno de pruebas en Bizkaia. https://www.batuz.eus/fitxategiak/batuz/lroe/batuz_lroe_entorno_pruebas_empresas_desarrolladoras_v1_0_6.pdf
$license = "TBAIBI00000000PRUEBA";
$developer = "A99800005";
$appName = "SOFTWARE GARANTE TICKETBAI PRUEBA";
$appVersion =  "1.0";
$selfEmployed = false;

// Crea un TicketBai usando la función createTicketBai
$tBai = $ticketBaiMother->createTicketBai($nif, $issuer, $license, $developer, $appName, $appVersion, \Barnetik\Tbai\TicketBai::TERRITORY_BIZKAIA, $selfEmployed);

// Imprime información del TicketBai
echo "Información del TicketBai:" . "<br>";
echo "NIF: " . $tBai->issuerVatId(). "<br>";
echo "Emisor: " . $tBai->issuerName() . "<br>";
echo "Territorio: " . $tBai->territory() . "<br>";
echo "¿Es autónomo?: " . ($tBai->selfEmployed() ? 'Sí' : 'No') . "<br>";

$signedFilename = tempnam(__DIR__ , 'signed-');
rename($signedFilename, $signedFilename . '.xml');
$signedFilename = $signedFilename . '.xml';
$certFile = 'EntitateOrdezkaria_RepresentanteDeEntidad.p12';
$crtf = file_get_contents($certFile);
$certPassword = 'IZDesa2021';
$privateKey = \Barnetik\Tbai\PrivateKey::p12($certFile);
$tBai->sign($privateKey, $certPassword, $signedFilename);
$endpoint = new Barnetik\Tbai\Api\Bizkaia\Endpoint(true, true); //using Barnetik\Tbai\Api\Bizkaia\Endpoint for Bizkaia
$response = $endpoint->submitInvoice($tBai,$privateKey,$certPassword, 3, 3);
dump($response);
?>

Pero la respuesta que obtengo es: Fatal error: Uncaught Exception: No response from server

Si introduzco en un navegador web (chrome) esta url, obtengo esta respuesta (antes he instalado en el pc el certificado 'EntitateOrdezkaria_RepresentanteDeEntidad.p12'):

https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena, recibo:

{"developerMessage":"javax.ws.rs.NotAllowedException: RESTEASY003650: No resource method found for GET, return 405 with Allow header ..........................

Algún consejo? Gracias.

Hola, el error encontrado era puesto que el fichero $certFile no está bien definido en cuanto al path.

Quizás seria conveniente en la funcion doRequest de '\src\Barnetik\Tbai\Api\AbstractTerritory.php' que en lugar de

                $curl = curl_init();
                curl_setopt_array($curl, $this->getOptArray($request, $privateKey, $password));
                $response = curl_exec($curl);
                list($status, $headers, $content) = $this->parseCurlResponse($response, $curl);
                curl_close($curl);
                return $this->response($status, $headers, $content);

poner algo de esto:

                $curl = curl_init();
                curl_setopt_array($curl, $this->getOptArray($request, $privateKey, $password));
                $response = curl_exec($curl);
                if(curl_errno($curl)){
                    throw new Exception(curl_error($curl));
                }
                list($status, $headers, $content) = $this->parseCurlResponse($response, $curl);
                curl_close($curl);
                return $this->response($status, $headers, $content);

O similar.
Se puede cerrar este issue pero quería aportar esto por si a alguien le ayuda, y por si se quiere cambiar el codigo principal

Aupa,

probablemente teníamos que haber hecho este cambio antes pero ya hemos añadido ese control al código. Siento la demora.

Ahora el código lanza una excepción con el código de error y el mensaje asociado si curl devuelve un error

Eskerrik asko por la propuesta.