尝试在 postman 上模拟 POST 请求以获取 API 的回调函数。它来自将数据发布给我的外部 API,因此我没有在回调函数中包含 return。
这是我的路线:
Route::post('api-callback','APIController@callback')->name('api-callback');
Controller :
public function callback(Request $request){
Log::info('callback function is called');
$response = request()->all();
Log::info($response);
if($request->status == 1){
//store transaction details
$transaction = new Transaction();
$transaction->user_id = auth()->id();
$transaction->billcode = $request->billcode;
$transaction->transaction_id = $request->refno;
$transaction->amount = $request->amount;
$transaction->save();
//update new credit balance for user
$user_credit = UserInfo::where('user_id',auth()->id());
$user_credit->credit += $request->amount;
$user_credit->save();
}
预期结果是返回1(成功)。几天前我测试了它,它按预期工作,但今天我再次尝试它,它返回了我的 HTML 文本,没有错误。状态也是200。截图仅供引用。
我应该如何调试这个?
最佳答案
默认情况下,Laravel 返回 html 格式的响应 - 对于 json - 客户端必须设置 Header Accept:application/json
我创建了中间件来解决这个问题 - 因为在我看来,如果您仅支持 json 模式,api 在所有情况下都必须返回 json。
应用程序/Http/Middleware/ForceJsonResponse.php
<?php
namespace App\Http\Middleware;
use Closure;
class ForceJsonResponse
{
public function handle($request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}
应用程序/Http/Kernel.php
...
protected $routeMiddleware = [
//other middlewares
'json' => \App\Http\Middleware\ForceJsonResponse::class,
];
...
protected $middlewareGroups = [
'api' => [
//other middlewares
'json'
],
];
...
关于laravel - postman 返回 HTML 而不是 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68408513/