我正在尝试使用 WhatsApp Cloud API 在 PHP 中发送模板消息,我正在努力解决一个简单的修复问题,但我已经盯着代码太久了,欢迎第二双眼睛来关注找出我哪里出错了。
我不断收到的错误消息是:
(#100) Param template['components'][0] must be a JSON object.
查看用于发送模板的 WhatsApp 文档,我可以看到我需要将组件/参数作为对象数组发送。
这是我当前的代码:
$var1 = array('type' => 'text', 'text' => $clientName);
$var2 = array('type' => 'text', 'text' => $data['meetingDate']);
$var3 = array('type' => 'text', 'text' => $data['meetingStart']);
$var4 = array('type' => 'text', 'text' => $data['meetingLocation']);
$data = [
"messaging_product" => "whatsapp",
"to" => $clientNumber,
"type" => "template",
"template" => array(
"name" => "brufton_meeting",
"language" => array(
"code" => "en_GB"
),
"components" => array("type" => "body", "parameters" => array($var1, $var2, $var3, $var4))
),
];
$whatsappData = json_encode($data, JSON_FORCE_OBJECT);
$whatsappHeader = array(
'Authorization: Bearer ' . {TOKEN},
'Content-Type: application/json'
);
$ch = curl_init("https://graph.facebook.com/v21.0/".$_SESSION['whatsappNumberID']."/messages");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $whatsappData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $whatsappHeader);
$resultWhatsApp = curl_exec($ch);
加载时,在我得到的 $whatsappData 上运行 print_r:
{"messaging_product":"whatsapp","to":"+447719303165","type":"template","template":{"name":"brufton_meeting","language":{"code":"en_GB"},"components":{"type":"body","parameters":{"0":{"type":"text","text":"Andrew Broughton"},"1":{"type":"text","text":"Monday 1st May 2023"},"2":{"type":"text","text":"11:30"},"3":{"type":"text","text":"https:\/\/zoom.us\/j\/7797022566"}}}}}
所以我可以看到参数没有被标记为对象并被添加为变量,我似乎无法纠正这个问题并且已经绕了一段时间现在错过了(很可能)明显的解决方案!
我已经使用没有变量的模板对此进行了测试,效果很好。我也仔细检查了模板和语言的拼写。只有当使用带有变量的模板时,我才会陷入困境,所以我有理由相信问题出在这个编码而不是身份验证问题上。
我解决了这个问题,结果证明我是对的,这是我的代码的错误。
我需要对 json_encode 的组件进行双重数组来创建对象
"components" => array(array("type" => "body", "parameters" => array($var1, $var2, $var3, $var4)))
我还关闭了“JSON_FORCE_OBJECT”标签,然后一切都按预期工作