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

Laravel中RajaOngkir接口返回数据的目标对象提取问题

问题:无法从第三方运费API提取正确的数据对象

我最近在做一个基于RajaOngkir的运费计算配送功能,所有编码、价格这类数据都存在第三方平台,本地数据库没存。现在遇到个麻烦事——我没法从API返回的结果里提取到需要的数据对象!下面是我的代码和调试情况:

控制器代码

public function index() { 
    $province = RajaOngkir::Provinsi()->all(); // 这部分返回的数据是正常的(对应我截图里的dd结果)
    $cost = RajaOngkir::Cost([ 
        'origin' => 501, // 出发城市ID
        'destination' => 114, // 目标城市ID
        'weight' => 1000, // 重量(单位:克)
        'courier' => 'jne', // 快递公司编码(jne/tiki/pos)
    ])->get(); 
    return view('welcome', compact('province', 'cost')); 
}

Blade视图代码

@foreach($cost as $option) 
    {{$option['code']}} <br> 
    {{$option['name']}} 
@endforeach

调试情况

我试着在循环里加了{{dd($option)}}查看单条数据的结构,结果发现循环返回的内容和调试看到的结构完全对不上,就是拿不到我要的code和name字段。


可能的解决方案

RajaOngkir的Cost API返回的是嵌套层级结构,你直接拿到的$cost其实是包含顶层响应节点的完整数据,而不是直接的快递选项列表。你需要先定位到正确的数据层级再进行遍历。

步骤1:先确认完整的响应结构

先在控制器里打印整个$cost的结构,搞清楚数据嵌套关系:

public function index() { 
    $province = RajaOngkir::Provinsi()->all();
    $cost = RajaOngkir::Cost([ 
        'origin' => 501,
        'destination' => 114,
        'weight' => 1000,
        'courier' => 'jne',
    ])->get(); 
    dd($cost); // 打印完整响应,确认层级
    return view('welcome', compact('province', 'cost')); 
}

根据RajaOngkir官方的返回格式,快递选项列表通常在$cost['rajaongkir']['results'][0]['costs']这个层级里(results里的第一个元素对应你指定的快递公司,costs就是具体的配送服务选项)。

步骤2:提取正确的数据集

修改控制器代码,把真正的配送选项数组提取出来再传给视图:

public function index() { 
    $province = RajaOngkir::Provinsi()->all();
    $response = RajaOngkir::Cost([ 
        'origin' => 501,
        'destination' => 114,
        'weight' => 1000,
        'courier' => 'jne',
    ])->get(); 
    // 提取配送服务选项列表(根据实际打印的结构调整层级)
    $cost = $response['rajaongkir']['results'][0]['costs'];
    return view('welcome', compact('province', 'cost')); 
}

步骤3:调整视图的字段访问

RajaOngkir的costs数组里,每个选项的编码是service字段,名称是description字段,所以视图要改成:

@foreach($cost as $option) 
    {{$option['service']}} <br> 
    {{$option['description']}} 
@endforeach

如果你的SDK返回的是对象而不是数组,那就要用对象属性访问的方式,比如$option->service和$option->description。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:41:06