PluginProbe
WPGet API – Connect to any external REST API / 1.7.0
WPGet API – Connect to any external REST API v1.7.0
1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.3 2.1.4 2.1.5 2.2.0 2.2.1 2.2.10 2.2.2 2.2.3 All 97 releases
← All changes | includes/class-api.php +64 -239 1.9.21.7.0 View file →
@@ -28,10 +28,8 @@
28 28 public $header_parameters = ''; // the header paramaters
29 29 public $body_parameters = ''; // the body paramaters
30 30 public $body_json_encode = ''; // body_json_encode body
31 31 public $body_url_encode = ''; // urlencode body
32 - public $body_xml_format = ''; // xml format body
33 - public $xml_root_node = 'root'; // root node for xml
34 32
35 33 public $response = ''; // the returned response
36 34
37 35 public $final_url = ''; // final URL
@@ -36,9 +34,9 @@
36 34
37 35 public $final_url = ''; // final URL
38 36 public $final_request_args = array(); // final request_args
39 37
40 - public $results_format = 'json_string'; // results format
38 + public $results_format = 'json_string'; // reseults format
41 39
42 40 public $timeout = 10; // the timeout
43 41 public $sslverify = 1; // the paramaters
44 42 public $debug = false;
@@ -60,9 +58,9 @@
60 58 $this->endpoint_id = sanitize_text_field( $endpoint_id );
61 59 $this->keys = $keys;
62 60 $this->args = $args;
63 61
64 - add_filter( 'wpgetapi_raw_data', array( $this, 'maybe_add_debug_info' ), 99, 2 );
62 + add_filter( 'wpgetapi_raw_data', array( $this, 'maybe_add_debug_info' ), 5, 2 );
65 63
66 64 }
67 65
68 66
@@ -70,29 +68,8 @@
70 68 * Init our api data
71 69 */
72 70 public function init() {
73 71
74 - // if we are doing importer plugin,
75 - // we need to intercept and modify most of our methods values
76 - if( $this->api_id == 'wpgetapi_importer' ) {
77 -
78 - $data = apply_filters( 'wpgetapi_api_importer_init', $this );
79 -
80 - if( $data ) {
81 -
82 - foreach ($data as $key => $value) {
83 - $this->{$key} = $value;
84 - }
85 -
86 - $this->query_parameters = ! empty( $this->query_parameters ) ? $this->do_parameters( $this->query_parameters ) : array();
87 - $this->header_parameters = ! empty( $this->header_parameters ) ? $this->do_parameters( $this->header_parameters ) : array();
88 - $this->body_parameters = ! empty( $this->body_parameters ) ? $this->do_parameters( $this->body_parameters ) : array();
89 - return;
90 -
91 - }
92 -
93 - }
94 -
95 72 // do some checks
96 73 if( empty( $this->setup ) || ! isset( $this->setup['apis'] ) || empty( $this->setup['apis'] ) )
97 74 return 'No API found.';
98 75
@@ -111,9 +88,9 @@
111 88 // loop through endpoints
112 89 foreach ( $this->api['endpoints'] as $index => $endpoint ) {
113 90
114 91 if( $this->endpoint_id == $endpoint['id'] ) {
115 -
92 +
116 93 $this->method = isset( $endpoint['method'] ) && $endpoint['method'] != '' ? sanitize_text_field( $endpoint['method'] ) : 'GET';
117 94 $this->cache_time = isset( $endpoint['cache_time'] ) && ! empty( $endpoint['cache_time'] ) ? absint( $endpoint['cache_time'] ) : '';
118 95 $this->endpoint = isset( $endpoint['endpoint'] ) && ! empty( $endpoint['endpoint'] ) ? sanitize_text_field( $endpoint['endpoint'] ) : '';
119 96
@@ -122,29 +99,13 @@
122 99 $this->header_parameters = isset( $endpoint['header_parameters'] ) && ! empty( $endpoint['header_parameters'] ) ? $this->do_parameters( $endpoint['header_parameters'] ) : array();
123 100
124 101 $this->body_parameters = isset( $endpoint['body_parameters'] ) && ! empty( $endpoint['body_parameters'] ) ? $this->do_parameters( $endpoint['body_parameters'] ) : array();
125 102
126 - // how to encode the body
127 103 $this->body_json_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'true' ? true : false;
128 104 $this->body_url_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'url' ? true : false;
129 - $this->body_xml_format = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'xml' ? true : false;
130 105
131 - $this->xml_root_node = isset( $endpoint['xml_root'] ) && ! empty( $endpoint['xml_root'] ) ? $endpoint['xml_root'] : $this->xml_root_node;
132 -
133 106 $this->results_format = isset( $endpoint['results_format'] ) ? sanitize_text_field( $endpoint['results_format'] ) : $this->results_format;
134 -
135 -
136 - if(
137 - // set the format to php array data if html format is set
138 - ( isset( $this->args['format'] ) && $this->args['format'] == 'html' && $this->results_format != 'xml_array' ) ||
139 - // set the format to php array data if it is set in the args (coming from the importer)
140 - ( isset( $this->args['results_format'] ) && $this->args['results_format'] == 'json_decoded' )
141 - ) {
142 - $this->results_format = 'json_decoded';
143 - }
144 -
145 107 }
146 -
147 108 }
148 109
149 110 $this->timeout = isset( $this->api['timeout'] ) && ! empty( $this->api['timeout'] ) ? $this->api['timeout'] : $this->timeout;
150 111 $this->sslverify = isset( $this->api['sslverify'] ) ? absint( $this->api['sslverify'] ) : $this->sslverify;
@@ -157,21 +118,58 @@
157 118 *
158 119 * @param string $field Field to retrieve
159 120 */
160 121 public function endpoint_output() {
122 + return $this->do_the_call();
123 + }
161 124
162 - do_action( 'wpgetapi_before_do_the_call', $this );
163 125
164 - return $this->do_the_call();
126 + /**
127 + * Sort out the parameters if they exist
128 + */
129 + public function do_parameters( $parameters ) {
130 +
131 + $new_array = array();
132 + $parameters = $this->decrypt($parameters);
165 133
134 + if( is_array( $parameters ) ) {
135 + foreach ( $parameters as $key => $parameter ) {
136 + if( ! empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
137 + $parameter['value'] = stripslashes( $parameter['value'] );
138 + $new_array[ sanitize_text_field( $parameter['name'] ) ] = $parameter['value'];
139 + }
140 + }
141 + }
142 +
143 + // look for array or json string and sort these out - for using such things in shortcode
144 + if( is_array( $new_array ) ) {
145 +
146 + foreach ( $new_array as $key => $value ) {
147 +
148 + // checking if the parameters have a json string
149 + if ( substr( $value, 0, 1 ) === '{' && substr( $value, -1 ) === '}' ) {
150 + $new_array[ $key ] = json_decode( $value, true);
151 + }
152 +
153 + // checking if the parameters have an array within the string
154 + // if they do, create them as an actual array
155 + if ( substr( $value, 0, 1 ) === '[' && substr( $value, -1 ) === ']' ) {
156 + $new_array[ $key ] = array( $value );
157 + }
158 +
159 + }
160 +
161 + }
162 +
163 + return $new_array;
164 +
166 165 }
167 166
168 -
169 167 /**
170 168 * Send the request and return our data
171 169 */
172 170 public function do_the_call() {
173 -
171 +
174 172 $this->init();
175 173
176 174 // build the URL
177 175 $this->final_url = apply_filters( 'wpgetapi_final_url', $this->build_url(), $this );
@@ -177,18 +175,9 @@
177 175 $this->final_url = apply_filters( 'wpgetapi_final_url', $this->build_url(), $this );
178 176
179 177 // build the request args
180 178 $this->final_request_args = apply_filters( 'wpgetapi_final_request_args', $this->build_request_args(), $this );
181 -
182 - /**
183 - * Check if we should stop or not. Setting $on to true, will stop us calling the api.
184 - * @param bool $on Whether on is set or not.
185 - */
186 179
187 - if ( apply_filters( 'wpgetapi_should_we_stop', false, $this ) ) {
188 - return;
189 - }
190 -
191 180 // POST request
192 181 if( $this->method == 'POST' )
193 182 $this->response = $this->POST_request();
194 183
@@ -199,12 +188,8 @@
199 188 // GET request
200 189 if( $this->method == 'GET' )
201 190 $this->response = $this->GET_request();
202 191
203 - // DELETE request
204 - if( $this->method == 'DELETE' )
205 - $this->response = $this->DELETE_request();
206 -
207 192 // wp error
208 193 if( is_wp_error( $this->response ) ) {
209 194 return apply_filters( 'wpgetapi_raw_error_data', json_encode( $this->response ), $this );
210 195 }
@@ -217,16 +202,13 @@
217 202
218 203 // get body
219 204 // modified in version 1.6.1 to allow for OAuth 2.0 plugin returning body already
220 205 $data = isset( $this->response['body'] ) ? $this->response['body'] : $this->response;
221 -
206 +
222 207 // returning in JSON format
223 208 if( $this->results_format == 'json_string' || $this->results_format == 'json_decoded' )
224 209 $data = $this->return_data( $data );
225 210
226 - if( $data === 'null' )
227 - $data = 'Result is null. Check that all endpoint settings are correct.';
228 -
229 211 return apply_filters( 'wpgetapi_raw_data', $data, $this );
230 212
231 213 }
232 214
@@ -239,17 +221,10 @@
239 221 // first make sure our endpoint starts with a slash
240 222 if ( substr( $this->endpoint, 0, 1 ) != '/' )
241 223 $this->endpoint = '/' . $this->endpoint;
242 224
243 - $this->endpoint = apply_filters( 'wpgetapi_endpoint', $this->endpoint, $this );
244 -
245 225 $url = untrailingslashit( $this->base_url ) . $this->endpoint;
246 226
247 - // if we have a URL pagination event from the import plugin
248 - // we need to modify the URL here
249 - if( isset( $this->args['paginate_url'] ) )
250 - $url = $this->args['paginate_url'];
251 -
252 227 // filter our params - added for use in Oauth 2.0 plugin
253 228 $params = apply_filters( 'wpgetapi_query_parameters', $this->query_parameters, $this );
254 229
255 230 // add empty array - was getting errors if it was just null or false
@@ -271,46 +246,26 @@
271 246 ), $this );
272 247
273 248
274 249 // if doing POST request, include body paramters
275 - if( $this->method == 'POST' || $this->method == 'PUT' || $this->method == 'DELETE' ) {
276 -
277 - // tokens are sent through here
250 + if( $this->method == 'POST' || $this->method == 'PUT' ) {
251 +
278 252 $this->body_parameters = apply_filters( 'wpgetapi_body_parameters', $this->body_parameters, $this );
279 253
280 - // do we json_encode the entire body
281 - if( $this->body_json_encode == true ) {
254 + // do we json_encode the entire body as a string
255 + if( $this->body_json_encode == true )
282 256 $this->body_parameters = json_encode( $this->body_parameters );
283 - }
284 257
285 - // do we urlencode the entire body
258 +
259 + // do we urlencode the entire body as a string
286 260 if( $this->body_url_encode == true ) {
287 -
288 - // checking if the parameters have a json string (raw)
289 - if (
290 - ( ! is_array( $this->body_parameters ) ) &&
291 - ( substr( $this->body_parameters, 0, 1 ) === '{' || substr( $this->body_parameters, 0, 1 ) === '[' )
292 - ) {
293 - $this->body_parameters = json_decode( $this->body_parameters, true );
261 + $data_raw = '';
262 + foreach ($this->body_parameters as $key => $value){
263 + $data_raw = $data_raw . $key . "=" . urlencode($value) . "&";
294 264 }
295 -
296 - $this->body_parameters = http_build_query( $this->body_parameters, '', '&' );
297 -
265 + $this->body_parameters = $data_raw;
298 266 }
299 267
300 - // do we xml the entire body
301 - if( $this->body_xml_format == true ) {
302 -
303 - $xml = new SimpleXmlElement( '<' . $this->xml_root_node . '/>' );
304 -
305 - foreach( $this->body_parameters as $key => $value) {
306 - $xml->addChild( $key, $value );
307 - }
308 -
309 - $this->body_parameters = $xml->asXML();
310 -
311 - }
312 -
313 268 // add our body parameters
314 269 if( $this->body_parameters && ! empty( $this->body_parameters ) )
315 270 $headers['body'] = $this->body_parameters;
316 271
@@ -332,10 +287,8 @@
332 287
333 288 }
334 289
335 290
336 -
337 -
338 291 /**
339 292 * Do a GET request
340 293 */
341 294 public function GET_request() {
@@ -341,19 +294,19 @@
341 294 public function GET_request() {
342 295 $response = '';
343 296 // so we can so something before the remote_get (caching)
344 297 $response = apply_filters( 'wpgetapi_before_get_request', $response, $this );
345 -
346 298 if( empty( $response ) )
347 299 $response = wp_remote_get( $this->final_url, $this->final_request_args );
300 +
348 301 return $response;
349 302 }
350 303
304 +
351 305 /**
352 306 * Do a POST request
353 307 */
354 308 public function POST_request() {
355 - $this->final_request_args['method'] = 'POST';
356 309 $response = wp_remote_post( $this->final_url, $this->final_request_args );
357 310 return $response;
358 311 }
359 312
@@ -365,18 +318,9 @@
365 318 $response = wp_remote_request( $this->final_url, $this->final_request_args );
366 319 return $response;
367 320 }
368 321
369 - /**
370 - * Do a DELETE request
371 - */
372 - public function DELETE_request() {
373 - $this->final_request_args['method'] = 'DELETE';
374 - $response = wp_remote_request( $this->final_url, $this->final_request_args );
375 - return $response;
376 - }
377 322
378 -
379 323 /**
380 324 * return data
381 325 */
382 326 public function return_data( $data ) {
@@ -381,114 +325,24 @@
381 325 */
382 326 public function return_data( $data ) {
383 327
384 328 $data = apply_filters( 'wpgetapi_json_response_body_before_decode', $data, $this->keys );
385 -
329 +
386 330 // converts all data to arrays, removing objects
387 - if( is_string( $data ) ) {
388 - $decode = json_decode( $data, true );
389 - if( json_last_error() ) {
390 - return esc_html( $data );
391 - } else {
392 - $data = $decode;
393 - }
394 - }
331 + if( is_string( $data ) )
332 + $data = json_decode( $data, true );
395 333
396 334 $data = apply_filters( 'wpgetapi_json_response_body', $data, $this->keys );
397 335
398 336 if( $this->results_format == 'json_string' )
399 337 return trim( json_encode( $data ),'"');
400 -
338 +
401 339 if( $this->results_format == 'json_decoded' )
402 340 return $data;
403 341
404 342 }
405 343
406 - /**
407 - * Sort out the parameters if they exist
408 - */
409 - public function do_parameters( $parameters ) {
410 -
411 - $new_array = array();
412 - $raw = '';
413 - $parameters = $this->decrypt( $parameters );
414 344
415 - if( is_array( $parameters ) ) {
416 - foreach ( $parameters as $key => $parameter ) {
417 -
418 - if( ! empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
419 -
420 - $parameter['value'] = stripslashes( $parameter['value'] );
421 -
422 - // if we have wpgetapi_on, delete it so we don't send to api
423 - if( $parameter['name'] == 'wpgetapi_on' ) {
424 - unset( $parameters[ $key ] );
425 - continue;
426 - }
427 -
428 - $new_array[ sanitize_text_field( $parameter['name'] ) ] = $parameter['value'];
429 -
430 - // if we are sending raw body
431 - } else if( empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
432 -
433 - $raw = stripslashes( $parameter['value'] );
434 -
435 - }
436 -
437 - }
438 - }
439 -
440 - // look for array or json string and sort these out - for using such things in shortcode
441 - if( ! empty( $new_array ) ) {
442 -
443 - foreach ( $new_array as $key => $value ) {
444 -
445 - // checking if the parameters have a json string
446 - if ( strpos( $value, '{' ) !== false && strpos( $value, '}' ) !== false ) {
447 - //if ( substr( $value, 0, 1 ) === '{' && substr( $value, -1 ) === '}' ) {
448 - $new_array[ $key ] = json_decode( $value, true );
449 - } else
450 -
451 - // checking if the parameters have an array within the string
452 - // if they do, create them as an actual array
453 - if ( substr( $value, 0, 1 ) === '[' && substr( $value, -1 ) === ']' ) {
454 - $value = trim( $value,"[]" );
455 - $new_array[ $key ] = array( $value );
456 - }
457 -
458 - // set value as integer
459 - if ( strpos( $value, 'integer(' ) !== false && substr( $value, -1 ) === ')' ) {
460 - preg_match("/\(([^\)]*)\)/", $value, $match );
461 - $result = $match[1];
462 - $new_array[ $key ] = absint( $result );
463 - }
464 -
465 - // set value as float
466 - if ( strpos( $value, 'float(' ) !== false && substr( $value, -1 ) === ')' ) {
467 - preg_match("/\(([^\)]*)\)/", $value, $match );
468 - $result = $match[1];
469 - $new_array[ $key ] = (float) $result;
470 -
471 - }
472 -
473 - // set value as boolean
474 - if ( strpos( $value, 'boolean(' ) !== false && substr( $value, -1 ) === ')' ) {
475 - preg_match("/\(([^\)]*)\)/", $value, $match );
476 - $result = $match[1];
477 - $result = filter_var( $result, FILTER_VALIDATE_BOOLEAN );
478 - $new_array[ $key ] = $result;
479 -
480 - }
481 -
482 - }
483 -
484 - }
485 -
486 - return $raw ? $raw : $new_array;
487 -
488 - }
489 -
490 -
491 345 /**
492 346 * decrypt our parameters from the DB
493 347 */
494 348 public function decrypt( $array_or_string ) {
@@ -597,39 +451,12 @@
597 451 </style>
598 452
599 453 <div class="wpgetapi-debug <?php echo $testing ? 'testing' : ''; ?>">
600 454
601 - <?php if( $testing ) { ?>
602 -
603 - <div class="debug-item">
604 - <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
605 - <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
606 - <div class="debug-result"><?php esc_html_e( $this->final_url ); ?></div>
607 - </div>
608 -
609 - <div class="debug-item">
610 - <h6><?php esc_html_e( 'Data Output', 'wpgetapi' ); ?></h6>
611 - <p class="small"><?php esc_html_e( 'The output that has been returned from the API. This is what the shortcode or template tag will display and can be formatted however you like.', 'wpgetapi' ); ?></p>
612 - <p class="small"><?php esc_html_e( 'See the ', 'wpgetapi' ); ?> <a target="_blank" href="https://wpgetapi.com/docs/?utm_campaign=Test Endpoint&utm_medium=Admin&utm_source=User"><?php esc_html_e( 'documentation', 'wpgetapi' ); ?></a> <?php esc_html_e( ' for help in formatting.', 'wpgetapi' ); ?></p>
613 - <div class="debug-result"><?php wpgetapi_pp( $data ); ?></div>
614 - </div>
615 -
616 - <div class="debug-item">
617 - <h6><?php esc_html_e( 'Final Request Arguments', 'wpgetapi' ); ?></h6>
618 - <p class="small"><?php esc_html_e( 'The final request arguments sent in the API request. Includes headers and body arguments.', 'wpgetapi' ); ?></p>
619 - <div class="debug-result"><?php wpgetapi_pp( $this->final_request_args ); ?></div>
620 - </div>
621 -
622 - <div class="debug-item">
623 - <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
624 - <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
625 - <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
626 - </div>
627 -
628 - <?php } else { ?>
629 -
630 - <h5><strong><?php esc_html_e( 'WPGetAPI, Debug Mode - Plugin Version', 'wpgetapi' ); ?> <?php esc_html_e( WpGetApi()->version ); ?></strong></h5>
455 + <?php if( ! $testing ) { ?>
456 + <h5><strong><?php esc_html_e( 'WPGetAPI, Debug Mode - Plugin Version', 'wpgetapi' ); ?> <?php esc_html_e( WpGetApi()->version ); ?></strong></h5>
631 457 <p class="small"><?php esc_html_e( 'Below you will find debug info for the current API call. To turn this off, set debug to false in your shortcode or template tag.', 'wpgetapi' ); ?><br><?php esc_html_e( 'Connecting to API\'s can be tricky - if you require help, please see the', 'wpgetapi' ); ?> <a target="_blank" href="https://wpgetapi.com/docs/"><?php esc_html_e( 'Documentation', 'wpgetapi' ); ?></a>.</p>
458 + <?php } ?>
632 459
633 460 <div class="debug-item">
634 461 <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
635 462 <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
@@ -676,10 +503,8 @@
676 503 <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
677 504 <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
678 505 <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
679 506 </div>
680 -
681 - <?php } ?>
682 507
683 508 </div>
684 509
685 510 <?php