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

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

Loger les reponses en erreurs y compris si http status est en 4xx ou 5xx

File size: 7.1 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 (isset($this->_response['StatusCode'])){
69                        $url_log = "api.mailjet.com/".$this->apiVersion.$this->_method;
70                        spip_log("$url_log : status ".$this->_response['StatusCode']." - ".$this->_response['ErrorInfo'].", ".$this->_response['ErrorMessage'],'mailshot'._LOG_INFO_IMPORTANTE);
71                }
72
73                /*
74                if ($this->debug==2 || ($this->debug==1 && $return==false)){
75                        $this->debug();
76                }*/
77
78                return $return;
79        }
80
81
82        /**
83         * @param bool $method
84         *   api call method
85         * @param array $params
86         *   path : subpath of the method (:id/validate for calling sender/:id/validate)
87         *   data : data to send as a POST
88         *   filters : args to add in query string to filter results
89         * @param string $request
90         *   GET/POST/PUT/...
91         * @return bool
92         */
93        public function sendRequest($method = false, $params = array(), $request = "GET"){
94                # Method
95                $this->_method = $method;
96                $this->_request = $request;
97                $this->_data = '';
98                $this->_response ='';
99                $this->_error ='';
100
101                // submethod path ?
102                if (isset($params['path'])){
103                        $method .= "/" . ltrim($params['path'],"/");
104                        $this->_method = $method;
105                }
106
107                // data is the json body of request
108                if (isset($params['data'])){
109                        $data = $params['data'];
110                        if (!is_string($data)){
111                                include_spip('inc/json');
112                                $data = json_encode($data);
113                        }
114                        $entete = "Content-Type: application/json\r\n";
115                        $this->_data = $entete . "\r\n" . $data;
116                        $this->_request = $request = 'POST';
117                }
118
119
120                include_spip('inc/distant');
121                if ($method!=='send'){
122                        $method = "REST/$method";
123                }
124
125                $url = $this->apiUrl . $method;
126                $url_log = "api.mailjet.com/".$this->apiVersion.$method;
127
128                // filters is the query string part of request
129                if (isset($params['filters'])){
130                        $qs = $params['filters'];
131                        if (!is_string($qs)){
132                                $qs = http_build_query($qs);
133                        }
134                        $url .= "?$qs";
135                        $url_log .= "?$qs";
136                }
137
138
139                try {
140                        if (!function_exists('recuperer_url')){
141                                $response = recuperer_page($url,false,false,null,$this->_data);
142                                if (!$response){
143                                        $this->_error = 'erreur lors de recuperer_page sur API Mailjet '.$this->apiVersion;
144                return false;
145                                }
146                                $this->_response_code = 200; // on suppose car sinon renvoie false
147                        }
148                        else {
149                                $options = array(
150                                        'methode' => $this->_request,
151                                );
152                                if ($this->_data) {
153                                        $options['datas'] = $this->_data;
154                                }
155                                $res = recuperer_url($url,$options);
156                                $this->_response_code = $res['status'];
157                                $response = $res['page'];
158                        }
159
160                }
161                catch (Exception $e) {
162                        $this->_error = "sendRequest $url_log : ".$e->getMessage();
163                        spip_log($this->_error,"mailshot"._LOG_ERREUR);
164      return false;
165    }
166
167                spip_log("$request $url_log resultat: " . $response,"mailshot"._LOG_DEBUG);
168                if ($response){
169                        $this->_response = json_decode($response,true);
170                }
171                return (intval($this->_response_code/100)==2) ? true : false;
172        }
173
174
175        public function debug(){
176                echo '<style type="text/css">';
177                echo '
178
179                #debugger {width: 100%; font-family: arial;}
180                #debugger table {padding: 0; margin: 0 0 20px; width: 100%; font-size: 11px; text-align: left;border-collapse: collapse;}
181                #debugger th, #debugger td {padding: 2px 4px;}
182                #debugger tr.h {background: #999; color: #fff;}
183                #debugger tr.Success {background:#90c306; color: #fff;}
184                #debugger tr.Error {background:#c30029 ; color: #fff;}
185                #debugger tr.Not-modified {background:orange ; color: #fff;}
186                #debugger th {width: 20%; vertical-align:top; padding-bottom: 8px;}
187
188                ';
189                echo '</style>';
190
191                echo '<div id="debugger">';
192
193                if (isset($this->_response_code)) :
194
195                        if ($this->_response_code==200) :
196
197                                echo '<table>';
198                                echo '<tr class="Success"><th>Success</th><td></td></tr>';
199                                echo '<tr><th>Status code</th><td>' . $this->_response_code . '</td></tr>';
200
201                                if (isset($this->_response)) :
202                                        echo '<tr><th>Response</th><td><pre>' . utf8_decode(print_r($this->_response, 1)) . '</pre></td></tr>';
203                                endif;
204
205                                echo '</table>'; elseif ($this->_response_code==304) :
206
207                                echo '<table>';
208                                echo '<tr class="Not-modified"><th>Error</th><td></td></tr>';
209                                echo '<tr><th>Error no</th><td>' . $this->_response_code . '</td></tr>';
210                                echo '<tr><th>Message</th><td>Not Modified</td></tr>';
211                                echo '</table>'; else :
212
213                                echo '<table>';
214                                echo '<tr class="Error"><th>Error</th><td></td></tr>';
215                                echo '<tr><th>Error no</th><td>' . $this->_response_code . '</td></tr>';
216                                if (isset($this->_response)) :
217                                        if (is_array($this->_response) OR  is_object($this->_response)):
218                                                echo '<tr><th>Status</th><td><pre>' . print_r($this->_response, true) . '</pre></td></tr>'; else:
219                                                echo '<tr><th>Status</th><td><pre>' . $this->_response . '</pre></td></tr>';
220                                        endif;
221                                endif;
222                                echo '</table>';
223
224                        endif;
225
226                endif;
227
228                $call_url = parse_url($this->call_url);
229
230                echo '<table>';
231                echo '<tr class="h"><th>API config</th><td></td></tr>';
232                echo '<tr><th>Protocole</th><td>' . $call_url['scheme'] . '</td></tr>';
233                echo '<tr><th>Host</th><td>' . $call_url['host'] . '</td></tr>';
234                echo '<tr><th>Version</th><td>' . $this->version . '</td></tr>';
235                echo '</table>';
236
237                echo '<table>';
238                echo '<tr class="h"><th>Call infos</th><td></td></tr>';
239                echo '<tr><th>Method</th><td>' . $this->_method . '</td></tr>';
240                echo '<tr><th>Request type</th><td>' . $this->_request . '</td></tr>';
241                echo '<tr><th>Get Arguments</th><td>';
242
243                $args = explode("&", $call_url['query']);
244                foreach ($args as $arg){
245                        $arg = explode("=", $arg);
246                        echo '' . $arg[0] . ' = <span style="color:#ff6e56;">' . $arg[1] . '</span><br/>';
247                }
248
249                echo '</td></tr>';
250
251                if ($this->_request_post){
252                        echo '<tr><th>Post Arguments</th><td>';
253
254                        foreach ($this->_request_post as $k => $v){
255                                echo $k . ' = <span style="color:#ff6e56;">' . $v . '</span><br/>';
256                        }
257
258                        echo '</td></tr>';
259                }
260
261                echo '<tr><th>Call url</th><td>' . $this->call_url . '</td></tr>';
262                echo '</table>';
263
264                echo '</div>';
265        }
266}
Note: See TracBrowser for help on using the repository browser.