PluginProbe
WPGet API – Connect to any external REST API / 2.2.0
WPGet API – Connect to any external REST API v2.2.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
wpgetapi / includes / class-api.php

class-api.php in WPGet API – Connect to any external REST API 2.2.0, at includes/class-api.php

838 lines 34.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // Exit if accessed directly
4 if ( ! defined( 'ABSPATH' ) ) exit;
5
6 /**
7 * The main class
8 *
9 * @since 1.0.0
10 */
11 class WpGetApi_Api {
12
13 public $encryption = ''; // the encryption class
14
15 public $setup = ''; // store the setup data from the admin page
16 public $api = ''; // store the api's from the admin page
17
18 public $api_id = ''; // the api_id that we are wanting to get
19 public $endpoint_id = ''; // the endpoint_id that we are wanting to get
20 public $args = ''; // the args
21 public $keys = ''; // the keys we want to retrieve
22
23 public $base_url = ''; // base url of the API
24 public $method = 'GET'; // the endpoint method GET POST etc
25 public $cache_time = ''; // the time to cache
26 public $endpoint = ''; // the endpoint that we will get
27 public $query_parameters = ''; // the query paramaters appended to url
28 public $header_parameters = ''; // the header paramaters
29 public $body_parameters = ''; // the body paramaters
30 public $body_json_encode = ''; // body_json_encode body
31 public $body_url_encode = ''; // urlencode body
32 public $body_base64_encode = ''; // base64 encode body
33 public $body_xml_format = ''; // xml format body
34 public $xml_root_node = 'root'; // root node for xml
35
36 public $response = ''; // the returned response
37
38 public $final_url = ''; // final URL
39 public $final_request_args = array(); // final request_args
40
41 public $results_format = 'json_string'; // results format
42
43 public $response_code = ''; // the response code from the call
44
45 public $timeout = 10; // the timeout
46 public $sslverify = 1; // ssl verify
47 public $debug = false;
48
49 public $pro_plugin = false;
50
51
52 /**
53 * Main constructor
54 *
55 * @since 1.0.0
56 *
57 */
58 public function __construct( $api_id = '', $endpoint_id = '', $args = array(), $keys = array() ) {
59
60 $this->setup = get_option( 'wpgetapi_setup' );
61 $this->api = get_option( 'wpgetapi_' . $api_id );
62
63 $this->encryption = new WpGetApi_Encryption();
64 $this->api_id = sanitize_text_field( $api_id );
65 $this->endpoint_id = sanitize_text_field( $endpoint_id );
66 $this->keys = $keys;
67 $this->args = $args;
68
69 add_filter( 'wpgetapi_raw_error_data', array( $this, 'maybe_add_debug_info' ), 99, 2 );
70 add_filter( 'wpgetapi_raw_data', array( $this, 'maybe_add_debug_info' ), 99, 2 );
71
72 }
73
74
75 /**
76 * Init our api data
77 */
78 public function init() {
79
80 if ( ! function_exists( 'is_plugin_active' ) ) {
81 include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
82 }
83
84 $this->pro_plugin = is_plugin_active( 'wpgetapi-extras/wpgetapi-extras.php' ) ? true : false;
85
86 // if we are doing importer plugin,
87 // we need to intercept and modify most of our methods values
88 if( $this->api_id === 'wpgetapi_importer' ) {
89
90 $data = apply_filters( 'wpgetapi_api_importer_init', $this );
91
92 if( $data ) {
93
94 foreach ($data as $key => $value) {
95 $this->{$key} = $value;
96 }
97
98 $this->query_parameters = ! empty( $this->query_parameters ) ? $this->do_parameters( $this->query_parameters ) : array();
99 $this->header_parameters = ! empty( $this->header_parameters ) ? $this->do_parameters( $this->header_parameters ) : array();
100 $this->body_parameters = ! empty( $this->body_parameters ) ? $this->do_parameters( $this->body_parameters ) : array();
101 return;
102
103 }
104
105 }
106
107 // do some checks
108 if( empty( $this->setup ) || ! isset( $this->setup['apis'] ) || empty( $this->setup['apis'] ) )
109 return 'No API found.';
110
111 // do some checks
112 if( ! $this->api || ! isset( $this->api['endpoints'] ) || empty( $this->api['endpoints'] ))
113 return 'API not found.';
114
115 // loop through api's
116 // set base_url
117 foreach ( $this->setup['apis'] as $index => $api_item ) {
118 if( $this->api_id == $api_item['id'] ) {
119 $this->base_url = isset( $api_item['base_url'] ) && ! empty( $api_item['base_url'] ) ? esc_url_raw( $api_item['base_url'] ) : '';
120 }
121 }
122
123 // loop through endpoints
124 foreach ( $this->api['endpoints'] as $index => $endpoint ) {
125
126 if( $this->endpoint_id == $endpoint['id'] ) {
127
128 $this->method = isset( $endpoint['method'] ) && $endpoint['method'] != '' ? sanitize_text_field( $endpoint['method'] ) : 'GET';
129 $this->timeout = isset( $endpoint['timeout'] ) && ! empty( $endpoint['timeout'] ) ? absint( $endpoint['timeout'] ) : '';
130 $this->cache_time = isset( $endpoint['cache_time'] ) && ! empty( $endpoint['cache_time'] ) ? absint( $endpoint['cache_time'] ) : '';
131 $this->endpoint = isset( $endpoint['endpoint'] ) && ! empty( $endpoint['endpoint'] ) ? sanitize_text_field( $endpoint['endpoint'] ) : '';
132
133 $this->query_parameters = isset( $endpoint['query_parameters'] ) && ! empty( $endpoint['query_parameters'] ) ? $this->do_parameters( $endpoint['query_parameters'] ) : array();
134
135 $this->header_parameters = isset( $endpoint['header_parameters'] ) && ! empty( $endpoint['header_parameters'] ) ? $this->do_parameters( $endpoint['header_parameters'] ) : array();
136
137 $this->body_parameters = isset( $endpoint['body_parameters'] ) && ! empty( $endpoint['body_parameters'] ) ? $this->do_parameters( $endpoint['body_parameters'] ) : array();
138
139 // how to encode the body
140 $this->body_json_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'true' ? true : false;
141 $this->body_url_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'url' ? true : false;
142 $this->body_base64_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'base64' ? true : false;
143 $this->body_xml_format = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'xml' ? true : false;
144
145 $this->xml_root_node = isset( $endpoint['xml_root'] ) && ! empty( $endpoint['xml_root'] ) ? $endpoint['xml_root'] : $this->xml_root_node;
146
147 $this->results_format = isset( $endpoint['results_format'] ) ? sanitize_text_field( $endpoint['results_format'] ) : $this->results_format;
148
149
150 if(
151 // set the format to php array data if html format is set
152 ( isset( $this->args['format'] ) && $this->args['format'] == 'html' && $this->results_format != 'xml_array' ) ||
153 // set the format to php array data if it is set in the args (coming from the importer)
154 ( isset( $this->args['results_format'] ) && $this->args['results_format'] == 'json_decoded' )
155 ) {
156 $this->results_format = 'json_decoded';
157 }
158
159 // set the format to JSON string if it is set in the args (coming from the wpdatatables integration)
160 if( isset( $this->args['results_format'] ) && $this->args['results_format'] == 'json_string' ) {
161 $this->results_format = 'json_string';
162 }
163
164 // set the format to JSON string if it is set in the args (coming from the wpdatatables integration)
165 if( isset( $this->args['results_format'] ) && $this->args['results_format'] == 'json_decoded' ) {
166 $this->results_format = 'json_decoded';
167 }
168
169 }
170
171 }
172
173 $this->timeout = isset( $this->api['timeout'] ) && ! empty( $this->api['timeout'] ) ? $this->api['timeout'] : $this->timeout;
174 $this->sslverify = isset( $this->api['sslverify'] ) ? absint( $this->api['sslverify'] ) : $this->sslverify;
175
176 }
177
178
179 /**
180 * The main function to output the data
181 *
182 * @param string $field Field to retrieve
183 */
184 public function endpoint_output() {
185
186 do_action( 'wpgetapi_before_do_the_call', $this );
187
188 return $this->do_the_call();
189
190 }
191
192
193 /**
194 * Send the request and return our data
195 */
196 public function do_the_call() {
197
198 $this->init();
199
200 // build the URL
201 $this->final_url = apply_filters( 'wpgetapi_final_url', $this->build_url(), $this );
202
203 // build the request args
204 $this->final_request_args = apply_filters( 'wpgetapi_final_request_args', $this->build_request_args(), $this );
205
206 /**
207 * Check if we should stop or not. Setting $on to true, will stop us calling the api.
208 * @param bool $on Whether on is set or not.
209 */
210
211 if ( apply_filters( 'wpgetapi_should_we_stop', false, $this ) ) {
212 return;
213 }
214
215 // POST request
216 if( $this->method == 'POST' )
217 $this->response = $this->POST_request();
218
219 // PUT request
220 if( $this->method == 'PUT' )
221 $this->response = $this->PUT_request();
222
223 // PATCH request
224 if( $this->method == 'PATCH' )
225 $this->response = $this->PATCH_request();
226
227 // GET request
228 if( $this->method == 'GET' )
229 $this->response = $this->GET_request();
230
231 // DELETE request
232 if( $this->method == 'DELETE' )
233 $this->response = $this->DELETE_request();
234
235 // wp error
236 if( is_wp_error( $this->response ) ) {
237 return apply_filters( 'wpgetapi_raw_error_data', json_encode( $this->response ), $this );
238 }
239
240 // get response_code
241 $this->response_code = wp_remote_retrieve_response_code( $this->response );
242
243 // action to intercept call depending on response_code
244 $this->response = apply_filters( 'wpgetapi_before_retrieve_body', $this->response, $this->response_code, $this );
245
246 // get body
247 // modified in version 1.6.1 to allow for OAuth 2.0 plugin returning body already
248 $data = isset( $this->response['body'] ) ? $this->response['body'] : $this->response;
249
250 // returning in JSON format
251 if( $this->results_format == 'json_string' || $this->results_format == 'json_decoded' )
252 $data = $this->return_data( $data );
253
254 if( $data === 'null' )
255 $data = 'Result is null. Check that all endpoint settings are correct.';
256
257 return apply_filters( 'wpgetapi_raw_data', $data, $this );
258
259 }
260
261
262 /**
263 * Build the request url with the ability to add args
264 */
265 public function build_url() {
266
267 // first make sure our endpoint starts with a slash
268 if ( substr( $this->endpoint, 0, 1 ) != '/' )
269 $this->endpoint = '/' . $this->endpoint;
270
271 // if we have item_key from api to posts plugin
272 // replace our keyword with the actual item_key value
273 if ( isset( $this->args['item_key'] ) && strpos( $this->endpoint, '(importer:item_key)' ) !== false ) {
274 $this->endpoint = str_replace( '(importer:item_key)', $this->args['item_key'], $this->endpoint );
275 }
276
277 $this->endpoint = apply_filters( 'wpgetapi_endpoint', $this->endpoint, $this );
278
279 $url = untrailingslashit( $this->base_url ) . $this->endpoint;
280
281 // if we have a URL pagination event from the import plugin
282 // we need to modify the URL here
283 if( isset( $this->args['paginate_url'] ) )
284 $url = $this->args['paginate_url'];
285
286 // filter our params - added for use in Oauth 2.0 plugin
287 $params = apply_filters( 'wpgetapi_query_parameters', $this->query_parameters, $this );
288
289 // add empty array - was getting errors if it was just null or false
290 $params = empty( $params ) ? array(''=>'') : $params;
291
292 $result = add_query_arg( $params, $url );
293
294 return $result;
295
296 }
297
298
299 /**
300 * build the header with the ability to add args
301 */
302 public function build_request_args() {
303
304 // add our header parameters to the headers
305 $headers = apply_filters( 'wpgetapi_header_parameters', array(
306 'headers' => $this->header_parameters,
307 ), $this );
308
309
310 // if doing POST request, include body paramters
311 if( $this->method == 'POST' || $this->method == 'PUT' || $this->method == 'DELETE' || $this->method == 'PATCH' ) {
312
313 // tokens are sent through here
314 $this->body_parameters = apply_filters( 'wpgetapi_body_parameters', $this->body_parameters, $this );
315
316 // do we json_encode the entire body
317 if( $this->body_json_encode == true ) {
318 $this->body_parameters = json_encode( $this->body_parameters );
319 }
320
321 // do we urlencode the entire body
322 if( $this->body_parameters && $this->body_url_encode == true ) {
323
324 // checking if the parameters have a json string (raw)
325 if (
326 ( ! is_array( $this->body_parameters ) ) &&
327 ( substr( $this->body_parameters, 0, 1 ) === '{' || substr( $this->body_parameters, 0, 1 ) === '[' )
328 ) {
329 $this->body_parameters = json_decode( $this->body_parameters, true );
330 }
331
332 $this->body_parameters = http_build_query( $this->body_parameters, '', '&' );
333
334 }
335
336 // do we xml the entire body
337 if( $this->body_parameters && $this->body_xml_format == true ) {
338
339 $root_node = $this->xml_root_node != '' ? '<' . $this->xml_root_node . '/>' : '';
340
341 $xml_element = apply_filters( 'wpgetapi_xml_element', '<?xml version="1.0" encoding="UTF-8"?>' . $root_node );
342
343 $xml = new SimpleXmlElement( $xml_element );
344
345 foreach( $this->body_parameters as $key => $value) {
346 $xml->addChild( $key, $value );
347 }
348
349 $this->body_parameters = $xml->asXML();
350
351 }
352
353 // do we base64 encode the entire body
354 if( $this->body_parameters && $this->body_base64_encode == true ) {
355
356 $this->body_parameters = is_array( $this->body_parameters ) ? json_encode( $this->body_parameters ) : $this->body_parameters;
357 $this->body_parameters = base64_encode( $this->body_parameters );
358
359 }
360
361 $this->body_parameters = apply_filters( 'wpgetapi_modify_formatted_body_parameters', $this->body_parameters, $this );
362
363 // add our body parameters
364 if( $this->body_parameters && ! empty( $this->body_parameters ) )
365 $headers['body'] = $this->body_parameters;
366
367 }
368
369 // get our body paramters as they are formatted
370 // this won't change anything, it just allows us to get the parameters
371 $this->body_parameters = apply_filters( 'wpgetapi_final_body_parameters', $this->body_parameters, $this );
372
373 // add headers to our final request args
374 $this->final_request_args = wp_parse_args( $headers, $this->final_request_args );
375
376 // build the args taht are sent to the request
377 $default_args = apply_filters( 'wpgetapi_default_request_args_parameters', array(
378 'timeout' => ( absint( $this->timeout ) > 0 ? absint( $this->timeout ) : 10 ),
379 'sslverify' => $this->sslverify,
380 'redirection' => 5,
381 'blocking' => true,
382 'cookies' => array(),
383 ) );
384
385 return wp_parse_args( $this->final_request_args, $default_args );
386
387 }
388
389
390
391
392 /**
393 * Do a GET request
394 */
395 public function GET_request() {
396
397 $response = '';
398 // so we can so something before the remote_get (caching)
399 $response = apply_filters( 'wpgetapi_before_get_request', $response, $this );
400
401 if( empty( $response ) )
402 $response = wp_remote_get( $this->final_url, $this->final_request_args );
403
404 return $response;
405
406 }
407
408 /**
409 * Do a POST request
410 */
411 public function POST_request() {
412
413 $response = '';
414 // so we can so something before the remote_post (caching)
415 $response = apply_filters( 'wpgetapi_before_post_request', $response, $this );
416
417 //$this->final_request_args['method'] = 'POST';
418
419 if( empty( $response ) )
420 $response = wp_remote_post( $this->final_url, $this->final_request_args );
421
422 return $response;
423 }
424
425 /**
426 * Do a PUT request
427 */
428 public function PUT_request() {
429 $this->final_request_args['method'] = 'PUT';
430 $response = wp_remote_request( $this->final_url, $this->final_request_args );
431 return $response;
432 }
433
434 /**
435 * Do a PATCH request
436 */
437 public function PATCH_request() {
438 $this->final_request_args['method'] = 'PATCH';
439 $response = wp_remote_request( $this->final_url, $this->final_request_args );
440 return $response;
441 }
442
443 /**
444 * Do a DELETE request
445 */
446 public function DELETE_request() {
447 $this->final_request_args['method'] = 'DELETE';
448 $response = wp_remote_request( $this->final_url, $this->final_request_args );
449 return $response;
450 }
451
452
453 /**
454 * return data
455 */
456 public function return_data( $data ) {
457
458 $data = apply_filters( 'wpgetapi_json_response_body_before_decode', $data, $this->keys );
459
460 // converts all data to arrays, removing objects
461 if( is_string( $data ) ) {
462 $decode = json_decode( $data, true );
463 if( json_last_error() ) {
464 return esc_html( $data );
465 } else {
466 $data = $decode;
467 }
468 }
469
470 $data = apply_filters( 'wpgetapi_json_response_body', $data, $this->keys );
471
472 if( $this->results_format == 'json_string' )
473 return trim( json_encode( $data, JSON_PRETTY_PRINT ),'"');
474
475 if( $this->results_format == 'json_decoded' )
476 return $data;
477
478 }
479
480 /**
481 * Sort out the parameters if they exist
482 */
483 public function do_parameters( $parameters ) {
484
485 $new_array = array();
486 $raw = '';
487 $parameters = $this->decrypt( $parameters );
488
489 if( is_array( $parameters ) ) {
490 foreach ( $parameters as $key => $parameter ) {
491
492 if( ! empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
493
494 $parameter['value'] = stripslashes( $parameter['value'] );
495
496 // if we have wpgetapi_on, delete it so we don't send to api
497 if( $parameter['name'] == 'wpgetapi_on' ) {
498 unset( $parameters[ $key ] );
499 continue;
500 }
501
502 // if we have item_key from api to posts plugin
503 // replace our keyword with the actual item_key value
504 if ( isset( $this->args['item_key'] ) && strpos( $parameter['value'], '(importer:item_key)' ) !== false ) {
505 $parameter['value'] = str_replace( '(importer:item_key)', $this->args['item_key'], $parameter['value'] );
506 }
507
508 $new_array[ sanitize_text_field( $parameter['name'] ) ] = $parameter['value'];
509
510 // if we are sending raw body
511 } else if( empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
512
513 $raw = stripslashes( $parameter['value'] );
514
515 }
516
517 }
518 }
519
520 // now look for array or json string and sort these out - for using such things in shortcode
521 if( ! empty( $new_array ) ) {
522
523 foreach ( $new_array as $key => $value ) {
524
525 // checking if the parameters have a json string
526 if ( strpos( $value, '{"' ) !== false && strpos( $value, '}' ) !== false ) {
527
528 $tmp_val = $value;
529 $tmp_val = json_decode( $tmp_val, true );
530 $new_array[ $key ] = $tmp_val ? $tmp_val : $value;
531
532 } else
533
534 // checking if the parameters have an array within the string
535 // if they do, create them as an actual array
536 if ( substr( $value, 0, 1 ) === '[' && substr( $value, -1 ) === ']' ) {
537 $value = trim( $value,"[]" );
538 $new_array[ $key ] = array( $value );
539 }
540
541 // set value as integer
542 if ( strpos( $value, 'integer(' ) !== false && substr( $value, -1 ) === ')' ) {
543
544 preg_match("/\(([^\)]*)\)/", $value, $match );
545 $result = trim( $match[1] );
546
547 // checking if we have additional token within
548 // and we need to send this directly to PRO plugin from here
549 if( strpos( $value, '(' ) !== false && strpos( $value, ':' ) !== false && $this->pro_plugin ) {
550 $result = $this->replace_tokens( $result );
551 } else {
552 $result = $result;
553 }
554
555 $new_array[ $key ] = absint( $result );
556
557 }
558
559 // set value as float
560 if ( strpos( $value, 'float(' ) !== false && substr( $value, -1 ) === ')' ) {
561
562 preg_match("/\(([^\)]*)\)/", $value, $match );
563 $result = trim( $match[1] );
564 if ( substr( $result, 0, 1 ) === '"' && substr( $result, -1 ) === '"' )
565 $result = trim( $result,'""' );
566
567 // checking if we have additional token within
568 // and we need to send this directly to PRO plugin from here
569 if( strpos( $value, '(' ) !== false && strpos( $value, ':' ) !== false && $this->pro_plugin ) {
570 $result = $this->replace_tokens( $result );
571 }
572
573 $new_array[ $key ] = (float) $result;
574
575 }
576
577 // set value as boolean
578 if ( strpos( $value, 'boolean(' ) !== false && substr( $value, -1 ) === ')' ) {
579 preg_match("/\(([^\)]*)\)/", $value, $match );
580 $result = $match[1];
581
582 // checking if we have additional token within
583 // and we need to send this directly to PRO plugin from here
584 if( strpos( $value, '(' ) !== false && strpos( $value, ':' ) !== false && $this->pro_plugin ) {
585 $result = $this->replace_tokens( $result );
586 } else {
587 $result = $result;
588 }
589
590 $result = filter_var( $result, FILTER_VALIDATE_BOOLEAN );
591
592 $new_array[ $key ] = $result;
593
594 }
595
596 }
597
598 }
599
600 return $raw ? $raw : $new_array;
601
602 }
603
604
605 /**
606 * Do a direct token replacement if PRO plugin installed and is required.
607 */
608 public function replace_tokens( $value ) {
609 $tokens = new WpGetApi_Extras_Tokens();
610 $action_args = isset( $this->args['action_args'] ) ? $this->args['action_args'] : null;
611 $value = ( substr( $value, -1 ) !== ')' ? $value . ')' : $value );
612 $result = $tokens->replace_tokens( $value, $action_args );
613 return $result;
614 }
615
616
617 /**
618 * decrypt our parameters from the DB
619 */
620 public function decrypt( $array_or_string ) {
621
622 if( is_string($array_or_string) ){
623 $array_or_string = $this->encryption->decrypt($array_or_string);
624 }elseif( is_array($array_or_string) ){
625 foreach ( $array_or_string as $key => &$value ) {
626 if( $key === 'name' )
627 continue;
628 if ( is_array( $value ) ) {
629 $value = $this->decrypt($value);
630 }
631 else {
632 $value = $this->encryption->decrypt($value);
633
634 }
635 }
636 }
637 return $array_or_string;
638 }
639
640
641 /**
642 * debug
643 */
644 public function maybe_add_debug_info( $data, $wpgetapi ) {
645
646 if(
647 ( isset( $this->args['debug'] ) && ( $this->args['debug'] === true || $this->args['debug'] === 'true' ) ) ||
648 ( isset( $this->args['test_endpoint'] ) && ( $this->args['test_endpoint'] === true ) )
649 ) {
650
651 $this->debug = true;
652
653 // admin test endpoint button
654 $testing = isset( $this->args['test_endpoint'] ) && ( $this->args['test_endpoint'] === true ) ? true : false;
655
656 // get api status from response code
657 $status = array(
658 'title' => 'Error in API response.',
659 'desc' => 'Check all details within your endpoint. Something is misconfigured.',
660 'type' => '<span class="dashicons dashicons-dismiss"></span>'
661 );
662
663 $search = 'cURL error 28';
664 if( isset( $data ) && preg_match( "/{$search}/i", $data ) ) {
665 $status = array(
666 'title' => 'Error!',
667 'desc' => 'Timeout error. Try increasing the timeout value.',
668 'type' => '<span class="dashicons dashicons-dismiss"></span>'
669 );
670 }
671
672 $search = 'cURL error 60';
673 if( isset( $data ) && preg_match( "/{$search}/i", $data ) ) {
674 $status = array(
675 'title' => 'Error!',
676 'desc' => 'SSL verification has failed. See <a href="https://wordpress.stackexchange.com/a/167910/11827" target="_blank">here</a> for possible solution.',
677 'type' => '<span class="dashicons dashicons-dismiss"></span>'
678 );
679 }
680
681 if( $this->response_code >= 200 && $this->response_code <= 299 ) {
682 $status = array(
683 'title' => 'Success!',
684 'desc' => 'Your API is returning a success message and is returning the data as shown in the Data Output section below. You can modify this by changing the Results Format option or see <a href="https://wpgetapi.com/docs/format-api-data-as-html/">here</a> for info on formatting this data.',
685 'type' => '<span class="dashicons dashicons-yes-alt"></span>'
686 );
687 }
688 if( $this->response_code >= 400 && $this->response_code <= 499 ) {
689 $status = array(
690 'title' => 'Bad Request',
691 'desc' => 'This could indicate that the URL you are calling is incorrect or that some other data is missing or incorrect. Please check your Base URL and Endpoint are correct as well as the Request Method.',
692 'type' => '<span class="dashicons dashicons-dismiss"></span>'
693 );
694 }
695 if( $this->response_code == 401 ) {
696 $status = array(
697 'title' => 'Unauthorised',
698 'desc' => 'You are successfully connecting to your API. But your API key, login or API credentials are incorrect. See <a href="https://wpgetapi.com/docs/authentication-authorization/">here</a> for info on correctly authorizing your API requests.',
699 'type' => '<span class="dashicons dashicons-warning"></span>'
700 );
701 }
702 if( $this->response_code == 403 ) {
703 $status = array(
704 'title' => 'Forbidden',
705 'desc' => 'This could indicate that you may need to get your IP address whitelisted with your API provider or that you do not have access to this API.',
706 'type' => '<span class="dashicons dashicons-dismiss"></span>'
707 );
708 }
709 if( $this->response_code == 405 ) {
710 $status = array(
711 'title' => 'Method Not Allowed',
712 'desc' => 'Try changing the Request Method within the endpoint settings.',
713 'type' => '<span class="dashicons dashicons-dismiss"></span>'
714 );
715 }
716 if( $this->response_code == 415 ) {
717 $status = array(
718 'title' => 'Unsupported Media Type',
719 'desc' => 'Try adding "Content-type" to the Headers with the Value of "json/application" as shown <a href="https://wpgetapi.com/docs/troubleshooting/">here</a>.',
720 'type' => '<span class="dashicons dashicons-dismiss"></span>'
721 );
722 }
723 if( $this->response_code >= 500 && $this->response_code <= 599 ) {
724 $status = array(
725 'title' => 'Internal Server Error',
726 'desc' => 'This indicates an issue with the API server. Contact your API provider.',
727 'type' => '<span class="dashicons dashicons-dismiss"></span>'
728 );
729 }
730
731
732 ob_start(); ?>
733
734 <div class="wpgetapi-debug <?php echo $testing ? 'testing' : ''; ?>">
735
736 <?php if( $testing ) { ?>
737
738 <div class="debug-item status">
739 <div class="">
740 <h5><?php _e( $status['type'] ); ?> <?php esc_html_e( $status['title'] ); ?></h5>
741 <span class="desc"><?php _e( $status['desc'] ); ?></span>
742 </div>
743 </div>
744 <div class="debug-item">
745 <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
746 <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
747 <div class="debug-result"><?php esc_html_e( $this->final_url ); ?></div>
748 </div>
749
750 <div class="debug-item">
751 <h6><?php esc_html_e( 'Data Output', 'wpgetapi' ); ?></h6>
752 <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>
753 <div class="debug-result"><?php wpgetapi_pp( $data ); ?></div>
754 </div>
755
756 <div class="debug-item">
757 <h6><?php esc_html_e( 'Final Request Arguments', 'wpgetapi' ); ?></h6>
758 <p class="small"><?php esc_html_e( 'The final request arguments sent in the API request. Includes headers and body arguments.', 'wpgetapi' ); ?></p>
759 <div class="debug-result"><?php wpgetapi_pp( $this->final_request_args ); ?></div>
760 </div>
761
762 <div class="debug-item">
763 <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
764 <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
765 <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
766 </div>
767
768 <?php } else { ?>
769
770 <h5><strong><?php esc_html_e( 'WPGetAPI, Debug Mode - Plugin Version', 'wpgetapi' ); ?> <?php esc_html_e( WpGetApi()->version ); ?></strong></h5>
771 <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>
772
773 <div class="debug-item">
774 <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
775 <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
776 <div class="debug-result"><?php esc_html_e( $this->final_url ); ?></div>
777 </div>
778
779 <div class="debug-item">
780 <h6><?php esc_html_e( 'Data Output', 'wpgetapi' ); ?></h6>
781 <p class="small"><?php esc_html_e( 'The resulting output that has been returned from the API.', 'wpgetapi' ); ?></p>
782 <div class="debug-result"><?php wpgetapi_pp( $data ); ?></div>
783 </div>
784
785 <div class="debug-item">
786 <h6><?php esc_html_e( 'Query String', 'wpgetapi' ); ?></h6>
787 <p class="small"><?php esc_html_e( 'The query string parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
788 <div class="debug-result"><?php wpgetapi_pp( $this->query_parameters ); ?></div>
789 </div>
790
791 <div class="debug-item">
792 <h6><?php esc_html_e( 'Headers', 'wpgetapi' ); ?></h6>
793 <p class="small"><?php esc_html_e( 'The header parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
794 <div class="debug-result"><?php wpgetapi_pp( $this->header_parameters ); ?></div>
795 </div>
796
797 <div class="debug-item">
798 <h6><?php esc_html_e( 'Body', 'wpgetapi' ); ?></h6>
799 <p class="small"><?php esc_html_e( 'The body parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
800 <div class="debug-result"><?php wpgetapi_pp( $this->body_parameters ); ?></div>
801 </div>
802
803 <div class="debug-item">
804 <h6><?php esc_html_e( 'Final Request Arguments', 'wpgetapi' ); ?></h6>
805 <p class="small"><?php esc_html_e( 'The final request arguments sent in the API request. Includes headers and body arguments.', 'wpgetapi' ); ?></p>
806 <div class="debug-result"><?php wpgetapi_pp( $this->final_request_args ); ?></div>
807 </div>
808
809 <div class="debug-item">
810 <h6><?php esc_html_e( 'Arguments', 'wpgetapi' ); ?></h6>
811 <p class="small"><?php esc_html_e( 'The arguments set within your shortcode or template tag.', 'wpgetapi' ); ?></p>
812 <div class="debug-result"><?php wpgetapi_pp( $this->args ); ?></div>
813 </div>
814
815 <div class="debug-item">
816 <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
817 <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
818 <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
819 </div>
820
821 <?php } ?>
822
823 </div>
824
825 <?php
826
827 return ob_get_clean();
828
829 } else {
830
831 return $data;
832
833 }
834
835 }
836
837
838 }