Интеграция самописной CRM с ContactForm 7 (WordPress)

235
08 февраля 2019, 11:40

Это комментарий к подключению самописной CRM.

Для отправки заявок на занятия с сайта sanlin-football.kz в CRM требуется
послать в POST-запросе на URL http://football.rict.su/Request/Accept 
 JSON следующего вида:
 {
   "token" : "d9d0c12116e16821240cb32179cdf39",
   "city" : "Астана",
   "name" : "Иван"
  "phone" : "111222333444"
 }
 строковые данные передаются в кодировке UTF-8 
 token рассчитывается следующим образом: (пример приводится ниже)
 1. Берётся текущее время UTC с точностью до минут
 2. Время переводится в количество секунд, прошедших с начала эпохи
 3. К текстовому представлению количества секунд добавляется секретная строка
 4. От полученной строки считается хэш MD5, байты хэша переводятся в вид шестнадцатеричной строки
 5. token готов (регистр символов в строке не важен)
Замечание. Если за время от расчёта токена до его получения CRМ произошёл переход секунд 59 -> 00,
то CRM примет значение токена за прошлую минуту
 В ответ CRM отправляет JSON вида:
 {
  "code": 0,
  "message": "Нет ошибок",
  "result_id": 2
 }
если HTTP-статус 200 и параметр code == 0, то заявка успешно отправлена, поле result_id содержит
 её идентификатор. В противном случае code содержит внутренний код ошибки CRM, message содержит текстовое описание ошибки
    $secret = "DHOHkwUgPIzMm";
$timestamp = gmdate("Y-m-d H:i:00")." UTC";
$seconds = strtotime($timestamp);
$str = $seconds.$secret;
$token = md5($str);
class Request
{
    public $token;
    public $phone;
    public $name;
    public $city;
}
$new_request = new Request();
$new_request->token = $token;
$new_request->name = "Сергей";
$new_request->phone = "9998889988";
$new_request->city = "Павлодар";
$data = json_encode($new_request);

    $url = 'http://football.rict.su/Request/Accept';
    $context = stream_context_create(array(
        'http' => array(
          'method'  => 'POST',
          'header'  => "Content-type: application/json; charset=utf-8\r\n"."Content-Length: ".strlen($data),
          'content' => $data,
          'timeout' => 30,
        ),
      ));
      $ret = file_get_contents($url, false, $context);
      print_r($ret);

Вот Хук для контакт форм

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' ); /// Хук WordPress для работы с CF7
function your_wpcf7_mail_sent_function( $contact_form )
{
    $title = $contact_form->title;
    $posted_data = $contact_form->posted_data;
    if ('Контактная форма 1' == $title) {
        $submission = WPCF7_Submission::get_instance();
        $posted_data = $submission->get_posted_data();
//взяли данные из формы при отправке
        $name = $posted_data['text-331']; // это поля вформы
        $phone = $posted_data['tel-720'];
        $city = $posted_data['text-389'];
    }
}

Как передать данные на CRM из контакт форм? То есть, отправить запрос с токеном, как они пишут в описании.

ВОт код мой

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' ); /// Хук WordPress для работы с CF7
function your_wpcf7_mail_sent_function( $contact_form )
{
    $title = $contact_form->title;
    $posted_data = $contact_form->posted_data;
    if ('Контактная форма 1' == $title) {
        $submission = WPCF7_Submission::get_instance();
        $posted_data = $submission->get_posted_data();
//взяли данные из формы при отправке
        $name = $posted_data['text-331']; // это поля вформы
        $phone = $posted_data['tel-720'];
        $city = $posted_data['text-389'];
        $secret = "DHOHkwUgPIzMm";
        $timestamp = gmdate("Y-m-d H:i:00")." UTC";
        $seconds = strtotime($timestamp);
        $str = $seconds.$secret;
        $token = md5($str);
        class Request
        {
            public $token;
            public $phone;
            public $name;
            public $city;
        }
        $new_request = new Request();
        $new_request->token = $token;
        $new_request->name = $name;
        $new_request->phone = $phone;
        $new_request->city = $city;
        $data = json_encode($new_request);

        $url = 'http://football.rict.su/Request/Accept';
        $context = stream_context_create(array(
            'http' => array(
                'method'  => 'POST',
                'header'  => "Content-type: application/json; charset=utf-8\r\n"."Content-Length: ".strlen($data),
                'content' => $data,
                'timeout' => 30,
            ),
        ));
        $ret = file_get_contents($url, false, $context);
        print_r($ret);
    }
}
READ ALSO
Помощь настройки отправки формы заказа

Помощь настройки отправки формы заказа

Столкнулся с такой проблемой, а именно:

287
Как отправить xml сообщение методом POST

Как отправить xml сообщение методом POST

Ниже приведен пример xml-сообщения которое должно быть отправлено методом POST на адрес https://anketaalfabank

244
Преобразование в time

Преобразование в time

Подскажите есть способ перевести значение к примеру 2018-01-01 к виду записи time() (http://phpnet/manual/ru/function

237
Не срабатывает strpos

Не срабатывает strpos

Имеется строка:

244