cf7 Telegram: ошибка 400 при отправке сообщения
Симптомы: При отправке сообщения из контактной формы, сообщение не отправляется в бота, а в логах появляется ошибка вида:
Request has failed with error 400: Bad Request
Изучив чуть плагин, нашел непосредственную функцию отправки сообщения, и чуть её дополнил:
private function request( $url, $args ) {
....
elseif ( $http_code == 400 ) :
error_log($response['body']);
Ошибка стала чуть вняетнее:
{«ok»:false,»error_code»:400,»description»:»Bad Request: can’t parse entities: Can’t find end of the entity starting at byte offset 289″}
Но ни сколько не понятнее… Стал рыть дальше. Отправка в wordpress осуществляется функцией:
wp_remote_post($url,$args)
Проверив аргументы, выяснил, что попадает внутрь именно то что нужно. Видимо портит данные, что-то глубже внутри функционала wordpress. Проверил концепцию заменив вызов этой функции своим велосипедом:
$params=["chat_id"=>$args["body"]["chat_id"],"text"=>$args["body"]["text"],];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
error_log($result);
curl_close($ch);
И оно заработало.. Ну так и оставил..