thegreenter / greenter

Facturación Electrónica - SUNAT - PE :four_leaf_clover:
https://greenter.dev
MIT License
269 stars 138 forks source link

Retorno de token #219

Closed lcarbajals closed 1 year ago

lcarbajals commented 1 year ago

Al generar el token, usando la funcion getToken(), del archivo greenter/ws/src/Api/ApiFactory.php, con el postman retorna el mensaje del cliente no autorizado, tal como se muestra:

image

Pero al usar la funcion, no valida el $result:

private function getToken(?string $clientId, ?string $secret, ?string $user, ?string $password): ?string { $tokenData = $this->store->get($clientId); if ($tokenData && $tokenData->getExpire() > $this->addSeconds(new DateTime(), 600)) { return $tokenData->getValue(); } $result = $this->api->getToken( 'password', 'https://api-cpe.sunat.gob.pe', $clientId, $secret, $user, $password ); //Faltaria: //Validar si cliente está autorizado //**throw new Exception('Cliente No autorizado'); //_Validar si resultado es vacio_ `//throw` new Exception('No se pudo obtener el token, intente en unos inutos');** $token = $result->getAccessToken(); $expire = $this->addSeconds(new DateTime(), $result->getExpiresIn()); $this->store->set($clientId, new BasicToken($token, $expire));

    return $token;
}

Ya que no valida ninguna de las opciones mencionadas, genera el siguiente error

image ya que intenta asignar un tiempo de expiracion en la linea: $this->addSeconds(new DateTime(), $result->getExpiresIn());

giansalex commented 1 year ago

Has revisado que HTTP code devuelve en Postamn? tal vez esta retornando 200 OK

lcarbajals commented 1 year ago

Cuando el cliente no está autorizado, retorna así el postman, pero el algoritmo en la funcion getToken, deja pasar porque no hay una validación si $result tiene valor o no image

giansalex commented 1 year ago

Deberia retornar una excepcion cuando el http code es 401, el problema debe estar en el generador de API.

De cualquier forma validar el result, sera la solucion mas rapida