magento2-docker/app/code/IpSupply/ChatMessage/Api/Controller/MessageApi.php

245 lines
7.6 KiB
PHP
Executable File

<?php
namespace IpSupply\ChatMessage\Api\Controller;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request as GuzzRequest;
use IpSupply\ChatMessage\Api\Interface\MessageApiInterface;
use IpSupply\ChatMessage\Config\ChatConfig;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\App\Helper\Context;
use Magento\Framework\Webapi\Rest\Request;
class MessageApi extends AbstractHelper implements MessageApiInterface {
protected $_request;
protected $_chatConfig;
public function __construct(Context $context, Request $request) {
$this->_request = $request;
// $this->_chatConfig = $_chatConfig;
parent::__construct($context);
}
public function getMessage() {
try {
$topic = $this->_request->getParams()["topic"];
$streamName = $this->_chatConfig->getStreamName();
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$url = $this->_chatConfig->getHostDomain().'api/v1/messages?anchor=newest&num_before=100&num_after=0&narrow=[{"operator":"stream","operand":"'.$streamName.'"},{"operator":"topic","operand":"'.$topic.'"}]&apply_markdown=false';
$request = new GuzzRequest('GET', $url, $headers);
$promise = $client->sendAsync($request)->then(function ($response) {
echo $response->getBody();
exit();
});
$promise->wait();
}
catch (\Exception $e) {
return json_encode(["code" => 500, "message" => "Error".$e]);
}
}
public function getMessageUnRead() {
try {
$topic = $this->_request->getParams()["topic"];
$streamName = $this->_chatConfig->getStreamName();
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$url = $this->_chatConfig->getHostDomain().'api/v1/messages?anchor=first_unread&num_before=0&num_after=99&narrow=[{"operator":"stream","operand":"'.$streamName.'"},{"operator":"topic","operand":"'.$topic.'"}]&apply_markdown=false';
$request = new GuzzRequest('GET', $url, $headers);
$promise = $client->sendAsync($request)->then(function ($response) {
echo $response->getBody();
exit();
});
$promise->wait();
}
catch (\Exception $e) {
return json_encode(["code" => 500, "message" => "Error".$e]);
}
}
public function registerQueue() {
try {
$topic = $this->_request->getParams()["topic"];
$streamName = $this->_chatConfig->getStreamName();
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$options = [
'multipart' => [
[
'name' => 'event_types',
'contents' => '["message"]',
],
[
'name' => 'narrow',
'contents' => '[["stream", "'.$streamName.'"], ["topic", "'.$topic.'"]]',
]
]
];
$request = new GuzzRequest('POST', $this->_chatConfig->getHostDomain().'api/v1/register', $headers);
$promise = $client->sendAsync($request, $options)->then(function ($response) {
echo $response->getBody();
exit();
});
$promise->wait();
}
catch (\Exception $e) {
return json_encode(["code" => 500, "message" => "Error".$e]);
}
}
public function listenMessage() {
try {
$params = $this->_request->getParams();
$queueId = $params["queue_id"];
$lastEventId = $params["last_event_id"];
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$url = $this->_chatConfig->getHostDomain().'api/v1/events?queue_id='.$queueId.'&last_event_id='.$lastEventId;
$request = new GuzzRequest('GET', $url, $headers);
$promise = $client->sendAsync($request)->then(function ($response) {
echo $response->getBody();
exit();
});
$promise->wait();
}
catch (\Exception $e) {
return json_encode(["code" => 500, "message" => "Error".$e]);
}
}
public function sendMessage() {
try {
$params = $this->_request->getParams();
$content = $params["content"];
$topic = $params["topic"];
$streamName = $this->_chatConfig->getStreamName();
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$url = $this->_chatConfig->getHostDomain().'api/v1/messages';
$options = [
'multipart' => [
[
'name' => 'to',
'contents' => $streamName,
],
[
'name' => 'type',
'contents' => 'stream',
],
[
'name' => 'topic',
'contents' => $topic,
],
[
'name' => 'content',
'contents' => $content,
]
]
];
$request = new GuzzRequest('POST', $url, $headers);
$promise = $client->sendAsync($request, $options)->then(function ($response) {
return json_encode(["code" => 200, "message" => "Success"]);
});
$promise->wait();
}
catch (\Exception $e) {
return json_encode(["code" => 500, "message" => "Error".$e]);
}
}
public function markTopicAsRead() {
try {
$params = $this->_request->getParams();
$topic = $params["topic"];
$streamID = $this->_chatConfig->getStreamID();
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$url = $this->_chatConfig->getHostDomain().'api/v1/mark_topic_as_read';
$options = [
'multipart' => [
[
'name' => 'stream_id',
'contents' => $streamID,
],
[
'name' => 'topic_name',
'contents' => $topic,
]
]
];
$request = new GuzzRequest('POST', $url, $headers);
$promise = $client->sendAsync($request, $options)->then(function ($response) {
return json_encode(["code" => 200, "message" => "Success"]);
});
$promise->wait();
}
catch (\Exception $e) {
return json_encode(["code" => 500, "message" => "Error".$e]);
}
}
/**
* Api for make offer
* @param string[] $data
* @return string
*/
public function makeAnOffer($data) {
try {
$topic = $data["customer-email"];
// $streamName = $this->_chatConfig->getStreamMakeOffer();
$streamName = $this->_chatConfig->getStreamName();
$content = "Product: [".$data["product-sku"]."](".$data["product-url"].") \nSell Price: **".$data["product-sell-price"]."** \nCustomer Offer Price: **".$data["customer-offer"]."** \nCustomer: ".$data["customer-name"]." \nEmail: ".$data["customer-email"]." \nPhone: ".$data["customer-mobile-phone"]." \nCustomer shipping destination: ".$data["customer-country"]." \nMessage: ".$data["customer-message"];
$client = new Client();
$headers = [
'Authorization' => $this->_chatConfig->getZulipAuthToken()
];
$url = $this->_chatConfig->getHostDomain().'api/v1/messages';
$options = [
'multipart' => [
[
'name' => 'to',
'contents' => $streamName,
],
[
'name' => 'type',
'contents' => 'stream',
],
[
'name' => 'topic',
'contents' => $topic,
],
[
'name' => 'content',
'contents' => $content,
]
]
];
$request = new GuzzRequest('POST', $url, $headers);
$promise = $client->sendAsync($request, $options)->then(function ($response) {
return true;
});
$promise->wait();
return $request->getBody()->getContents();
}
catch (\Exception $e) {
return false;
}
}
}