JsonRpcExceptionHandler.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Exception\Handler;
  4. use http\Env;
  5. use Hyperf\Config\Annotation\Value;
  6. use Hyperf\Contract\ConfigInterface;
  7. use Hyperf\ExceptionHandler\ExceptionHandler;
  8. use Hyperf\HttpMessage\Stream\SwooleStream;
  9. use Hyperf\Context\ApplicationContext;
  10. use Psr\Http\Message\ResponseInterface;
  11. use Throwable;
  12. use function Hyperf\Support\env;
  13. class JsonRpcExceptionHandler extends ExceptionHandler
  14. {
  15. /**
  16. * @Value("app_name")
  17. * @var $appName
  18. */
  19. public function handle(Throwable $throwable, ResponseInterface $response)
  20. {
  21. $responseContents = $response->getBody()->getContents();
  22. $responseContents = json_decode($responseContents, true);
  23. if (!empty($responseContents['error'])) {
  24. $port = null;
  25. $config = ApplicationContext::getContainer()->get(ConfigInterface::class);
  26. $servers = $config->get('server.servers');
  27. foreach ($servers as $k => $server) {
  28. if ($server['name'] == 'jsonrpc-http') {
  29. $port = $server['port'];
  30. break;
  31. }
  32. }
  33. $app_name = env("APP_NAME");
  34. $responseContents['error']['message'] .= " - {$app_name}:{$port}";
  35. }
  36. $data = json_encode($responseContents, JSON_UNESCAPED_UNICODE);
  37. return $response->withStatus(200)->withBody(new SwooleStream($data));
  38. }
  39. public function isValid(Throwable $throwable): bool
  40. {
  41. return true;
  42. }
  43. }