Не удается правильно отформатировать текст.
Кто знает решение проблемы, может помочь
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Початок виконання process_order.php
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Отримано товар із кошика: product_id = 4, image = 670436a2223c04.79809976.jpg
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Замовлення успішно створено. order_id = 20
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Товар успішно записано у замовлення: product_id = 4
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Запит до Telegram API -> {"inline_keyboard":[[{"text":" Написати клієнту","url":"https://t.me/oosadcuk_sasha"}],[{"text":" Набрати клієнта","url":"tel:+380983422429"}]]}
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Відповідь Telegram API: {"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Character '+' is reserved and must be escaped with the preceding '\\'"}
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Відповідь Telegram API: {"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Character '!' is reserved and must be escaped with the preceding '\\'"}
[31-Jan-2025 03:42:52 Europe/Kiev] DEBUG: Завершення process_order.php
<?php
include 'telegram_config.php';
// Функція для екранування тексту у MarkdownV2
function escapeMarkdownV2($text) {
$reserved = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!'];
foreach ($reserved as $char) {
$text = str_replace($char, '\\' . $char, $text);
}
return $text;
}
// Функція для перевірки валідності URL
function isValidUrl($url) {
$headers = @get_headers($url);
return $headers && strpos($headers[0], '200') !== false;
}
// Функція для відправки API-запиту через cURL
function sendTelegramRequest($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
error_log("ERROR: Не вдалося виконати запит до Telegram API. Помилка: " . curl_error($ch));
} else {
error_log("DEBUG: Відповідь Telegram API: " . $response);
}
curl_close($ch);
return json_decode($response, true);
}
// Функція для надсилання повідомлення магазину
function sendTelegramMessage($chat_id, $order_id, $name, $surname, $patronymic, $phone, $payment_method, $total_price, $delivery_office, $order_items, $comment, $telegram_username) {
$message = " *Нове замовлення на сайті!* \n\n";
$message .= " *ID замовлення:* _" . escapeMarkdownV2("\\#" . $order_id) . "_\n"; // Екранування #
$message .= " *ПІБ клієнта:* _" . escapeMarkdownV2("$surname $name $patronymic") . "_\n";
$message .= " *Контактний номер:* _" . escapeMarkdownV2($phone) . "_\n";
$message .= " *Спосіб оплати:* _" . escapeMarkdownV2($payment_method) . "_\n";
$message .= " *Загальна сума замовлення:* _" . escapeMarkdownV2(number_format($total_price, 2)) . " грн_\n";
$message .= " *Адреса доставки:* _" . escapeMarkdownV2($delivery_office) . "_\n\n";
if (!empty($comment)) {
$message .= " *Коментар до замовлення:*\n_" . escapeMarkdownV2($comment) . "_\n\n";
}
$message .= " *Перелік товарів:*\n";
foreach ($order_items as $item) {
$message .= " - *" . escapeMarkdownV2($item['product_name']) . "* (x" . $item['quantity'] . ")\n";
}
$message .= "\n⏰ *Час замовлення:* _" . escapeMarkdownV2(date("d.m.Y H:i")) . "_\n";
$message .= " *Перевірте систему для деталей замовлення!*\n";
// Формуємо кнопки
$buttons = [];
if (!empty($telegram_username) && strpos($telegram_username, '@') !== false) {
$telegram_username = trim(ltrim($telegram_username, '@')); // Прибираємо `@`
$buttons[] = [['text' => ' Написати клієнту', 'url' => "https://t.me/" . $telegram_username]];
}
if (!empty($phone)) {
$cleaned_phone = preg_replace('/\D/', '', $phone);
if (!empty($cleaned_phone)) {
$buttons[] = [['text' => ' Набрати клієнта', 'url' => "tel:+$cleaned_phone"]];
}
}
$reply_markup = !empty($buttons) ? json_encode(['inline_keyboard' => $buttons], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : null;
// Логування перед відправкою
error_log("DEBUG: Запит до Telegram API -> " . print_r($reply_markup, true));
// Отримуємо фото першого товару
$photo_url = !empty($order_items) && isset($order_items[0]['image']) ? 'https://chmotop57777.clio.chost.com.ua/uploads/' . $order_items[0]['image'] : null;
if ($photo_url && isValidUrl($photo_url)) {
sendTelegramPhotoWithCaption($chat_id, $photo_url, $message, $reply_markup);
} else {
sendTelegramTextMessage($chat_id, $message, $reply_markup);
}
// Надсилаємо гумористичне повідомлення
sendTelegramFunnyMessage($chat_id);
}
// Функція для надсилання текстового повідомлення
function sendTelegramTextMessage($chat_id, $message, $reply_markup = null) {
$url = "https://api.telegram.org/bot" . TELEGRAM_BOT_TOKEN . "/sendMessage";
$data = [
'chat_id' => $chat_id,
'text' => escapeMarkdownV2($message),
'parse_mode' => 'MarkdownV2'
];
if ($reply_markup) {
$data['reply_markup'] = $reply_markup;
}
sendTelegramRequest($url, $data);
}
// Функція для надсилання фото із підписом та кнопками
function sendTelegramPhotoWithCaption($chat_id, $photo_url, $caption, $reply_markup = null) {
$url = "https://api.telegram.org/bot" . TELEGRAM_BOT_TOKEN . "/sendPhoto";
$data = [
'chat_id' => $chat_id,
'photo' => $photo_url,
'caption' => escapeMarkdownV2($caption),
'parse_mode' => 'MarkdownV2'
];
if ($reply_markup) {
$data['reply_markup'] = $reply_markup;
}
sendTelegramRequest($url, $data);
}
// Функція для надсилання гумористичного повідомлення
function sendTelegramFunnyMessage($chat_id) {
sendTelegramTextMessage($chat_id, escapeMarkdownV2(" *Хустіш до клієнта!* \nГотуйте пакунок із любов'ю! "));
}
?>