Joywork/engine/classes/Wazzap.php
2026-05-22 21:21:54 +03:00

361 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
class Wazzap {
public function __construct($agency_id, $db = null, $debug = false) {
if ($debug == true) {
$this->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];
}
}