class-api-request.php
2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
if ( ! class_exists( "Yoast_API_Request", false ) ) {
/**
* Handles requests to the Yoast EDD API
*/
class Yoast_API_Request {
/**
* @var string Request URL
*/
private $url = '';
/**
* @var array Request parameters
*/
private $args = array(
'method' => 'GET',
'timeout' => 10,
'sslverify' => false,
'headers' => array(
'Accept-Encoding' => '*',
'X-Yoast-EDD' => '1'
)
);
/**
* @var boolean
*/
private $success = false;
/**
* @var mixed
*/
private $response;
/**
* @var string
*/
private $error_message = '';
/**
* Constructor
*
* @param string url
* @param array $args
*/
public function __construct( $url, array $args = array() ) {
// set api url
$this->url = $url;
// set request args (merge with defaults)
$this->args = wp_parse_args( $args, $this->args );
// fire the request
$this->success = $this->fire();
}
/**
* Fires the request, automatically called from constructor
*
* @return boolean
*/
private function fire() {
// fire request to shop
$response = wp_remote_request( $this->url, $this->args );
// validate raw response
if( $this->validate_raw_response( $response ) === false ) {
return false;
}
// decode the response
$this->response = json_decode( wp_remote_retrieve_body( $response ) );
// response should be an object
if( ! is_object( $this->response ) ) {
$this->error_message = 'No JSON object was returned.';
return false;
}
return true;
}
/**
* @param object $response
* @return boolean
*/
private function validate_raw_response( $response ) {
// make sure response came back okay
if( is_wp_error( $response ) ) {
$this->error_message = $response->get_error_message();
return false;
}
// check response code, should be 200
$response_code = wp_remote_retrieve_response_code( $response );
if( false === strstr( $response_code, '200' ) ) {
$response_message = wp_remote_retrieve_response_message( $response );
$this->error_message = "{$response_code} {$response_message}";
return false;
}
return true;
}
/**
* Was a valid response returned?
*
* @return boolean
*/
public function is_valid() {
return ( $this->success === true );
}
/**
* @return string
*/
public function get_error_message() {
return $this->error_message;
}
/**
* @return object
*/
public function get_response() {
return $this->response;
}
}
}