Laravel 10:获取完整的 JSON API 响应(未截断)

Laravel 10: Get the full JSON API Response (not truncated)

提问人:Ivan Raposo 提问时间:11/17/2023 最后编辑:matiaslauritiIvan Raposo 更新时间:11/17/2023 访问量:44

问:

我已将我的应用程序与第三方应用程序集成以进行支付,关于成功付款,该应用程序能够接收完整的 API 响应(在下面共享)并成功插入数据库表,该问题被注意到不成功的付款,其中响应与成功的付款响应不同,我无法正确格式化 API 响应并插入数据库表,因为它发生在付款成功。所以,我想做的是:

  1. 在 Laravel 日志上获取完全不成功的 API 响应;
  2. 删除反斜杠,使响应结构成为成功的结构;
  3. 将不成功的响应插入到数据库表中。

成功的 API 响应

{"output_ResponseCode":"INS-0","output_ResponseDesc":"Request processed successfully","output_TransactionID":"vmo3kg298v4l","output_ConversationID":"99b0efe0007648eb96fd03aa1b2a4e1f","output_ThirdPartyReference":"FT15112023131748"}

API 响应失败

{\"output_ResponseCode\":\"INS-10\",\"output_ResponseDesc\":\"Duplicate Transaction\",\"output_TransactionID\":\"N/A\",\"output_Conve (truncated...)
"}

我已经尝试更改 Laravel 日志记录配置以将“max”选项设置为“5000”,删除反斜杠,但似乎我实现的方法无法正常工作,所以我没有想法。如果有人能分享一些光,我将不胜感激。

格式化不成功的 API 响应的方法

private function formatApiResponse($originalResponse)
{
    // Remove backslashes from the original response
    $formattedResponse = stripslashes($originalResponse);

    // Decode the formatted JSON response
    $decodedResponse = json_decode($formattedResponse, true);

    if (json_last_error() !== JSON_ERROR_NONE) {
        Log::channel('logs')->info('Failed to decode formatted API response JSON');
        throw new \Exception('Failed to decode formatted API response JSON');
    }

    return json_encode($decodedResponse);
}

将不成功的 API 响应插入数据库表的方法

private function insertUnsuccessfulApiResponse($response, $apiResponse, $id)
{
    // Insert API response into the database for unsuccessful transactions
    ApiResponsesMpesa::create([
        'status_code' => $response->getStatusCode(),
        'output_ConversationID' => 'N/A',
        'output_TransactionID' => 'N/A',
        'output_ResponseDesc' => $apiResponse['output_ResponseDesc'],
        'output_ResponseCode' => $apiResponse['output_ResponseCode'],
        'output_ThirdPartyReference' => 'N/A',
        'transformed_request_id' => $id,
    ]);

    Log::channel('logs')->info('API Response for Unsuccessful Transaction inserted successfully');
}
JSON Laravel 日志记录 截断

评论

1赞 brombeer 11/17/2023
从日志中获取响应而不使用从响应中收到的 JSON 的确切原因是什么?
0赞 brombeer 11/17/2023
我做对了吗,第三方支付提供商在成功付款时发送有效的 JSON,但在付款失败时发送并转义斜杠响应?你有没有联系过他们并指出这一点?如果他们不这样做,对每个人来说都会容易得多
0赞 Ivan Raposo 11/17/2023
@brombeer,是的,如果他们进行更改以删除不成功的响应结构中的斜杠会更容易,但是许多集成商已经在使用他们的 API,如上所述,因此进行此更改将影响所有人,此时他们进行此更改将影响他们拥有的所有集成,并且会一团糟
1赞 Snapey 11/17/2023
斜杠用于转义引号,因为您正在将响应作为普通字符串进行检查,而不是将其解析为 json - http 客户端应该为您执行此操作。
1赞 Ivan Raposo 11/17/2023
@brombeer看来你是对的,对不成功的 API 响应进行解码时出了点问题。非常感谢您协助确定问题。

答: 暂无答案