debug = true; error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1); } if(!isset($agency_id) || (int)$agency_id == 0){ die('Не задано агентство'); } $this->agency_id = $agency_id; if (!is_null($db)) { $this->db = $db; } else { $pdo = new MysqlPdo(hst, ndb, user, pass); $pdo->query("SET NAMES 'utf8'"); $this->db = $pdo; } } /** * Сохраненние ключа */ public function save_key($key){ $sql_up = "UPDATE users SET wazzap_api_key = '{$key}' WHERE id = {$this->agency_id}"; $this->db->query($sql_up); } /** * Получение ключа */ public function get_key() { $api_key = ''; $sql = "SELECT wazzap_api_key FROM users WHERE id = {$this->agency_id}"; $q = $this->db->query($sql); $r = $this->db->fetch_assoc($q); if(isset($r['wazzap_api_key'])){ $api_key = $r['wazzap_api_key']; } return $api_key; } public function getGlobalWidget($jwUserId, $scope, $chatType, $chatId, $channelId) { $api_key = $this->get_key(); if ($api_key) { $sql = "SELECT id, last_name, first_name, middle_name, phone FROM users WHERE id = {$jwUserId}"; $q = $this->db->query($sql); $user = $this->db->fetch_assoc($q); $username = $user['last_name'] . " " . $user['first_name']; if ($user['middle_name']) { $username = $username . " " . $user['middle_name']; } $url = 'https://api.wazzup24.com/v3/iframe'; $header = array('Content-type:application/json', 'Authorization: Bearer ' . $api_key); if ($scope == 'global') { $post = array( 'user' => array( 'id' => strval($user['id']), 'name' => $username, ), 'scope' => 'global', 'options' => array( 'useDealsEvents' => true, 'useMessageEvents' => true ) ); } else { if ($scope == 'card') { if ($channelId) { $post = array( 'user' => array( 'id' => strval($user['id']), 'name' => $username, ), 'scope' => 'card', 'options' => array( 'useDealsEvents' => true, 'useMessageEvents' => true ), 'filter' => array(array( 'chatType' => $chatType, 'chatId' => $chatId ) )); } else { $post = array( 'user' => array( 'id' => strval($user['id']), 'name' => $username, ), 'scope' => 'card', 'options' => array( 'useDealsEvents' => true, 'useMessageEvents' => true ), 'filter' => array(array( 'chatType' => $chatType, 'chatId' => $chatId ) )); } } } $data = Wazzap::sendCurl($url, json_encode($post), $header); $json = json_decode($data[0], true); if ($data[1] == 200) { return $json['url']; } else { return "Ошибка: " . $json['error']; } } else { return "Ошибка: не задан ключ АПИ"; } } public function getCounterHost() { $api_key = $this->get_key(); if ($api_key) { $url = 'https://integrations.wazzup24.com/counters/ws_host/api_v3/' . $api_key; $data = Wazzap::sendCurl($url); $json = json_decode($data[0], true); if ($data[1] == 200) { return '{"host" : "' . $json['host'] . '", "key" : "' . $api_key . '"}'; } else { return ""; } } else { return ""; } } public function getChannels() { $api_key = $this->get_key(); if ($api_key) { $url = 'https://api.wazzup24.com/v3/channels'; $header = array('Authorization: Bearer ' . $api_key); $data = Wazzap::sendCurl($url, false, $header, false); if ($data[1] == 200) { return json_decode($data[0], true); } else { return []; } } else { return "no_key"; } } public function createWazzapUser($jwUserId) { $api_key = $this->get_key(); if ($api_key) { $sql = "SELECT id, last_name, first_name, middle_name, phone FROM users WHERE id = {$jwUserId}"; $q = $this->db->query($sql); $user = $this->db->fetch_assoc($q); $url = 'https://api.wazzup24.com/v3/users'; $username = $user['last_name'] . " " . $user['first_name']; if ($user['middle_name']) { $username = $username . " " . $user['middle_name']; } $post = array( 'id' => strval($user['id']), 'name' => $username, 'phone' => $user['phone'] ); $header = array('Content-type:application/json', 'Authorization: Bearer ' . $api_key); $data = Wazzap::sendCurl($url, "[" . json_encode($post) . "]", $header); if ($data[1] == 200) { $sqlUpd = "UPDATE users SET added_to_wazzap = 1 WHERE id = {$jwUserId}"; $this->db->query($sqlUpd); return "done"; } else { $json = json_decode($data[0], true); return "Ошибка: " . $json['error']; } } else { return "no_key"; } } public function deleteWazzapUser($jwUserId) { $api_key = $this->get_key(); if ($api_key) { $url = 'https://api.wazzup24.com/v3/users/' . $jwUserId; $header = array('Authorization: Bearer ' . $api_key); $data = Wazzap::sendCurl($url, false, $header, true); if ($data[1] == 200) { $sqlUpd = "UPDATE users SET added_to_wazzap = 0 WHERE id = {$jwUserId}"; $this->db->query($sqlUpd); return "done"; } else { $json = json_decode($data[0], true); return "Ошибка: " . $json['error']; } } else { return "no_key"; } } public function createWazzapContact($clientId, $userId, $clientName, $chatType, $chatId) { $api_key = $this->get_key(); if ($api_key) { $url = 'https://api.wazzup24.com/v3/contacts'; $post = array( 'id' => strval($clientId), 'responsibleUserId' => strval($userId), 'name' => $clientName, 'uri' => '#client', 'contactData' => array(array( 'chatType' => strval($chatType), 'chatId' => strval($chatId) )) ); $header = array('Content-type:application/json', 'Authorization: Bearer ' . $api_key); $data = Wazzap::sendCurl($url, "[" . json_encode($post) . "]", $header); if ($data[1] == 200) { return "done"; } else { $json = json_decode($data[0], true); return "Ошибка: " . $json['error']; } } else { return "no_key"; } } public function createWazzapDeal($requisitionId, $userId, $requisitionName, $clientId) { $api_key = $this->get_key(); if ($api_key) { $url = 'https://api.wazzup24.com/v3/deals'; $post = array( 'id' => strval($requisitionId), 'responsibleUserId' => strval($userId), 'name' => $requisitionName, 'contacts' => array_values(array(strval($clientId))), 'uri' => '#req', 'closed' => false ); $header = array('Content-type:application/json', 'Authorization: Bearer ' . $api_key); $data = Wazzap::sendCurl($url, "[" . json_encode($post) . "]", $header); if ($data[1] == 200) { return "done"; } else { $json = json_decode($data[0], true); return "Ошибка: " . $json['error']; } } else { return "no_key"; } } public function sendMessage($channelId, $phone, $text, $fileUrl, $crmMessageId) { $api_key = $this->get_key(); if ($api_key) { $url = 'https://api.wazzup24.com/v3/message'; $post = array( 'channelId' => strval($channelId), 'chatType' => strval('whatsapp'), 'chatId' => strval($phone), 'text' => strval($text), 'contentUri' => strval($fileUrl), 'crmMessageId' => strval($crmMessageId) ); $header = array('Content-type:application/json', 'Authorization: Bearer ' . $api_key); $data = Wazzap::sendCurl($url, json_encode($post), $header); if ($data[1] == 201) { return "done"; } else { $json = json_decode($data[0], true); return "Ошибка: " . $json['error'] . ", текст: " . $data[0]; } } else { return "no_key"; } } private static function sendCurl($url, $post = false, $header = false, $delete = false){ $ch = curl_init($url); //debug curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_STDERR, fopen($_SERVER['DOCUMENT_ROOT'] . '/curl_wazzap.txt', 'a+')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 20); if ($header) { curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_HEADER,0); } if ($post) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } if ($delete) { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); } $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return [$response, $http_code]; } }