本地正常的WhatsApp Cloud API部署到服务器后失效(Laravel环境)
WhatsApp Cloud API部署后报错400的排查方案
本地用Laravel编写的sendWithWhatsapp方法调用WhatsApp Cloud API发送验证消息一切正常,但部署到服务器后返回400错误:
HTTP请求返回状态码400: {"error":{"message":"Unsupported post request. Object with ID '114965591551646' does not exist, cannot be loaded due to (truncated...)
方法代码如下:
public static function sendWithWhatsapp($to, $code) { $phoneId = '114965591551646'; $payload = [ 'messaging_product' => 'whatsapp', 'to' => $to, "type" => "template", "template" => [ "name" => "sms_verification", "language" => [ "code" => "en" ], "components" => [[ "type" => "body", "parameters" => [[ "type" => "text", "text" => $code ]] ]] ] ]; return Http::withToken(config('app.whatsapp_bearer')) ->post('https://graph.facebook.com/v16.0/' . $phoneId . '/messages', $payload) ->throw()->json(); }
排查与修复步骤
- 核对服务器的Bearer Token:本地正常说明本地的
whatsapp_bearer配置没问题,服务器上要检查.env里对应的配置项是否和本地完全一致,有没有拼写错误、多余空格。另外要确认这个Token是否有权限访问线上的Phone ID,部分测试Token仅支持本地环境使用。 - 检查Phone ID的有效性:报错里的
114965591551646可能是测试环境的Phone ID,线上需要换成正式WhatsApp Business Account绑定的ID。登录Meta Business Manager,确认线上用的Phone ID正确,且该ID已完成验证、绑定到对应应用。 - 添加服务器IP到Meta白名单:Meta的Graph API可能限制了请求来源IP,本地IP在白名单但服务器IP不在。进入Meta开发者平台的应用设置,在
IP Allowlist中添加服务器的公网IP。 - 确认API版本与模板状态:代码用的是v16.0,检查服务器请求是否实际使用该版本,避免代理或缓存篡改版本号。同时确认
sms_verification模板已通过线上审核,语言、参数配置和代码完全匹配,测试模板无法用于正式环境。 - 测试服务器网络连通性:在服务器上执行
curl -I https://graph.facebook.com/v16.0/114965591551646,看是否能正常返回响应。如果不通,检查服务器防火墙、安全组是否放行HTTPS请求到Facebook域名。
内容的提问来源于stack exchange,提问作者Inferno
相关产品推荐
相关产品推荐

