source: spip-zone/_plugins_/mailshot/trunk/lib/mailjet-api-php/mailjet-3.php @ 95510

Last change on this file since 95510 was 95510, checked in by cedric@…, 4 years ago

faire marcher les DELETE du webhook sur l'api mail jet aussi si on utilise SPIP 3 (mais c'est pas beau, a faire en curl ?)

File size: 7.5 KB
Line 
1<?php
2
3/**
4 * Mailjet Public API
5 *
6 * @package    API v3
7 * @author    Nursit
8 * @link    http://api.mailjet.com/
9 *
10 */
11
12class Mailjet {
13        var $version = 3;
14        var $apiVersion = 'v3/';
15
16        # Connect thru https protocol
17        var $secure = true;
18
19        # Mode debug ? 0 none / 1 errors only / 2 all
20        var $debug = 0;
21
22        # Edit with your Mailjet Infos
23        var $apiKey = '';
24        var $secretKey = '';
25
26        var $_method = '';
27        var $_request = '';
28        var $_data = '';
29        var $_response = '';
30        var $_error = '';
31
32        // Constructor function
33        public function __construct($apiKey = false, $secretKey = false){
34                if ($apiKey) $this->apiKey = $apiKey;
35                if ($secretKey) $this->secretKey = $secretKey;
36                $this->apiUrl = (($this->secure) ? 'https' : 'http') . '://'
37                  . ($this->apiKey ? $this->apiKey . ':' . $this->secretKey . '@' : '')
38                        . 'api.mailjet.com/' . $this->apiVersion . '';
39        }
40
41        /*
42         * Legacy methods
43         */
44        public function userSenderadd($params){
45                $data = array('email'=>$params['email']);
46                return $this->sender(array('data'=>$data));
47        }
48
49        public function __call($method, $args){
50                # params
51                $params = (sizeof($args)>0) ? $args[0] : array();
52
53                $data = '';
54                $request = 'GET';
55
56                # request method
57                if (isset($params["method"])) {
58                        $request = $params["method"];
59                        unset($params["method"]);
60                }
61
62                # Make request
63                $result = $this->sendRequest($method, $params, $request);
64
65                # Return result
66                $return = ($result===true) ? $this->_response : false;
67
68                if ($this->_error){
69                        $url_log = "api.mailjet.com/".$this->apiVersion.$this->_method;
70                        spip_log("$url_log : ".$this->_error,'mailshot'._LOG_ERREUR);
71                }
72                elseif (isset($this->_response['StatusCode'])){
73                        $url_log = "api.mailjet.com/".$this->apiVersion.$this->_method;
74                        spip_log("$url_log : status ".$this->_response['StatusCode']." - ".$this->_response['ErrorInfo'].", ".$this->_response['ErrorMessage'],'mailshot'._LOG_INFO_IMPORTANTE);
75                }
76
77                /*
78                if ($this->debug==2 || ($this->debug==1 && $return==false)){
79                        $this->debug();
80                }*/
81
82                return $return;
83        }
84
85
86        /**
87         * @param bool $method
88         *   api call method
89         * @param array $params
90         *   path : subpath of the method (:id/validate for calling sender/:id/validate)
91         *   data : data to send as a POST
92         *   filters : args to add in query string to filter results
93         * @param string $request
94         *   GET/POST/PUT/...
95         * @return bool
96         */
97        public function sendRequest($method = false, $params = array(), $request = "GET"){
98                # Method
99                $this->_method = $method;
100                $this->_request = $request;
101                $this->_data = '';
102                $this->_response ='';
103                $this->_error ='';
104
105                // submethod path ?
106                if (isset($params['path'])){
107                        $method .= "/" . ltrim($params['path'],"/");
108                        $this->_method = $method;
109                }
110
111                // data is the json body of request
112                if (isset($params['data'])){
113                        $data = $params['data'];
114                        if (!is_string($data)){
115                                include_spip('inc/json');
116                                $data = json_encode($data);
117                        }
118                        $entete = "Content-Type: application/json\r\n";
119                        $this->_data = $entete . "\r\n" . $data;
120                        $this->_request = $request = 'POST';
121                }
122
123
124                include_spip('inc/distant');
125                if ($method!=='send'){
126                        $method = "REST/$method";
127                }
128
129                $url = $this->apiUrl . $method;
130                $url_log = "api.mailjet.com/".$this->apiVersion.$method;
131
132                // filters is the query string part of request
133                if (isset($params['filters'])){
134                        $qs = $params['filters'];
135                        if (!is_string($qs)){
136                                $qs = http_build_query($qs);
137                        }
138                        $url .= "?$qs";
139                        $url_log .= "?$qs";
140                }
141
142
143                try {
144                        if (!function_exists('recuperer_url')){
145                                // en cas de DELETE on appelle directement recuperer_lapage
146                                // en esperant ne pas avoir de 301
147                                if (in_array($this->_request,array('DELETE'))){
148                                        $response = recuperer_lapage($url,false,$this->_request,1048576,$this->_data);
149                                }
150                                else {
151                                        $response = recuperer_page($url,false,false,null,$this->_data);
152                                }
153                                if (!$response){
154                                        $this->_error = 'erreur lors de recuperer_page sur API Mailjet '.$this->apiVersion;
155                return false;
156                                }
157                                $this->_response_code = 200; // on suppose car sinon renvoie false
158                        }
159                        else {
160                                $options = array(
161                                        'methode' => $this->_request,
162                                );
163                                if ($this->_data) {
164                                        $options['datas'] = $this->_data;
165                                }
166                                $res = recuperer_url($url,$options);
167                                $this->_response_code = $res['status'];
168                                $response = $res['page'];
169                        }
170
171                }
172                catch (Exception $e) {
173                        $this->_error = "sendRequest $url_log : ".$e->getMessage();
174                        spip_log($this->_error,"mailshot"._LOG_ERREUR);
175      return false;
176    }
177
178                spip_log("$request $url_log resultat: " . $response,"mailshot"._LOG_DEBUG);
179                if ($response){
180                        $this->_response = json_decode($response,true);
181                }
182                return (intval($this->_response_code/100)==2) ? true : false;
183        }
184
185
186        public function debug(){
187                echo '<style type="text/css">';
188                echo '
189
190                #debugger {width: 100%; font-family: arial;}
191                #debugger table {padding: 0; margin: 0 0 20px; width: 100%; font-size: 11px; text-align: left;border-collapse: collapse;}
192                #debugger th, #debugger td {padding: 2px 4px;}
193                #debugger tr.h {background: #999; color: #fff;}
194                #debugger tr.Success {background:#90c306; color: #fff;}
195                #debugger tr.Error {background:#c30029 ; color: #fff;}
196                #debugger tr.Not-modified {background:orange ; color: #fff;}
197                #debugger th {width: 20%; vertical-align:top; padding-bottom: 8px;}
198
199                ';
200                echo '</style>';
201
202                echo '<div id="debugger">';
203
204                if (isset($this->_response_code)) :
205
206                        if ($this->_response_code==200) :
207
208                                echo '<table>';
209                                echo '<tr class="Success"><th>Success</th><td></td></tr>';
210                                echo '<tr><th>Status code</th><td>' . $this->_response_code . '</td></tr>';
211
212                                if (isset($this->_response)) :
213                                        echo '<tr><th>Response</th><td><pre>' . utf8_decode(print_r($this->_response, 1)) . '</pre></td></tr>';
214                                endif;
215
216                                echo '</table>'; elseif ($this->_response_code==304) :
217
218                                echo '<table>';
219                                echo '<tr class="Not-modified"><th>Error</th><td></td></tr>';
220                                echo '<tr><th>Error no</th><td>' . $this->_response_code . '</td></tr>';
221                                echo '<tr><th>Message</th><td>Not Modified</td></tr>';
222                                echo '</table>'; else :
223
224                                echo '<table>';
225                                echo '<tr class="Error"><th>Error</th><td></td></tr>';
226                                echo '<tr><th>Error no</th><td>' . $this->_response_code . '</td></tr>';
227                                if (isset($this->_response)) :
228                                        if (is_array($this->_response) OR  is_object($this->_response)):
229                                                echo '<tr><th>Status</th><td><pre>' . print_r($this->_response, true) . '</pre></td></tr>'; else:
230                                                echo '<tr><th>Status</th><td><pre>' . $this->_response . '</pre></td></tr>';
231                                        endif;
232                                endif;
233                                echo '</table>';
234
235                        endif;
236
237                endif;
238
239                $call_url = parse_url($this->call_url);
240
241                echo '<table>';
242                echo '<tr class="h"><th>API config</th><td></td></tr>';
243                echo '<tr><th>Protocole</th><td>' . $call_url['scheme'] . '</td></tr>';
244                echo '<tr><th>Host</th><td>' . $call_url['host'] . '</td></tr>';
245                echo '<tr><th>Version</th><td>' . $this->version . '</td></tr>';
246                echo '</table>';
247
248                echo '<table>';
249                echo '<tr class="h"><th>Call infos</th><td></td></tr>';
250                echo '<tr><th>Method</th><td>' . $this->_method . '</td></tr>';
251                echo '<tr><th>Request type</th><td>' . $this->_request . '</td></tr>';
252                echo '<tr><th>Get Arguments</th><td>';
253
254                $args = explode("&", $call_url['query']);
255                foreach ($args as $arg){
256                        $arg = explode("=", $arg);
257                        echo '' . $arg[0] . ' = <span style="color:#ff6e56;">' . $arg[1] . '</span><br/>';
258                }
259
260                echo '</td></tr>';
261
262                if ($this->_request_post){
263                        echo '<tr><th>Post Arguments</th><td>';
264
265                        foreach ($this->_request_post as $k => $v){
266                                echo $k . ' = <span style="color:#ff6e56;">' . $v . '</span><br/>';
267                        }
268
269                        echo '</td></tr>';
270                }
271
272                echo '<tr><th>Call url</th><td>' . $this->call_url . '</td></tr>';
273                echo '</table>';
274
275                echo '</div>';
276        }
277}
Note: See TracBrowser for help on using the repository browser.