You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Laravel中CURL请求在PHP7.2.34报错:Trying to get property on non-object

解决PHP 7.2中CURL请求后的“Trying to get property on non-object”错误

你的代码存在两个核心问题,导致在PHP7.2环境下触发错误:

  • 重复调用json_decode:第一次已经把CURL返回的字符串解析成了对象,第二次将这个对象传入json_decode,在PHP7.2中会返回null,后续访问$result->TransactionStatus自然会触发“非对象上获取属性”的错误。
  • 使用已废弃的CURLOPT_BINARYTRANSFER选项:该选项在PHP7.1之后已被弃用,CURLOPT_RETURNTRANSFER已经包含了它的功能,保留它可能在低版本PHP中引发潜在异常。

修正后的代码

$url = "some url";

$curlSession = curl_init();
// 设置请求URL
curl_setopt($curlSession, CURLOPT_URL, $url);
// 仅保留必要的返回选项,移除废弃参数
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
// 可选:添加超时设置,避免请求挂起
curl_setopt($curlSession, CURLOPT_TIMEOUT, 30);

// 执行请求并获取原始响应
$response = curl_exec($curlSession);

// 检查CURL请求是否失败
if (curl_errno($curlSession)) {
    $errorMsg = curl_error($curlSession);
    curl_close($curlSession);
    die("CURL请求失败: " . $errorMsg);
}

curl_close($curlSession);

// 检查响应是否为空
if (empty($response)) {
    die("请求无响应内容");
}

// 解析JSON,第二个参数控制返回类型(false=对象,true=数组)
$result = json_decode($response, false);

// 检查JSON解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败: " . json_last_error_msg());
}

// 安全访问属性,先判断属性是否存在
if (isset($result->TransactionStatus) && $result->TransactionStatus === "Paid") {
    echo "<br>" . $result->TransactionStatus;
} else {
    echo "<br>交易状态未支付或不存在";
}

关键修改说明

  1. 移除重复解析:直接解析CURL返回的原始字符串,无需二次调用json_decode。
  2. 删除废弃参数:去掉CURLOPT_BINARYTRANSFER,避免低版本PHP的兼容性问题。
  3. 增加错误处理:捕获CURL请求失败、响应为空、JSON解析失败的场景,提前终止流程并给出提示。
  4. 安全属性访问:用isset先判断属性是否存在,即使返回的JSON结构异常也不会触发错误。

内容的提问来源于stack exchange,提问作者Ali Yar Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:22:18