· 4 years ago · May 24, 2021, 07:56 PM
1<?php
2header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization');
3header('Access-Control-Allow-Origin: *');
4header('Access-Control-Allow-Credentials: true');
5$apiDomain = ''; // Адрес срм.
6$apiKey = ''; // Ключ API
7$adminEmail = ''; // Емейл для уведомлений
8
9if (count($_POST) == 0) {
10 header("HTTP/1.0 404 Not Found");
11 die;
12}
13$dataClient = [
14 'labels_in_clients' => '', // Метка контакта. В срм /page/settings_labels
15 'steps' => '', // Воронка контакта. В срм /page/settings_steps
16 'steps_options' => '', // Этап воронки контакта
17 'responsable_id' => '', // Ответственный контакта
18];
19$dataClient = array_merge($dataClient, $_POST);
20ksort($dataClient);
21$sign = md5(implode('', $dataClient) . $apiKey);
22$dataClient['sign'] = $sign;
23$ch = curl_init();
24curl_setopt($ch, CURLOPT_POST, 1);
25curl_setopt($ch, CURLOPT_URL, $apiDomain . '/api/page/CreateLead');
26curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($dataClient));
27curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
28
29$html = curl_exec($ch);
30curl_close($ch);
31$resultClient = json_decode($html, true);
32$return = $resultClient;
33
34if ($return['result'] == 'failed') {
35 foreach ($return['errors'] as $key => $error) {
36 if ($error == 'Unique') {
37 unset($return['errors'][$key]);
38 }
39 }
40 if (count($return['errors']) == '') {
41 $return['result'] = 'success';
42 $return['description'] = 'success';
43 }
44}
45
46
47$data = [];
48$sign = md5(implode('', $data) . $apiKey);
49$data['sign'] = $sign;
50$ch = curl_init();
51curl_setopt($ch, CURLOPT_POST, 0);
52curl_setopt($ch, CURLOPT_URL, $apiDomain . '/api/page/GetAdditionalFields?' . http_build_query($data));
53curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
54
55$html = curl_exec($ch);
56curl_close($ch);
57$resultFields = json_decode($html, true);
58
59$data = [];
60$sign = md5(implode('', $data) . $apiKey);
61$data['sign'] = $sign;
62$ch = curl_init();
63curl_setopt($ch, CURLOPT_POST, 0);
64curl_setopt($ch, CURLOPT_URL, $apiDomain . '/api/page/GetSettings?' . http_build_query($data));
65curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
66
67$html = curl_exec($ch);
68curl_close($ch);
69$resultSettings = json_decode($html, true);
70
71if (isset($resultFields['values'])) {
72 $unique = false;
73 $incorrect = false;
74 $required = false;
75 $emailMessage = '';
76 foreach ($resultFields['values'] as $value) {
77 if (isset($_POST[$value['table_name']])) {
78 switch ($value['type']) {
79 case 'select':
80 $select = json_decode($value['default_value'], true);
81 if (isset($select[$_POST[$value['table_name']]])) {
82 $emailMessage .= $value['name'] . ': ' . $select[$_POST[$value['table_name']]]['optionName'];
83 }
84 break;
85 case 'date':
86 $emailMessage .= $value['name'] . ': ' . (is_numeric($_POST[$value['table_name']]) ? date('d.m.Y H:i:s', $_POST[$value['table_name']]) : $_POST[$value['table_name']]);
87 break;
88 default:
89 $emailMessage .= $value['name'] . ': ' . $_POST[$value['table_name']];
90 }
91 if ($resultClient['result'] == 'failed') {
92 if (isset($resultClient['errors'][$value['table_name']])) {
93 switch ($resultClient['errors'][$value['table_name']]) {
94 case 'Unique';
95 $emailMessage .= ' (дубль)';
96 $unique = true;
97 break;
98 }
99 }
100 }
101 $emailMessage .= "<p>";
102 }
103 }
104
105 if (isset($resultSettings['values']['labels']) && isset($resultSettings['values']['steps']) ) {
106 foreach ($resultSettings['values']['labels'] as $value) {
107 if ($value['id'] == $dataClient['labels_in_clients']) {
108 $emailMessage .= 'Метка: ' . $value['name'] . "<p>";
109 }
110 }
111 foreach ($resultSettings['values']['steps'] as $value) {
112 if ($value['id'] == $dataClient['steps']) {
113 $emailMessage .= 'Воронка: ' . $value['name'] . "<p>";
114 foreach ($value['step_options'] as $option) {
115 if ($dataClient['steps_options'] == $option['weight']) {
116 $emailMessage .= 'Этап: ' . $option['name'] . "<p>";
117 }
118 }
119 }
120 }
121 }
122 if (isset($resultClient['values']['resp_name'])) {
123 $emailMessage .= "Ответственный: {$resultClient['values']['resp_name']}<p>";
124 }
125
126 if ($unique) {
127 $emailMessage .= "Контакт не создан в срм, потому что это дубль.<p>";
128 }
129
130 $redundantFields = [];
131 $emailMessageRedundant = '';
132 foreach ($_POST as $key => $value) {
133 $keyAddField = array_search($key, array_column($resultFields['values'], 'table_name'));
134 if ($keyAddField === false) {
135 $redundantFields[] = $key;
136 $emailMessageRedundant .= $key . ': ' . $value . "<p>";
137
138 }
139 }
140
141 if ($emailMessageRedundant != '') {
142 $emailMessage .= 'Таких полей не существует в CRM, но контакт заполнил их в форме: <p>';
143 $emailMessage .= $emailMessageRedundant;
144 }
145
146 $return['redundantFields'] = $redundantFields;
147 $return['result'] = 'success';
148 echo json_encode($return);
149 $requiredFieldsError = [];
150
151 if ($resultClient['result'] == 'failed') {
152 foreach ($resultClient['errors'] as $keyField => $value) {
153 if ($value == 'Required') {
154 $requiredFieldsError[] = $keyField;
155 }
156 }
157 }
158
159 if ($adminEmail != '' && count($requiredFieldsError) == 0) {
160 $data = [
161 'email' => $adminEmail,
162 'subject' => !$unique ? 'Новый контакт' : 'Дубль контакт',
163 'text' => $emailMessage,
164 ];
165 ksort($data);
166 $sign = md5(implode('', $data) . $apiKey);
167 $data['sign'] = $sign;
168 $ch = curl_init();
169 curl_setopt($ch, CURLOPT_POST, 1);
170 curl_setopt($ch, CURLOPT_URL, $apiDomain . '/api/page/SendEmail');
171 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
172 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
173
174 $html = curl_exec($ch);
175 curl_close($ch);
176 $result = json_decode($html, true);
177 }
178} else {
179 $return['result'] = 'success';
180 echo json_encode($return);
181}