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

Laravel调用WHMCS API获取产品时出现Trying to get property 'name' of non-object错误

解决Laravel调用WHMCS API时的「Trying to get property 'name' of non-object」错误

嘿,这个错误我太熟了!本质上就是你把数组当成对象来访问了,咱们一步步来捋清楚:

首先先看你拿到的WHMCS API返回的核心结构(我把关键部分拎出来):

"products": {
  "product": [
    {
      "pid": "1",
      "name": "super lite",
      // ... 其他字段省略
    }
  ]
}

注意看product后面的[ ]——这说明它是一个数组,哪怕里面只有一个产品,WHMCS也会用数组格式返回。如果你直接写$response->products->product->name,自然会报错,因为product是数组,不是单个对象,根本没有直接的name属性。

接下来给你两种常见的解决方式,对应Laravel里不同的JSON解析场景:

方式一:如果API返回解析成了数组(比如用Laravel Http客户端的json()方法)

// 假设你用Laravel的Http客户端请求WHMCS API
$response = Http::post('你的WHMCS API地址', $requestParams)->json();

// 先判断产品数组是否非空,再访问第一个产品的name
if (!empty($response['products']['product'])) {
    $firstProductName = $response['products']['product'][0]['name'];
}

// 或者遍历所有产品
foreach ($response['products']['product'] as $product) {
    echo $product['name'];
}

方式二:如果API返回解析成了对象(比如用json_decode()默认参数)

// 假设$apiRawResponse是API返回的原始JSON字符串
$response = json_decode($apiRawResponse);

// 先做多层判断,确保product数组存在且不为空
if (isset($response->products->product) && is_array($response->products->product) && count($response->products->product) > 0) {
    // 取第一个产品的name
    $firstProductName = $response->products->product[0]->name;

    // 或者遍历所有产品
    foreach ($response->products->product as $product) {
        echo $product->name;
    }
} else {
    // 处理没有产品的情况,避免触发新的错误
    echo "暂无可用产品";
}

最后提个小建议:不管什么时候访问嵌套的API返回数据,最好先做存在性判断(比如isset()或empty()),避免因为API返回结构变化(比如没有产品时product可能为null)导致新的报错。

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:46:27