curl php nodejs

Общее


curl 'http://yourdomain.ru/mod/api/?api_key=5xxxxxfc7103bde368b708b7f3ed95a004496740&method=checkConnection'

echo file_get_contents(
    'http://yourdomain.ru/mod/api/'
    .'?api_key=5xxxc7103bde368b708b7f3ed95a004496740'
    .'&method=checkConnection'
);
// В php.ini должна быть опция allow_url_fopen=On

var request = require('request'); // npm install request
request.post({ uri: 'http://yourdomain.ru/mod/api/', form: {
    api_key:'5xxxc7103bde368b708b7f3ed95a004496740',
    method:'checkConnection'
}}, function(err, res, body) {
    console.log(JSON.parse(body));
});

/* Ответ */
{"status":1}

API позволяет получать и изменять информацию о заявках, клиентах, оплатах, а так же отправлять информацию о событиях вашим скриптам.

Работа с API осуществляется путём отправки GET или POST запросов на адрес вида:
http://{ваш_домен}/mod/api/?api_key={ключ}
api_key ипользуется для подписи всех запросов к API, получить и изменить его можно в панели управления.

Данные возвращаются в кодировке utf-8, в формате JSON.
Контент находится в объекте 'data'.

Подключение


var request = require('request'); // npm install request
flexbeAPI = {
    url:'http://yourdomain.ru/mod/api/',
    api_key:'ed677c52dccc04a456f846ebe06849b551f53f20',
    
    // Вызов метода API
    query:function(method, params, callbackFunc){
        params.api_key = this.api_key;
        params.method = method;
        
        request.post({uri: this.api_url, form: params}, 
        function(err, res, body) { try {
            callbackFunc(JSON.parse(body));
        } catch (error) { console.log(error); } });
    },
};

// Инициализируем класс для работы с API
require('flexbe_api.class.php');

$api_url = 'http://yourdomain.ru/mod/api/';
$api_key = 'ed677c52dccc04a456f846ebe06849b551f53f20';

$flexbe = new flexbeAPI($api_url,$api_key);

// Проверка подключения
if ( !$flexbe->checkConnection() ) {
  print_r($flexbe->errors); 
  exit();
}




curl 'http://yourdomain.ru/mod/api/?api_key=xxxxxxxxxx'















Скачайте архив с примерами работы с API и обработчиками событий.

Получите секретный ключ и url адрес для запросов в панели управления, в разделе "Настройки - Интеграции".

Укажите, если требуется, адреса ваших обработчиков событий.

Ограничения


// Получим все заявки
$leads = array();
$cur_page = 0;
$page_size = 1000; 

while ( count($leads) == ($cur_page*$page_size) ) {
  $leads_res = $flexbe->getLeads(array(
    'start' => $cur_page*$page_size, 
    'count' => $page_size,
  ));
  if ($leads_res['data']['leads']) {
    $leads = array_merge($leads, $leads_res['data']['leads']);
  } else {
    break;
  }
  $cur_page++; // след.страница
  sleep(1); // чтобы не превысить лимит запросов в минуту
}

Методом getLeads можно получить до 1000 заявок за один запрос.

Если требуется получить больше 1000 заявок, нужно разбивать обращение к API на несколько запросов с указанием start и count (постраничная навигация)

Коды ошибок


// Объект с информацией об ошибке 
error: {
  code: 0,
  msg: "Неверный api_key",
}
Код Описание
0Некорректный ключ доступа
1Превышен лимит запросов
2Несуществующий метод



Методы

Имя метода передаётся в параметре &method= http://{ваш_домен}/mod/api/?api_key={ключ}&method=getLeads

getLeads - получение


curl 'http://yourdomain.ru/mod/api/?api_key=xxxxx&method=getLeads&client_email=dev@flexbe.com'

$leads_res = $flexbe->getLeads( array( 
    // Дата создания заявки больше чем месяц назад
    'date_from'=>strtotime('-1 month'),

    // но меньше сегодня
    'date_to'=>strtotime('today UTC'),
));

flexbeAPI.query('getLeads', { 
    status:0 // новые заявки
}, function(result){
    var leads = result.data.leads;
    for(var id in leads){
        var lead = leads[id];
        console.log(lead);
    }
});

Заявки отсортированы по дате создания, от последней к первой.

Поля для фильтрации заявок:
status 0 - Новая
1 - В работе
2 - Выполнена
10 - Отменена
11 - Удалена
date_from timestamp, нижняя граница для фильтрации по дате создания заявки
date_to timestamp, верхняя граница для фильтрации по дате создания заявки
client_phone телефон клиента, ищется точное совпадение
client_email email клиента, ищется точное совпадение
start с какой позиции начинать. По умолчанию 0
count количество получаемых заявок. По умолчанию 25

// Объект с информацией о заявках 
data: {
  leads: {
    122327: {
      id: "122327",
      num: "327",
      time: "1443461247",
      status: {
        code: "0",
        name: "Новая"
      },
    client: {
      name: "Александр",
      phone: "89001112233",
      email: ""
    },
    note: null, // заметки к заявке
    form_data: {
      10001: {
        id: 10001,
        type: "text",
        name: "Имя",
        value: "Александр"
      },
      10002: {
        id: 10002,
        type: "text",
        name: "Телефон",
        value: "89001112233"
      }
    },
    utm: {
      "utm_source":"yandex",
      "utm_medium":"retargeting",
      "utm_campaign":"test1",
      "utm_term":"test2",
      "utm_content":"test3",
      "url":"http:\/\/example.ru\/?utm_source=yandex&utm_medium=retargeting&utm_campaign=test1&utm_term=test2&utm_content=test3"
    }

    pay: {
      id: "189",
      summ: "220.00",
      time_create: "1443461247",
      time_done: "0",
      status: {
        code: "0",
        name: "Ожидает оплаты"
      },
      desc: "Комментарий к счёту",
      method: "",
      pay_link: "http://yourdomain.ru/?pay_id=129&h=hgs66c4dc7313a37e9a8bae04f9088" 
    }
    },
    122328: {
    id: "122328",
  . . .
Возвращаемая информацию о заявке:
idУникальный идентификатор
numНомер заявки
timetimestamp времени создания заявки
statuscode - код статуса, name - название статуса
codename
0Новая
1В работе
2Выполнена
10Отменена
11Удалена
clientМассив с информацией о клиенте (name,phone,email)
noteЗаметки
form_nameНазвание формы заявки
form_dataСодержание полей из формы заявки
pageСтраница, с которой отправлена заявка
url - адрес,
name - название
utmСодержание UTM меток, если они были.
utm_sourceИсточник/Рекламная система
utm_campaignКампания
utm_mediumТип трафика
utm_termКлючевое слово
utm_contentТип объявления
urlПолный адрес страницы
payИнформация о счёте/оплате
id Уникальный индентификатор счёта
summСумма к оплате
status
codename
0Ожидает оплаты
1В процессе оплаты
2Оплачен
3Ошибка оплаты
time_createtimestamp создания счёта
time_donetimestamp оплаты счёта
descкомментарий для покупателя
pay_linkСсылка на страницу оплаты

changeLead - изменение



// Восстанавливаем удалённую заявку
if($lead['status']==11){    
  $result = $flexbe->changeLead($lead['id'], array(
    'status'=>10,
  ));
}
Поля для обновления заявки:
id*Уникальный идентификатор редактируемой заявки
status 0 - Новая
1 - В работе
2 - Выполнена
10 - Отменена
11 - Удалена
clientМассив с информацией о клиенте (name,phone,email)
noteЗаметки
payИнформация о счёте/оплате
summСумма к оплате
status0 - Ожидает оплаты
1 - В процессе оплаты
2 - Оплачен
3 - Ошибка оплаты
descкомментарий для покупателя



Веб-хуки


// print_r($_REQUEST);
[event] => 'lead',
[site] => Array (
    [id] => 174911 // id аккаунта
    [sub_id] => 180023 // id лендинга (группы страниц)
    [domain] => yourdomain.ru
    [name] => Лендинг
)
[data] => Array (
   [id] => 1414
   [num] => 414
   [time] => 1444215670
   [status] => Array
       (
           [code] => 0
           [name] => Новая
       )

   [client] => Array
       (
   // ... и т.д.
)

Web-hook - это скрипт которому отправляется информация о событии.

Например, при создании новой заявки, наш сервер отправит вашему скрипту информацию о ней.

Это позволяет максимально быстро получать информацию и избавляет от необходимости отслеживать новые заявки/оплаты путём регулярных обращений к API.

Основные
eventТип события
siteИнформация о сайте
dataИнформация о событии(поля заявки)

Событие lead


/*
 * Обрабатываем события
 */
if (in_array($_REQUEST['event'], array('lead','pay'))) { $br = '
';
  // Формируем сообщение для отправки 
  // на основе полученной информации о заявке
  $lead = $_REQUEST['data'];

  $pay_statuses = array(
      0 => 'Ожидает оплаты',
      1 => 'В процессе оплаты',
      2 => 'Оплачен',
      3 => 'Ошибка оплаты',
  );

  /* Заголовок/от кого */    
    $from = 'Новая заявка №'.$lead['num'];
    // для оплаты другой заголовок
    if ($_REQUEST['event']=='pay') { 
        $from = 'Оплата заявки №'.$lead['num'];

        if($lead['pay']['status']['code']!=2){
            $from = 'Проблемы с оплатой счёта заявки №'.$lead['num'];;
        }

        if($lead['pay']['test']==1){
            $from = 'Тестовый платёж по заявке №'.$lead['num'];;
        }
    }


  /* Сообщение */
    $msg = '';
    // информация об оплате
      if ($_REQUEST['event']=='pay') { 
          $msg .= ':moneybag::moneybag::moneybag:'.$br;
          $msg .= '> *Сумма*: '.$lead['pay']['summ'].' руб'.$br;
          $msg .= '> *Статус*: '.$pay_statuses[ $lead['pay']['status']['code'] ].$br;
          $msg .= '> *Способ оплаты*: '.$lead['pay']['method'].$br;
          $msg .= '> *Комментарий*: '.$lead['pay']['desc'].$br;
          $msg .= '> Время создания: '.date('d.m.Y H:i', $lead['pay']['time_create']).$br;
          $msg .= '> Время оплаты: '.date('d.m.Y H:i', $lead['pay']['time_done']).$br;
      }

    // Информация о заявке
      $msg .= ':raising_hand::skin-tone-2: Заявка со страницы <'.$lead['page']['url'].'|'.$lead['page']['name'].' ('.$lead['page']['url'].')>'.$br;    
      // Поля заявки
      foreach ($lead['form_data'] as $k => $item) {
          $msg .= '          *'.$item['name'].'*: '.$item['value'].$br;
      }
      // Ссылка на оплату счёта
      if($_REQUEST['event']=='lead' && count($lead['pay'])>0){
          $msg .= ':moneybag: _Создан <'.$lead['pay']['pay_link'].'|счёт на оплату>_    ';
      }

      // Ссылка на просмотр заявки в админпанели
      $msg .= ':pencil:  ';


  // $msg = '```'.print_r($_REQUEST, true).'```'; // отладка

  // Отправялем сообщение в slack
    $curl = curl_init('https://slack.com/api/chat.postMessage');
    curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query(array( 'mrkdwn' => true,
            'token' => 'your_slack_token', 'channel' => '#general',
            'username' => $from, 'text' => $msg 
        )),
    ));
}

Вызывается в момент создания заявки.

Веб-хуку в поле data передаётся информация о заявке.

Отправляемая информация о заявке:
idУникальный идентификатор
numНомер заявки
timetimestamp времени создания заявки
statuscode - код статуса,
name - название статуса
codename
0Новая
1В работе
2Выполнена
10Отменена
11Удалена
clientМассив с информацией о клиенте (name,phone,email)
noteЗаметки
form_nameНазвание формы заявки
form_dataСодержание полей из формы заявки
pageСтраница, с которой отправлена заявка
url - адрес
name - название
utmСодержание UTM меток, если они были.
utm_sourceИсточник/Рекламная система
utm_campaignКампания
utm_mediumТип трафика
utm_termКлючевое слово
utm_contentТип объявления
urlПолный адрес страницы
payИнформация о счёте/оплате
id Уникальный индентификатор счёта
summСумма к оплате
status
codename
0Ожидает оплаты
1В процессе оплаты
2Оплачен
3Ошибка оплаты
time_createtimestamp создания счёта
time_donetimestamp оплаты счёта
descкомментарий для покупателя
testФлаг - тестовый платёж(через тестовый сервер робокассы)

Событие pay

Вызывается в момент сообщения об оплате или ошибки от эквайринга (робокасса и т.д.)

Повторяются данные события lead (см. выше). Содержит обновлённые данные об оплате.


Помощь


curl --url "smtps://smtp.gmail.com:465" --ssl-reqd \
  --mail-from "your@gmail.com" --mail-rcpt "dev@flexbe.com" \
  --upload-file mail.txt --user "your@gmail.com:password" --insecure

mail("dev@flexbe.com", "Пожелание по API", $your_message);

По вопросам работы API пишите на dev@flexbe.com