PluginProbe
WPGet API – Connect to any external REST API / 1.9.2
WPGet API – Connect to any external REST API v1.9.2
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 1.9.2, at includes/class-api.php

698 lines 25.9 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_xml_format = ''; // xml format body
33 public $xml_root_node = 'root'; // root node for xml
34
35 public $response = ''; // the returned response
36
37 public $final_url = ''; // final URL
38 public $final_request_args = array(); // final request_args
39
40 public $results_format = 'json_string'; // results format
41
42 public $timeout = 10; // the timeout
43 public $sslverify = 1; // the paramaters
44 public $debug = false;
45
46
47 /**
48 * Main constructor
49 *
50 * @since 1.0.0
51 *
52 */
53 public function __construct( $api_id = '', $endpoint_id = '', $args = array(), $keys = array() ) {
54
55 $this->setup = get_option( 'wpgetapi_setup' );
56 $this->api = get_option( 'wpgetapi_' . $api_id );
57
58 $this->encryption = new WpGetApi_Encryption();
59 $this->api_id = sanitize_text_field( $api_id );
60 $this->endpoint_id = sanitize_text_field( $endpoint_id );
61 $this->keys = $keys;
62 $this->args = $args;
63
64 add_filter( 'wpgetapi_raw_data', array( $this, 'maybe_add_debug_info' ), 99, 2 );
65
66 }
67
68
69 /**
70 * Init our api data
71 */
72 public function init() {
73
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 // do some checks
96 if( empty( $this->setup ) || ! isset( $this->setup['apis'] ) || empty( $this->setup['apis'] ) )
97 return 'No API found.';
98
99 // do some checks
100 if( ! $this->api || ! isset( $this->api['endpoints'] ) || empty( $this->api['endpoints'] ))
101 return 'API not found.';
102
103 // loop through api's
104 // set base_url
105 foreach ( $this->setup['apis'] as $index => $api_item ) {
106 if( $this->api_id == $api_item['id'] ) {
107 $this->base_url = isset( $api_item['base_url'] ) && ! empty( $api_item['base_url'] ) ? esc_url_raw( $api_item['base_url'] ) : '';
108 }
109 }
110
111 // loop through endpoints
112 foreach ( $this->api['endpoints'] as $index => $endpoint ) {
113
114 if( $this->endpoint_id == $endpoint['id'] ) {
115
116 $this->method = isset( $endpoint['method'] ) && $endpoint['method'] != '' ? sanitize_text_field( $endpoint['method'] ) : 'GET';
117 $this->cache_time = isset( $endpoint['cache_time'] ) && ! empty( $endpoint['cache_time'] ) ? absint( $endpoint['cache_time'] ) : '';
118 $this->endpoint = isset( $endpoint['endpoint'] ) && ! empty( $endpoint['endpoint'] ) ? sanitize_text_field( $endpoint['endpoint'] ) : '';
119
120 $this->query_parameters = isset( $endpoint['query_parameters'] ) && ! empty( $endpoint['query_parameters'] ) ? $this->do_parameters( $endpoint['query_parameters'] ) : array();
121
122 $this->header_parameters = isset( $endpoint['header_parameters'] ) && ! empty( $endpoint['header_parameters'] ) ? $this->do_parameters( $endpoint['header_parameters'] ) : array();
123
124 $this->body_parameters = isset( $endpoint['body_parameters'] ) && ! empty( $endpoint['body_parameters'] ) ? $this->do_parameters( $endpoint['body_parameters'] ) : array();
125
126 // how to encode the body
127 $this->body_json_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'true' ? true : false;
128 $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
131 $this->xml_root_node = isset( $endpoint['xml_root'] ) && ! empty( $endpoint['xml_root'] ) ? $endpoint['xml_root'] : $this->xml_root_node;
132
133 $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 }
146
147 }
148
149 $this->timeout = isset( $this->api['timeout'] ) && ! empty( $this->api['timeout'] ) ? $this->api['timeout'] : $this->timeout;
150 $this->sslverify = isset( $this->api['sslverify'] ) ? absint( $this->api['sslverify'] ) : $this->sslverify;
151
152 }
153
154
155 /**
156 * The main function to output the data
157 *
158 * @param string $field Field to retrieve
159 */
160 public function endpoint_output() {
161
162 do_action( 'wpgetapi_before_do_the_call', $this );
163
164 return $this->do_the_call();
165
166 }
167
168
169 /**
170 * Send the request and return our data
171 */
172 public function do_the_call() {
173
174 $this->init();
175
176 // build the URL
177 $this->final_url = apply_filters( 'wpgetapi_final_url', $this->build_url(), $this );
178
179 // build the request args
180 $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
187 if ( apply_filters( 'wpgetapi_should_we_stop', false, $this ) ) {
188 return;
189 }
190
191 // POST request
192 if( $this->method == 'POST' )
193 $this->response = $this->POST_request();
194
195 // PUT request
196 if( $this->method == 'PUT' )
197 $this->response = $this->PUT_request();
198
199 // GET request
200 if( $this->method == 'GET' )
201 $this->response = $this->GET_request();
202
203 // DELETE request
204 if( $this->method == 'DELETE' )
205 $this->response = $this->DELETE_request();
206
207 // wp error
208 if( is_wp_error( $this->response ) ) {
209 return apply_filters( 'wpgetapi_raw_error_data', json_encode( $this->response ), $this );
210 }
211
212 // get response_code
213 $response_code = wp_remote_retrieve_response_code( $this->response );
214
215 // action to intercept call depending on response_code
216 $this->response = apply_filters( 'wpgetapi_before_retrieve_body', $this->response, $response_code, $this );
217
218 // get body
219 // modified in version 1.6.1 to allow for OAuth 2.0 plugin returning body already
220 $data = isset( $this->response['body'] ) ? $this->response['body'] : $this->response;
221
222 // returning in JSON format
223 if( $this->results_format == 'json_string' || $this->results_format == 'json_decoded' )
224 $data = $this->return_data( $data );
225
226 if( $data === 'null' )
227 $data = 'Result is null. Check that all endpoint settings are correct.';
228
229 return apply_filters( 'wpgetapi_raw_data', $data, $this );
230
231 }
232
233
234 /**
235 * Build the request url with the ability to add args
236 */
237 public function build_url() {
238
239 // first make sure our endpoint starts with a slash
240 if ( substr( $this->endpoint, 0, 1 ) != '/' )
241 $this->endpoint = '/' . $this->endpoint;
242
243 $this->endpoint = apply_filters( 'wpgetapi_endpoint', $this->endpoint, $this );
244
245 $url = untrailingslashit( $this->base_url ) . $this->endpoint;
246
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 // filter our params - added for use in Oauth 2.0 plugin
253 $params = apply_filters( 'wpgetapi_query_parameters', $this->query_parameters, $this );
254
255 // add empty array - was getting errors if it was just null or false
256 $params = empty( $params ) ? array(''=>'') : $params;
257
258 return add_query_arg( $params, $url );
259
260 }
261
262
263 /**
264 * build the header with the ability to add args
265 */
266 public function build_request_args() {
267
268 // add our header parameters to the headers
269 $headers = apply_filters( 'wpgetapi_header_parameters', array(
270 'headers' => $this->header_parameters,
271 ), $this );
272
273
274 // 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
278 $this->body_parameters = apply_filters( 'wpgetapi_body_parameters', $this->body_parameters, $this );
279
280 // do we json_encode the entire body
281 if( $this->body_json_encode == true ) {
282 $this->body_parameters = json_encode( $this->body_parameters );
283 }
284
285 // do we urlencode the entire body
286 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 );
294 }
295
296 $this->body_parameters = http_build_query( $this->body_parameters, '', '&' );
297
298 }
299
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 // add our body parameters
314 if( $this->body_parameters && ! empty( $this->body_parameters ) )
315 $headers['body'] = $this->body_parameters;
316
317 }
318
319 // add headers to our final request args
320 $this->final_request_args = wp_parse_args( $headers, $this->final_request_args );
321
322 // build the args taht are sent to the request
323 $default_args = apply_filters( 'wpgetapi_default_request_args_parameters', array(
324 'timeout' => $this->timeout,
325 'sslverify' => $this->sslverify,
326 'redirection' => 5,
327 'blocking' => true,
328 'cookies' => array(),
329 ) );
330
331 return wp_parse_args( $this->final_request_args, $default_args );
332
333 }
334
335
336
337
338 /**
339 * Do a GET request
340 */
341 public function GET_request() {
342 $response = '';
343 // so we can so something before the remote_get (caching)
344 $response = apply_filters( 'wpgetapi_before_get_request', $response, $this );
345
346 if( empty( $response ) )
347 $response = wp_remote_get( $this->final_url, $this->final_request_args );
348 return $response;
349 }
350
351 /**
352 * Do a POST request
353 */
354 public function POST_request() {
355 $this->final_request_args['method'] = 'POST';
356 $response = wp_remote_post( $this->final_url, $this->final_request_args );
357 return $response;
358 }
359
360 /**
361 * Do a PUT request
362 */
363 public function PUT_request() {
364 $this->final_request_args['method'] = 'PUT';
365 $response = wp_remote_request( $this->final_url, $this->final_request_args );
366 return $response;
367 }
368
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
378
379 /**
380 * return data
381 */
382 public function return_data( $data ) {
383
384 $data = apply_filters( 'wpgetapi_json_response_body_before_decode', $data, $this->keys );
385
386 // 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 }
395
396 $data = apply_filters( 'wpgetapi_json_response_body', $data, $this->keys );
397
398 if( $this->results_format == 'json_string' )
399 return trim( json_encode( $data ),'"');
400
401 if( $this->results_format == 'json_decoded' )
402 return $data;
403
404 }
405
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
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 /**
492 * decrypt our parameters from the DB
493 */
494 public function decrypt( $array_or_string ) {
495
496 if( is_string($array_or_string) ){
497 $array_or_string = $this->encryption->decrypt($array_or_string);
498 }elseif( is_array($array_or_string) ){
499 foreach ( $array_or_string as $key => &$value ) {
500 if( $key === 'name' )
501 continue;
502 if ( is_array( $value ) ) {
503 $value = $this->decrypt($value);
504 }
505 else {
506 $value = $this->encryption->decrypt($value);
507
508 }
509 }
510 }
511 return $array_or_string;
512 }
513
514
515 /**
516 * debug
517 */
518 public function maybe_add_debug_info( $data, $wpgetapi ) {
519
520 if(
521 ( isset( $this->args['debug'] ) && ( $this->args['debug'] === true || $this->args['debug'] === 'true' ) ) ||
522 ( isset( $this->args['test_endpoint'] ) && ( $this->args['test_endpoint'] === true ) )
523 ) {
524
525 $this->debug = true;
526
527 $testing = isset( $this->args['test_endpoint'] ) && ( $this->args['test_endpoint'] === true ) ? true : false;
528
529 ob_start(); ?>
530
531 <style>
532
533 .wpgetapi-debug {
534 background: #fff;
535 padding: 20px;
536 box-shadow: 0 0 1px #aaa;
537 margin: 20px;
538 font-size: 15px;
539 }
540 .wpgetapi-debug
541 .wpgetapi-debug p
542 .wpgetapi-debug h5
543 .wpgetapi-debug h6 {
544 color: #000;
545 line-height: 1 !important;
546 text-transform: none !important;
547 font-family: sans-serif !important;
548 letter-spacing: 0px !important;
549 }
550 .wpgetapi-debug p.small {
551 font-size: 85%;
552 color: #999;
553 margin: 0 0 12px !important;
554 }
555 .wpgetapi-debug h5 {
556 font-weight: bold;
557 font-size: 18px;
558 margin: 0 0 3px;
559 text-transform: none !important;
560 }
561 .wpgetapi-debug .debug-item {
562 margin: 10px 0;
563 background: #fff;
564 padding: 15px 20px;
565 display: inline-block !important;
566 width: 100% !important;
567 box-shadow: 3px 3px 0 rgb(0 0 0 / 8%);
568 border: 1px solid #efefef;
569 }
570 .wpgetapi-debug .debug-item h6 {
571 font-weight: bold;
572 font-size: 14px;
573 margin: 0;
574 text-transform: none !important;
575 }
576 .wpgetapi-debug .debug-item .debug-result,
577 .wpgetapi-debug .debug-item .debug-result pre {
578 font-family: monospace !important;
579 font-size: 13px !important;
580 margin: 0 !important;
581 padding: 8px 12px;
582 background: #f8f8f8;
583 }
584 .wpgetapi-debug .debug-item .debug-result pre {
585 border: none;
586 padding: 5px
587 }
588
589 .wpgetapi-debug.testing {
590 background: transparent;
591 padding: 0;
592 box-shadow: none;
593 }
594 .wpgetapi-debug.testing .debug-item {
595 margin: 5px 0;
596 }
597 </style>
598
599 <div class="wpgetapi-debug <?php echo $testing ? 'testing' : ''; ?>">
600
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>
631 <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>
632
633 <div class="debug-item">
634 <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
635 <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
636 <div class="debug-result"><?php esc_html_e( $this->final_url ); ?></div>
637 </div>
638
639 <div class="debug-item">
640 <h6><?php esc_html_e( 'Data Output', 'wpgetapi' ); ?></h6>
641 <p class="small"><?php esc_html_e( 'The resulting output that has been returned from the API.', 'wpgetapi' ); ?></p>
642 <div class="debug-result"><?php wpgetapi_pp( $data ); ?></div>
643 </div>
644
645 <div class="debug-item">
646 <h6><?php esc_html_e( 'Query String', 'wpgetapi' ); ?></h6>
647 <p class="small"><?php esc_html_e( 'The query string parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
648 <div class="debug-result"><?php wpgetapi_pp( $this->query_parameters ); ?></div>
649 </div>
650
651 <div class="debug-item">
652 <h6><?php esc_html_e( 'Headers', 'wpgetapi' ); ?></h6>
653 <p class="small"><?php esc_html_e( 'The header parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
654 <div class="debug-result"><?php wpgetapi_pp( $this->header_parameters ); ?></div>
655 </div>
656
657 <div class="debug-item">
658 <h6><?php esc_html_e( 'Body', 'wpgetapi' ); ?></h6>
659 <p class="small"><?php esc_html_e( 'The body parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
660 <div class="debug-result"><?php wpgetapi_pp( $this->body_parameters ); ?></div>
661 </div>
662
663 <div class="debug-item">
664 <h6><?php esc_html_e( 'Final Request Arguments', 'wpgetapi' ); ?></h6>
665 <p class="small"><?php esc_html_e( 'The final request arguments sent in the API request. Includes headers and body arguments.', 'wpgetapi' ); ?></p>
666 <div class="debug-result"><?php wpgetapi_pp( $this->final_request_args ); ?></div>
667 </div>
668
669 <div class="debug-item">
670 <h6><?php esc_html_e( 'Arguments', 'wpgetapi' ); ?></h6>
671 <p class="small"><?php esc_html_e( 'The arguments set within your shortcode or template tag.', 'wpgetapi' ); ?></p>
672 <div class="debug-result"><?php wpgetapi_pp( $this->args ); ?></div>
673 </div>
674
675 <div class="debug-item">
676 <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
677 <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
678 <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
679 </div>
680
681 <?php } ?>
682
683 </div>
684
685 <?php
686
687 return ob_get_clean();
688
689 } else {
690
691 return $data;
692
693 }
694
695 }
696
697
698 }