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

使用WhatsApp Business Media API获取图片时PHP Curl请求报错

WhatsApp Media API PHP请求报错排查

问题描述

我正在使用WhatsApp Media API通过Webhooks获取用户发送给企业号的图片,在Postman中可正常获取图片ID、URL及图片内容,但将Postman生成的Curl请求转为PHP代码后,执行时始终出现Facebook错误:

抱歉,出现了问题。我们正在处理,会尽快修复。
但该请求在Postman中运行正常,请问我哪里操作有误?

用户提供的PHP代码:

<?php
$ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.16 (KHTML, like Gecko) \
Chrome/24.0.1304.0 Safari/537.16';
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'Image_URL_from_Api',
  CURLOPT_USERAGENT => $ua,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer My_Token'
  ),
));

$response = curl_exec($curl);
curl_close($curl);
echo $response;

问题排查及修复方案

  • User-Agent格式错误:代码中User-Agent字符串的换行转义符\会导致curl发送的请求头部内容异常,Postman使用的是完整单行的User-Agent,而PHP中的转义换行会触发Facebook的验证拦截。
    修复:将User-Agent改为完整单行,移除转义符:

    $ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.16 (KHTML, like Gecko) Chrome/24.0.1304.0 Safari/537.16';
    
  • 冗余的GET请求设置:对于GET请求,curl默认会使用GET方法,手动设置CURLOPT_CUSTOMREQUEST => 'GET'属于冗余操作,可能导致请求格式异常。
    修复:移除该行设置。

  • 占位符未替换:确认代码中的Image_URL_from_Api和My_Token已经替换为实际有效的图片URL和API令牌,Postman中使用的是真实值,但PHP代码若保留占位符必然报错。

  • SSL验证建议:虽然关闭CURLOPT_SSL_VERIFYPEER不是报错直接原因,但生产环境建议开启该验证,避免安全风险。

修改后的完整代码:

<?php
$ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.16 (KHTML, like Gecko) Chrome/24.0.1304.0 Safari/537.16';
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '实际的图片URL',
  CURLOPT_USERAGENT => $ua,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_SSL_VERIFYPEER => true, // 生产环境建议开启
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer 你的有效Token'
  ),
));

$response = curl_exec($curl);
// 添加curl错误排查,方便定位问题
if(curl_errno($curl)){
    echo 'Curl错误:' . curl_error($curl);
}
curl_close($curl);
echo $response;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:00:50