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

使用WhatsApp Cloud API上传本地文件遇OAuthException错误求助

问题分析与解决方案

你的核心问题是本地文件上传的cURL请求格式错误,导致WhatsApp Cloud API无法正确解析文件数据。以下是具体问题点和修复方案:

问题根源

  1. 旧版文件上传语法失效:PHP 5.5及以上版本已废弃用@前缀指定文件的方式,需改用CURLFile类处理文件上传。
  2. POST数据格式错误:使用http_build_query()会将POST数据编码为application/x-www-form-urlencoded,但文件上传需要multipart/form-data格式——直接传递数组给CURLOPT_POSTFIELDS时,cURL会自动处理为正确的多部分表单格式。
  3. 缺少必填的type字段:API要求明确指定文件的MIME类型,你的请求遗漏了该字段。

修复后的代码

$this->endpoint = 'PHONE_NUMBER_ID/media';
$this->config->default_access_token = 'XXXXXXXX';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/v14.0/'.$this->endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

// 使用CURLFile替代旧的@语法,指定文件路径与MIME类型
$pdfFile = new CURLFile('/var/www/html/6218062.pdf', 'application/pdf');

$post = array(
    'file' => $pdfFile,
    'messaging_product' => 'whatsapp',
    'type' => 'application/pdf' // 添加必填的文件类型字段
);
// 直接传递数组,无需用http_build_query处理
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

$headers = array();
$headers[] = 'Authorization: Bearer '.$this->config->default_access_token;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);

// 检查cURL自身错误(可选,用于调试)
if(curl_errno($ch)){
    echo 'CURL错误:' . curl_error($ch);
}

print_r($result);
curl_close($ch);

额外检查项

  • 确认本地文件/var/www/html/6218062.pdf存在,且PHP进程拥有读取权限(可通过is_readable('/var/www/html/6218062.pdf')验证)。
  • 确保你的access token拥有whatsapp_business_messaging权限,且电话号ID填写正确。
  • 若仍报错,可开启cURL调试模式查看请求详情:
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:36:26