giansalex / peru-consult-api

API de Consulta de DNI y RUC - Perú (Docker, GraphQL)
https://giansalex.github.io/peru-consult-docs/
MIT License
75 stars 39 forks source link

Error al ejecutar consulta RUC #35

Closed wmedia closed 2 years ago

wmedia commented 2 years ago

Se presenta un error al probar el api.

http://localhost:8080/api/v1/ruc/20131312955?token=abcxyz

TypeError: Return value of App\Kernel::handle() must be an instance of Symfony\Component\HttpFoundation\Response, null returned

at src/Kernel.php:56 at App\Kernel->handle() (public/index.php:20)

PHP v7.4

Revisando el código encuentro que en peru-consult-api/src/Controller/RucController.php:

esta función retorna null

public function index($ruc): PromiseInterface { return $this->service ->get($ruc) ->then(function (?Company $company) {

            if (!$company) {
                throw new BadRequestHttpException();
            }
            return new JsonResponse($company);

        });
}
giansalex commented 2 years ago

Cuando la consulta no se realiza exitosamente (tal vez problemas en el servicio de SUNAT), debe retornar un error, si el RUC es válido se podría volver a intentar.

wmedia commented 2 years ago

Cuando la consulta no se realiza exitosamente (tal vez problemas en el servicio de SUNAT), debe retornar un error, si el RUC es válido se podría volver a intentar.

Hice algunas pruebas tratando de hacer un debug

en : peru-consult-api/src/Controller/RucController.php lo dejé así y muestra los datos del ruc

public function index($ruc) { $this->service ->get($ruc) ->then(function(?Company $response){ print_r($response); } ); die(); }

/ Peru\Sunat\Company Object ( [ruc] => 20131312955 [razonSocial] => SUPERINTENDENCIA NACIONAL DE ADUANAS Y DE ADMINISTRACION TRIBUTARIA - SUNAT [nombreComercial] => - [telefonos] => Array ( ) [tipo] => INSTITUCIONES PUBLICAS [estado] => ACTIVO / Quizá sea algo en return de la función.

giansalex commented 2 years ago

Que versión utilizas, y de PHP? porque si fuera un problema en el código, otros usuarios lo habrían reportado.

wmedia commented 2 years ago

uso PHP FPM 7.4 y apache 2.4

Por lo que he estado chekando al parecer el problema en mi caso va acá:

public function handle(Request $request, int $type = HttpKernelInterface::MASTER_REQUEST, bool $catch = true) { $this->boot(); $loop = $this->getContainer()->get('reactphp.event_loop'); $promise = $this->handleAsync($request); $response = null;

    $promise->then(function ($result) use (&$response) {
        **$response = $result;**
    });

    $loop->run();

    return $response;
}

$response no llega a ser asignado por eso devuelve null, no se si les haya pasado a otros usuarios pero en mi caso el método then no llega a ejecutarse y se va directo a al return; aún no entiendo bien cómo funciona ReactPhp y DriftPhp quizá sea cuestión de mi configuración en el php, quizá puedas enviar tu configuración del PHP.

giansalex commented 2 years ago

Hay una extension que requiere driftPhp (pcntl) pero no esta disponbile en windows, el ultimo código que enviaste solo se agregó para dar soporte a Windows, pero para linux se puede eliminar aplicando estos patchs.

git apply docker/drift-kernel.patch
git apply docker/drift-adapter.patch
wmedia commented 2 years ago

Borré e volví a clonar el repo y funcionó. No entiendo que pudo haber ocasionado el error en el primer intento.