Joywork/engine/classes/Wazzap.php

361 lines
11 KiB
PHP
Raw Permalink Normal View History

2026-05-22 20:21:54 +02:00
<?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];
}
}