ClientApiResponse.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Helpers;
  3. use Illuminate\Http\JsonResponse;
  4. use Illuminate\Http\Request;
  5. use Log;
  6. trait ClientApiResponse
  7. {
  8. private static $client;
  9. public function __construct(Request $request)
  10. {
  11. if (str_contains($request->userAgent(), 'bob_vpn')) {
  12. self::$client = 'bob';
  13. }
  14. }
  15. public function setClient($client)
  16. {
  17. self::$client = $client;
  18. }
  19. public function succeed($data = null, $addition = null, $codeResponse = ResponseEnum::HTTP_OK): JsonResponse
  20. {
  21. return $this->jsonResponse(1, $codeResponse, $data, $addition);
  22. }
  23. private function jsonResponse($status, $codeResponse, $data = null, $addition = null): JsonResponse
  24. {
  25. [$code, $message] = $codeResponse;
  26. $code = $code > 1000 ? (int) ($code / 1000) : $code;
  27. if (self::$client === 'bob') { // bob 客户端 返回格式
  28. $result = ['ret' => $status, 'msg' => $message, 'data' => $data];
  29. if (isset($addition)) {
  30. $result = array_merge($result, $addition);
  31. }
  32. } else { // ProxyPanel client api 规范格式
  33. if (isset($data, $addition) && is_array($data)) {
  34. $data = array_merge($data, $addition);
  35. }
  36. $result = ['status' => $status ? 'success' : 'fail', 'code' => $code, 'message' => $message, 'data' => $data ?? $addition];
  37. }
  38. return response()->json($result, $code, ['content-type' => 'application/json']);
  39. }
  40. public function failed($codeResponse = ResponseEnum::HTTP_ERROR, $data = null, $addition = null): JsonResponse
  41. {
  42. return $this->jsonResponse(0, $codeResponse, is_array($data) ? $data[0] : $data, $addition);
  43. }
  44. }