Клиент попросил сделать чтобы уведомления с формы шли ему в ВК, В принципе решений в сети много на PHP и JS. Но вот простого гайда по созданию данной функции в modx я не нашел.
Вот моё простое решение. Нам понадобиться получить от VK access token, Установить AjaxForm и Formit. Как ставить 2 последних рассказывать не буду.
Получаем access token от VK
- Создаем Тут приложение типа Standalone-приложение, с любым именем на ваш выбор. Из настроек приложения получаем ID приложения
- Правим ссылку
oauth.vk.com/authorize?client_id=0000000&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=offline,messages&response_type=token&v=5.37
Где client_id=0000000 вместо нулей пишем ID своего приложения.
И переходим по этой ссылке
- нас перенаправляет на страницу с предупреждением. И как раз тут из адресной строки копируем всё после access_token=
Делаем отправку формы в ВК через Formit, на примере простой формы
Вызываем сниппет AjaxForm. Я делал так чтобы форма приходила и на почту и в vk
// Вызов AjaxForm
[[AjaxForm?
&snippet=`FormIt`
&form=`form`
&hooks=`email, vk-message`
&emailSubject=`Заголовок сообщения для почты`
&emailTo=`Ваш email`
&validate=`name:required,phone:required`
]]
// Чанк form содержащий саму форму обратной связи
<form action="#" name="form" id="form">
<input type="text" name="name" placeholder="Ваше имя">
<input type="tel" name="phone" placeholder="Телефон">
<input type="submit" value="Продать авто">
</form>
Как можно заметить у сниппета AjaxForm в &hooks по мимо стандартного email (Который отвечает за отправку на почту) еще есть и vk-message. Вот его мы и создадим, он будет как раз отправлять нам форму в вк.
Создаем сниппет vk-message
<?php
//ID пользователя которому будут отсылаться сообщения
$user_id = "00000000";
//Сюда мы вводим наш токен. Полученный из ссылки.
$access_token= " sadascsdsadasdasfafaweasdsadasdasdasdasdasdsad";
//Версия VK API. Оставляем без изменений
$v = 5.37;
// Создаем переменную под текст нашего сообщения
$messages= "";
//Создаем массив под переменные, В нем будет текст сообщения
$arr = array();
$formName = $modx->getOption('formName', $formit->config, 'form-'.$modx->resource->get('id'));
$values = $hook->getValues();
//Задаем нашим input переменные
$name = $values['name'];
$phone = $values['phone'];
if($name){
$arr["Имя"] = $name;
}
if($phone){
$arr["Телефон"] = $phone;
}
// Собираем наш массив и добавляем в переменную messeges
foreach($arr as $key => $value) {
$messages .= $key.":".$value. "\n" ;
}
// Собираем нашу ссылку для запроса
$vkurl="https://api.vk.com/method/messages.send";
$params=[
'user_id' => $user_id,
'message' => $messages,
'v' => $v,
'access_token' => $access_token
];
$sendmess = curl_init($vkurl);
curl_setopt($sendmess, CURLOPT_HEADER, false);
curl_setopt($sendmess, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($sendmess, CURLOPT_POST, 1);
curl_setopt($sendmess, CURLOPT_POSTFIELDS, ($params));
curl_setopt($sendmess, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($sendmess);
$modx->log(MODX_LOG_LEVEL_ERROR, $result);
curl_close($sendmess);
return true;
И всё должно заработать. Проверяем
Алексей Либер 06.05.2018 11:01 #
надо заменить на
ну и объявлять $arr, а не $mess…
Дмитрий Галыгин 06.05.2018 12:51 #
Алексей Либер 06.05.2018 14:09 #
Андрей Казунин 12.05.2018 05:14 #