-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.php
More file actions
115 lines (90 loc) · 4.98 KB
/
index.php
File metadata and controls
115 lines (90 loc) · 4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?
/* Add a new contact to ESputnik
* Укажите адрес этого скрипта на странице «Серверное оповещение» в TicketForEvent
* https://admin.ticketforevent.com/ru/manage/event/109542/webhook/
*
* Документация добавления контакта:
* https://esputnik.com/api/methods.html#/v1/contact-POST
*
* @author: ma@ticketforevent.com
*/
// Данные от вебхука TicketForEvent приходят в POST-запросе
$data = $_POST;
// Параметры доступа, словарик с идентификаторами полей.
require_once "definitions.php";
// враппер eSputnik API
require_once "ESputnikClass.php";
// вспомогательные функции
require_once "functions.php";
try{
$eSputnik = new ESputnikClass($user, $pass);
if ($eSputnik !== false) {
// Этически TicketForEvent может добавлять в еСпутник только данные покупателя.
// Если кто-то купил 5 билетов на чужие емейлы, мы не можем их добавлять,
// так как они не принимали никаких условий.
// Поэтому ниже — отправка только данных заказчика.
// Если заказчик покупает билет себе, данные из анкеты попадут в поле fields (дополнительные поля eSputnik).
// Если заказчик покупал не себе, в еСпутник попадут только данные заказчика без дополнительных полей.
$buyerData = array(
'firstName' => $data['buyer']['firstname'],
'lastName' => $data['buyer']['lastname'],
// Каналы. https://esputnik.com/api/ns0_channelType.html
'channels' => array(
array(
'type' => 'email',
'value' => $data['buyer']['email']
),
array(
'type' => 'sms',
'value' => $data['buyer']['phone']
)
),
// Анкетные поля.
// Структура массива: https://esputnik.com/api/el_ns0_contact.html
'fields' => getBuyerFields($data),
// Название «сегмента», которым помечается добавляемый контакт
// Сегмент можно делать произвольным, без всяких числовых идентификаторов — eSputnik просто создаст его, если еще не было
'groups' => array(
[
'name' => 'ticketforevent_buyers' // покупатели с TicketForEvent
],
[
'name' => 'ticketforevent_buyers_' . $data['buyer']['customer_type'] // физлицо : individual | юрлицо : legal_entity
]
),
// язык, на котором был сделан заказ
'languageCode' => $data['language']
);
// Добавление контакта в eSputnik
$result = $eSputnik->addContact($buyerData);
// Обработка ответа от АПИ
if ($result->id) {
// В случае успешной отработки данного скрипта, TicketForEvent ждёт строчку «ok»
// Если ее не передать, TicketForEvent будет пытаться отправить эти же данные 10 раз
// в течение нескольких дней
echo "ok";
} else {
// Если от еСпутника не получен ид нового контакта, выводим дамп. Часть дампа получит TFE для последующего исправления проблемы.
echo "noid<br/>";
echo '<h4>data:</h4>' . print_r($data, true) . '<hr />';
echo '<h4>result:</h4>' . print_r($result, true) . '<hr />';
echo '<h4>http_status:</h4>' . print_r($eSputnik->http_status, true) . '<hr />';
echo '<h4>balance:</h4>' . print_r($eSputnik->getBalance(), true) . '<hr />';
echo '<h4>account info:</h4>' . print_r($eSputnik->getAccountInfo(), true) . '<hr />';
}
} else {
// Если не подключился класс в враппере АПИ, выводим дамп. Часть дампа получит TFE для последующего исправления проблемы.
echo "noapi<br/>";
echo '<h4>data:</h4>' . print_r($data, true) . '<hr />';
echo '<h4>result:</h4>' . print_r($result, true) . '<hr />';
echo '<h4>http_status:</h4>' . print_r($eSputnik->http_status, true) . '<hr />';
echo '<h4>balance:</h4>' . print_r($eSputnik->getBalance(), true) . '<hr />';
echo '<h4>account info:</h4>' . print_r($eSputnik->getAccountInfo(), true) . '<hr />';
}
} catch(Exception $e){
// Общая ошибка, выводим дамп. Часть дампа получит TFE для последующего исправления проблемы.
echo "try exception:" . $e->getMessage();
echo '<h4>data:</h4>' . print_r($data, true)\;
}
exit;
?>