Files
aux-bieaux-legumes/local/modules/Mailjet/Api/MailjetClient.php

139 lines
4.1 KiB
PHP

<?php
/*************************************************************************************/
/* This file is part of the Thelia package. */
/* */
/* Copyright (c) OpenStudio */
/* email : dev@thelia.net */
/* web : http://www.thelia.net */
/* */
/* For the full copyright and license information, please view the LICENSE.txt */
/* file that was distributed with this source code. */
/*************************************************************************************/
namespace Mailjet\Api;
/**
* Class MailjetClient
* @package Mailjet\Api
* @author Benjamin Perche <bperche@openstudio.com>
*/
class MailjetClient
{
const RESOURCE_CONTACT = "contact";
const RESOURCE_LIST_RECIPIENT = "listrecipient";
/**
* @var resource
*/
protected $curlHandler;
protected $auth;
protected $wsAddress;
public function __construct($apiKey, $apiSecret, $wsAddress)
{
$this->wsAddress = $wsAddress;
$this->auth = sprintf("%s:%s", $apiKey, $apiSecret);
}
protected function initilize($address)
{
/**
* Initialize connection
*/
$this->curlHandler = curl_init($address);
curl_setopt_array($this->curlHandler, [
CURLOPT_USERPWD => $this->auth,
CURLOPT_RETURNTRANSFER => true,
]);
}
public function get($resource, $id = null, array $params = array())
{
$address = $this->lazyBuildAddress($resource, $id, $params);
$this->initilize($address);
return $this->getResponse();
}
public function post($resource, array $params = array())
{
$address = $this->lazyBuildAddress($resource, null, []);
$this->initilize($address);
$this->initializePostFields($params);
curl_setopt($this->curlHandler, CURLOPT_POST, count($params));
return $this->getResponse();
}
public function put($resource, $id, array $params = array())
{
$address = $this->lazyBuildAddress($resource, $id, []);
$this->initilize($address);
$this->initializePostFields($params);
curl_setopt($this->curlHandler, CURLOPT_CUSTOMREQUEST, "PUT");
return $this->getResponse();
}
public function delete($resource, $id, array $params = array())
{
$address = $this->lazyBuildAddress($resource, $id, $params);
$this->initilize($address);
curl_setopt($this->curlHandler, CURLOPT_CUSTOMREQUEST, "DELETE");
return $this->getResponse();
}
protected function initializePostFields(array $params)
{
// sanitize
$string = '';
foreach ($params as $key => $value) {
if ('' !== trim($value)) {
$string .= $key . '=' . urlencode($value) . '&';
}
}
$string = substr($string, 0, -1);
curl_setopt($this->curlHandler, CURLOPT_POSTFIELDS, $string);
}
protected function getResponse()
{
$response = curl_exec($this->curlHandler);
$code = curl_getinfo($this->curlHandler, CURLINFO_HTTP_CODE);
$error = curl_error($this->curlHandler);
$errno = curl_errno($this->curlHandler);
curl_close($this->curlHandler);
return [$code, $response ?: $error . " (errno $errno)"];
}
protected function lazyBuildAddress($resource, $id = null, $params = array())
{
$address = sprintf("%s/%s", $this->wsAddress, $resource);
if (null !== $id) {
$address = sprintf("%s/%s", $address, $id);
}
$address .= "?";
foreach ($params as $name => $value) {
if ('' !== trim($value)) {
$address .= $name . "=" . $value . "&";
}
}
return $address;
}
}