【发布时间】:2016-11-18 00:06:11
【问题描述】:
我有一个调用第三方 API 并返回其响应的路由。该路由可以将 ID 作为参数,如下所示:/my/route/{id}。
当我请求 /my/route/1 时,我得到 200 成功,但当我请求 /my/route/2、/my/route/3、/my/route/4 等时,我得到 500 错误。
有趣的是,我总是得到正确的响应体。所以 200 和 500 响应都返回了我需要的数据。
我的问题是在这里触发getSponsor(..):
<?php
namespace App\Http\Controllers\Matrix;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class SponsorReadingController extends Controller
{
/**
* SponsorReadingController constructor.
*/
public function __construct()
{
$this->cookieJar = app('MatrixCookieJar');
$this->client = app('GuzzleClientForMatrix');
}
public function getSponsor($sponsorId, Request $request)
{
// TODO: Refactor this monstrous function
if (!AuthController::isAlreadyLoggedIn($request)) {
$loginRes = AuthController::loginToMatrixApi($this->cookieJar);
if ($loginRes->getStatusCode() === 200) {
$sessionId = AuthController::getSessionIdFromResponse($loginRes);
} else {
return $loginRes;
}
} else {
$sessionId = null;
AuthController::setAuthCookie(
$this->cookieJar, $request->cookie('matrix_api_session')
);
}
$respData = [
'error' => null,
'message' => null,
'data' => json_decode(
$this->client->get(
'/admin/sponsor/detail',
[
'query' => ['sponsorId' => $sponsorId],
'cookies' => $this->cookieJar,
'allow_redirects' => false
]
)->getBody())->response
];
return $this->handleResponse($respData, $sessionId);
}
/**
* Handle the response with the provided data and
* cookie value.
*
* @param array $respData
* @param string $cookieVal
* @return Response
*/
public function handleResponse($respData, $cookieVal)
{
if (!empty($cookieVal)) {
return response()->json($respData)->withCookie(
cookie('matrix_api_session', $cookieVal, 29, '/matrix/api')
);
}
return response()->json($respData);
}
编辑:如果我在handleResponse(...) 中使用dd($res) 而不是return $res,我会得到一个200 状态码,很奇怪。
【问题讨论】:
-
那么是句柄响应错误还是getSponsor错误?当 getSponsor 尝试从 handleResponse 返回您的结果时,似乎可能会发生一些事情。
-
好吧
getSponsor()最终返回handleResponse()。有趣的是,如果我转储状态代码,我总是在所有呼叫中得到 200。我的脑袋要坏了。 -
如果在发送到 handleResponse 之前转储 $respData 会发生什么?您提到了一些 ID 有效,而另一些则无效。另外,从 $res 返回的唯一结果是 200 响应吗?刚才测试时,我得到了一个响应对象,其中包含我传递给 Response() 的数据。
-
@Daniel
dd($respData)给了我一个多维数组。就像我在我的 OP 编辑中提到的那样,如果我dd()响应而不是返回它,它会返回 200 成功,所有这些。
标签: php json laravel response http-status-codes