PluginProbe ʕ •ᴥ•ʔ
Brevo – Email, SMS, Web Push, Chat, and more. / 3.0.4
Brevo – Email, SMS, Web Push, Chat, and more. v3.0.4
2.9.13 2.9.14 2.9.15 2.9.16 2.9.17 2.9.18 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8 2.9.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.9 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.2 3.1.20 3.1.21 3.1.22 3.1.23 3.1.24 3.1.25 3.1.26 3.1.27 3.1.28 3.1.29 3.1.3 3.1.30 3.1.31 3.1.32 3.1.33 3.1.34 3.1.35 3.1.36 3.1.37 3.1.38 3.1.39 3.1.4 3.1.40 3.1.41 3.1.42 3.1.43 3.1.44 3.1.45 3.1.46 3.1.47 3.1.48 3.1.49 3.1.5 3.1.50 3.1.51 3.1.52 3.1.53 3.1.54 3.1.55 3.1.56 3.1.57 3.1.58 3.1.59 3.1.6 3.1.60 3.1.61 3.1.62 3.1.63 3.1.64 3.1.65 3.1.66 3.1.67 3.1.68 3.1.69 3.1.7 3.1.70 3.1.71 3.1.72 3.1.73 3.1.74 3.1.75 3.1.76 3.1.77 3.1.78 3.1.79 3.1.8 3.1.80 3.1.81 3.1.82 3.1.83 3.1.84 3.1.85 3.1.86 3.1.87 3.1.88 3.1.89 3.1.9 3.1.90 3.1.91 3.1.92 3.1.93 3.1.94 3.1.95 3.1.96 3.1.97 3.1.98 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 trunk 1.0 1.5 2.0.8 2.9.10 2.9.11 2.9.12
mailin / inc / SendinblueApiClient.php
mailin / inc Last commit date
templates 5 years ago SendinblueApiClient.php 5 years ago function.wp_mail.php 5 years ago index.php 5 years ago mailin.php 5 years ago sendinblue.php 5 years ago sib-api-manager.php 5 years ago sib-form-preview.php 5 years ago sib-sms-code.php 5 years ago table-forms.php 5 years ago
SendinblueApiClient.php
307 lines
1 <?php
2
3
4 class SendinblueApiClient
5 {
6 const API_BASE_URL = 'https://api.sendinblue.com/v3';
7 const HTTP_METHOD_GET = 'GET';
8 const HTTP_METHOD_POST = 'POST';
9 const HTTP_METHOD_PUT = 'PUT';
10 const HTTP_METHOD_DELETE = 'DELETE';
11 const CAMPAIGN_TYPE_EMAIL = 'email';
12 const CAMPAIGN_TYPE_SMS = 'sms';
13 const RESPONSE_CODE_OK = 200;
14 const RESPONSE_CODE_CREATED = 201;
15 const RESPONSE_CODE_ACCEPTED = 202;
16
17 private $apiKey;
18 private $lastResponseCode;
19
20 /**
21 * SendinblueApiClient constructor.
22 */
23 public function __construct()
24 {
25 $this->apiKey = get_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
26 }
27
28 /**
29 * @return mixed
30 */
31 public function getAccount()
32 {
33 return $this->get('/account');
34 }
35
36 /**
37 * @return mixed
38 */
39 public function getAttributes()
40 {
41 return $this->get("/contacts/attributes");
42 }
43
44 /**
45 * @param $type,$name,$data
46 * @return mixed
47 */
48 public function createAttribute($type,$name,$data)
49 {
50 return $this->post("/contacts/attributes/".$type."/".$name,$data);
51 }
52
53 /**
54 * @param $id
55 * @return mixed
56 */
57 public function getEmailTemplate($id)
58 {
59 return $this->get("/smtp/templates/".$id);
60 }
61
62 /**
63 * @param string $type
64 * @param array $data
65 * @return array
66 */
67 public function getAllCampaignsByType($type = self::CAMPAIGN_TYPE_EMAIL, $data = [])
68 {
69 $campaigns =[];
70
71 if (!isset($data['offset'])) {
72 $data['offset'] = 0;
73 }
74
75 do {
76 if ($type === self::CAMPAIGN_TYPE_SMS) {
77 $response = $this->getSmsCampaigns($data);
78 } else {
79 $response = $this->getEmailCampaigns($data);
80 }
81
82 if (isset($response['campaigns']) && is_array($response['campaigns'])) {
83 $campaigns = array_merge($campaigns, $response['campaigns']);
84 $data['offset']++;
85 }
86 } while (!empty($response['campaigns']));
87
88 return $campaigns;
89 }
90
91 /**
92 * @param $data
93 * @return mixed
94 */
95 public function getEmailCampaigns($data)
96 {
97 return $this->get("/emailCampaigns",$data);
98 }
99
100 /**
101 * @param $data
102 * @return mixed
103 */
104 public function getSmsCampaigns($data)
105 {
106 return $this->get("/smsCampaigns",$data);
107 }
108
109 /**
110 * @param $data
111 * @return mixed
112 */
113 public function getEmailTemplates($data)
114 {
115 return $this->get("/smtp/templates",$data);
116 }
117
118 /**
119 * @param $data
120 * @return mixed
121 */
122 public function sendEmail($data)
123 {
124 return $this->post("/smtp/email",$data);
125 }
126
127 /**
128 * @param $id,$data
129 * @return mixed
130 */
131 public function sendTransactionalTemplate($id,$data)
132 {
133 return $this->post("/smtp/templates/".$id."/send",$data);
134 }
135
136 /**
137 * @param $email
138 * @return mixed
139 */
140 public function getUser($email)
141 {
142 return $this->get("/contacts/". urlencode($email));
143 }
144
145 /**
146 * @param $data
147 * @return mixed
148 */
149 public function createUser($data)
150 {
151 return $this->post("/contacts",$data);
152 }
153
154 /**
155 * @return mixed
156 */
157 public function getSenders()
158 {
159 return $this->get("/senders");
160 }
161
162 /**
163 * @param $email,$data
164 * @return mixed
165 */
166 public function updateUser($email, $data)
167 {
168 return $this->put("/contacts/".$email, $data);
169 }
170
171 /**
172 * @param $data
173 * @return mixed
174 */
175 public function createList($data)
176 {
177 return $this->post("/contacts/lists",$data);
178 }
179
180 /**
181 * @param $data
182 * @return mixed
183 */
184 public function getLists($data)
185 {
186 return $this->get("/contacts/lists",$data);
187 }
188
189 /**
190 * @param $data
191 * @return mixed
192 */
193 public function getAllLists()
194 {
195 $lists = array("lists" => array(), "count" => 0);
196 $offset = 0;
197 $limit = 50;
198 do {
199 $list_data = $this->getLists(array('limit' => $limit, 'offset' => $offset));
200 if (isset($list_data["lists"]) && is_array($list_data["lists"])) {
201 $lists["lists"] = array_merge($lists["lists"],$list_data["lists"]) ;
202 $offset += 50;
203 $lists["count"] = $list_data["count"];
204 }
205 }
206 while(!empty($lists['lists']) && count($lists["lists"]) < $list_data["count"]);
207
208 return $lists;
209 }
210
211 /**
212 * @param $data
213 * @return mixed
214 */
215 public function importContacts($data)
216 {
217 return $this->post('/contacts/import', $data);
218 }
219
220 /**
221 * @param $endpoint
222 * @param array $parameters
223 * @return mixed
224 */
225 public function get($endpoint, $parameters = [])
226 {
227 if ($parameters) {
228 foreach ($parameters as $key => $parameter) {
229 if (is_bool($parameter)) {
230 // http_build_query converts bool to int
231 $parameters[$key] = $parameter ? 'true' : 'false';
232 }
233 }
234 $endpoint .= '?' . http_build_query($parameters);
235 }
236 return $this->makeHttpRequest(self::HTTP_METHOD_GET, $endpoint);
237 }
238
239 /**
240 * @param $endpoint
241 * @param array $data
242 * @return mixed
243 */
244 public function post($endpoint, $data = [])
245 {
246 return $this->makeHttpRequest(self::HTTP_METHOD_POST, $endpoint, $data);
247 }
248
249 /**
250 * @param $endpoint
251 * @param array $data
252 * @return mixed
253 */
254 public function put($endpoint, $data = [])
255 {
256 return $this->makeHttpRequest(self::HTTP_METHOD_PUT, $endpoint, $data);
257 }
258
259 /**
260 * @param $method
261 * @param $endpoint
262 * @param array $body
263 * @return mixed
264 */
265 private function makeHttpRequest($method, $endpoint, $body = [])
266 {
267 $url = self::API_BASE_URL . $endpoint;
268
269 $args = [
270 'timeout' => 10000,
271 'method' => $method,
272 'headers' => [
273 'api-key' => $this->apiKey,
274 'Content-Type' => 'application/json'
275 ],
276 ];
277
278 if ($method != self::HTTP_METHOD_GET && $method != self::HTTP_METHOD_DELETE) {
279 if (isset($body['listIds'])) {
280 $body['listIds'] = array_map('intval', (array) $body['listIds']);
281 }
282 $args['body'] = wp_json_encode($body);
283 }
284
285 $response = wp_remote_request($url, $args);
286 $this->lastResponseCode = wp_remote_retrieve_response_code($response);
287
288 if (is_wp_error($response)) {
289 $data = [
290 'code' => $response->get_error_code(),
291 'message' => $response->get_error_message()
292 ];
293 } else {
294 $data = json_decode(wp_remote_retrieve_body($response), true);
295 }
296
297 return $data;
298 }
299
300 /**
301 * @return int
302 */
303 public function getLastResponseCode()
304 {
305 return $this->lastResponseCode;
306 }
307 }