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

Curl转PHP遇过滤问题:无法获取带筛选条件的Bling API JSON数据

问题:添加过滤条件后无法获取Bling API的JSON数据

我在把Curl转成PHP代码时遇到问题,需要获取JSON数据并做过滤。不加过滤能正常拿到全部数据,但加了过滤条件就无法访问数据了。

可正常获取全部数据的代码

<?php
$apikey = 'myapikey';
$outputType = 'json';
$url = 'https://bling.com.br/Api/v2/contasreceber/' . $outputType;
$retorno = executeGetOrder($url, $apikey);
echo $retorno;
function executeGetOrder($url, $apikey){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url . '&apikey=' . $apikey);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($curl_handle);
    curl_close($curl_handle);
    return $response;
    
}
?>

添加过滤条件后无法运行的代码

根据Bling的API文档,我尝试添加过滤条件,但代码无法正常工作:

<?php
$apikey = 'myapikey';
$outputType = 'json';
$url = 'https://bling.com.br/Api/v2/contasreceber/' . $outputType;
$retorno = executeGetOrder($url, $apikey);
echo $retorno;
function executeGetOrder($url, $apikey){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url . '&apikey=' . $apikey);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');

    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, 'filters=dataEmissao[01/01/2022 TO 05/02/2022]; situacao[Aberto]');

    $headers = array();
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);

    $response = curl_exec($curl_handle);
    curl_close($curl_handle);
    return $response;
    
}
?>

问题原因与修复方案

问题核心在于GET请求不能通过POST请求体传递参数。Bling的这个接口是GET类型,过滤条件需要作为URL的查询参数传递,而非放在POSTFIELDS里。

修复后的代码如下:

<?php
$apikey = 'myapikey';
$outputType = 'json';
// 对过滤条件做URL编码,避免特殊字符导致解析错误
$filters = urlencode('dataEmissao[01/01/2022 TO 05/02/2022]; situacao[Aberto]');
// 直接将所有参数拼接到URL中
$url = "https://bling.com.br/Api/v2/contasreceber/$outputType?apikey=$apikey&filters=$filters";
$retorno = executeGetOrder($url);
echo $retorno;

function executeGetOrder($url){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    
    // 捕获curl错误,方便排查问题
    if(curl_errno($curl_handle)){
        echo 'Curl错误:' . curl_error($curl_handle);
    }
    
    $response = curl_exec($curl_handle);
    curl_close($curl_handle);
    return $response;
}
?>

关键修复点:

  • 将filters参数直接拼入URL,并用urlencode()处理特殊字符
  • 移除了CURLOPT_POSTFIELDS和不必要的Content-Type请求头
  • 简化函数参数,直接传递完整URL更清晰
  • 添加curl错误捕获逻辑,便于后续排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:40:19