График работы: 10:00 - 19:00 Пн - Пт
Интеграция Такси-Мастер на сайт Платформа LP

Такси-Мастер — это система автоматизации службы такси. Т.е. это инструмент позволяющий быстро и качественно оперировать заказами, строить аналитические данные.

Такси-Мастер API

У нас достаточно часто спрашивают возможна ли интеграция Такси-Мастер на сайте. Сегодня рассмотрим вариант внедрения приема заказов с лендинга на Платформе LP.

Здравствуйте! А можем мы форму заявки настроить на свою CRM? Возможна ли интеграция Такси-Мастер на сайте созданном через Платформу LP? Можно скрипт для этого написать и в конструктор вставить? — Сергей Стародубцев, г. Воронеж

Ответ: Да, разумеется это возможно сделать. Однако есть свои нюансы.

К счастью, разработчики с Такси-Мастер написали подробную документацию по работе с системой через API: http://help.taximaster.ru/index.php/TM_API.

В конце документации даже есть готовый пример, в котором заменив данные подключения на свои можно начать работать. Но не все так сладко на стороне конструктора. К сожалению, Платформа Landing Page не позволяет на своем хостинге размещать php-скрипты, да и вообще нет доступа по FTP — что тоже логично.

Способы интеграции Такси-Мастер на сайте

Здесь есть 3 варианта для Платформы LP:

  1. Категорически не рекомендуется! Отправлять данные через JavaScript прямо с лендинга. Нельзя такой вариант использовать потому, что вы засветите свой API ключ. Злоумышленник завладев им, может серьезно насолить вашей компании. Описал я этот метод, потому как некоторые думают, что это допустимый вариант. Забудьте! =)
  2. Сложный способ. У вас есть домен site.ru? Остается привязать поддомен к другому хостингу. На стороне Платформы LP создаете поддомен (например, lib.site.ru) и просите техподдержку сменить/добавить для него запись A с серверами вашего стороннего хостинга (допустим, ns1.hosting.reg.ru, ns2.hosting.reg.ru). Выигрыш лишь в том, что все под одним доменом.
  3. Простой вариант. Использовать любой существующий домен на стороннем хостинге. Создать в подкаталоге необходимые php-скрипты и сослаться на них.

Мы остановились по некоторым причинам на 4-ом варианте. =)
Был у нас один «лишний» домен. Докупили к нему хостинг и положили все файлы туда.

Скрипты для интеграции Такси-Мастер

Алгоритм теперь у нас такой:
Клиент попадает на сайт -> Заполняет форму и отправляет -> Платформа LP пересылает данные с формы в наш PHP-скрипт -> PHP-скрипт отправляет данные в систему Такси-Мастер.

Шаг 1. Настройка формы

Через конструктор Платформы LP вставляем любую форму и выбираем действие после отправки «Сообщение + Вставка HTML».

<script>call("<%= name %>","<%= phone %>","<%= fields['Откуда Вас забрать?'] %>","<%= fields['Куда поедем?'] %>","<%= fields['Заказ ко времени? Укажите здесь дату и время'] %>","<%= fields['Примечание к заказу'] %>")</script>

Интеграция Такси-Мастер на сайте

Шаг2. Скрипт аякс отправки формы в тег BODY

Добавляем следующий скрипт в настройках лендинга перед закрывающимся тегом </body>:

<script type="text/javascript" language="javascript">
    function call(fname,phone,address,dest,sourcetime,comment) {		
        $.ajax({
          type: 'POST',
          url: 'ВАША-ССЫЛКА-К-СКРИПТУ/zakaz_taxi.php',
          data: {
				'OrderClientName': fname,
				'Number': phone,
				'OrderSourceAddress': address,
				'OrderDestAddress': dest,
				'OrderComment': 'Дата и время: ' + sourcetime + ' | ' + comment
		  },
          success: function(data) { },
          error:  function(xhr, str){
                alert('Возникла ошибка: ' + xhr.responseCode);
            }
        }); 
    }	
</script>

Интеграция Такси-Мастер на лендинге

Обратите внимание! Дата и время доставки приписываются к примечанию. Это сделано потому, что Платформа LP не имеет возможности добавлять поле input с типом даты и времени.

Шаг 3. PHP-обработчик на хостинге

Осталось настроить скрипт на нашем стороннем хостинге.

<?php
    /**
     * ВНИМАНИЕ
     * Для работы с API на сервере должны быть установлены расширения Curl и JSON 
     */
	 
header("Access-Control-Allow-Origin: http://ВАШ-ЛЕНДИНГ-С-ФОРМОЙ");
	 
$connect = array(
    'ip' => 'ВАШ_IP',
    'port' => '8089',
    'secret' => 'ВАШ_API_КЛЮЧ',
    'method' => 'create_order'
);

function serviceIsAvailable( $connect ) {
    $requestArgs = getArgs();
    $ch = curl_init( "https://".$connect['ip'].":".$connect['port']."/common_api/1.0/get_tariffs_list?" . $requestArgs );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 3 );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
        'Signature: ' . md5( $requestArgs . $connect['secret'] ),
        'Content-Type: application/x-www-form-urlencode'
    ));

    $response = json_decode(curl_exec( $ch ));
    $error_code = curl_errno($ch);
    curl_close($ch);
    return ( $response->code == 0 ) && ( !empty($response->data->tariffs) ) && ( $error_code == 0);
}

function getArgs( $extra = array() ) {
    return http_build_query(array_merge(
            array(
                'pay_system_type'   => '0',
                'account'           => '123400542',//'004700-000003',
                'oper_id'           => '20120813182430',//'20120813182430',
                'sum'               => '1',
                'oper_time'         => '20120813182430',
                'test'              => '1'
            )
            , $extra)
    );
}

function addOperation( $connect, $phone, $address, $customer, $comment ) {
    $requestArgs = getArgs(array( 'phone' => $phone, 'source' => $address, 'source_time' => date('YmdHis'), 'customer' => $customer, 'comment' => $comment ));
    $ch = curl_init( "https://".$connect['ip'].":".$connect['port']."/common_api/1.0/".$connect['method'] );

    curl_setopt( $ch, CURLOPT_POST, TRUE );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $requestArgs );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 3 );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
        'Signature: ' . md5( $requestArgs . $connect['secret'] ),
        'Content-Type: application/x-www-form-urlencode'
    ));

    $response = json_decode(curl_exec( $ch ));
    $error_code = curl_errno($ch);
    curl_close($ch);
    if( $response->code == 0 && !empty($response->data->order_id) && ( $error_code == 0) ) {
        return true;
    } else {
        return $response->descr;
    }
}

$result = array();
$errorMessage = array();
if( !function_exists('curl_init') ) {
    $errorMessage[] = 'не установлен curl';
}
if ( !function_exists('json_encode') ) {
    $errorMessage[] = 'не установлен json';
}
if( empty( $_POST['Number'] ) || empty( $_POST['OrderSourceAddress'] ) ) {
    $errorMessage[] = 'не указан обязательный параметр.';
}
if( serviceIsAvailable( $connect ) ) {
    $subResult = addOperation( $connect, $_POST['Number'], $_POST['OrderSourceAddress'], $_POST['OrderClientName'], $_POST['OrderComment'] );
    if( $subResult === true ) {
        $result = 'Заказ успешно принят.';
    } else {
        $errorMessage[] = $subResult;
    }
} else {
    $errorMessage[] = 'Сервис недоступен. Проверьте настройки подключения.';
}
?>

ВАШ-ЛЕНДИНГ-С-ФОРМОЙ — в эту строку вписываете адрес вашего сайта откуда приходят заявки, т.е. сайт, где ваша форма. Эта строка разрешает принимать аякс-запросы с этого домена.

$connect = array(
    'ip' => 'ВАШ_IP',
    'port' => '8089',
    'secret' => 'ВАШ_API_КЛЮЧ',
    'method' => 'create_order'
);

Здесь должны содержаться ваши данные подключения к системе Такси-Мастер.

На этом реализация завершается. Все сделали правильно? Тогда смело отправляйте тестовые заказы вашим диспетчерам. Они будут этому безумно рады! =)

А еще проще и быстрее предоставить эту работу мне -> Оставить заявку