fidor_starter_kits 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/fidor_starter_kits.rb +1 -1
- data/lib/fidor_starter_kits/version.rb +1 -1
- data/starter_kits/php_advanced/.fidor_meta.json +8 -0
- data/starter_kits/php_advanced/Fidor/SDK/Accounts.php +47 -0
- data/starter_kits/php_advanced/Fidor/SDK/Authorization.php +276 -0
- data/starter_kits/php_advanced/Fidor/SDK/Autoload.php +33 -0
- data/starter_kits/php_advanced/Fidor/SDK/Client.php +239 -0
- data/starter_kits/php_advanced/Fidor/SDK/Config.php +272 -0
- data/starter_kits/php_advanced/Fidor/SDK/Customers.php +27 -0
- data/starter_kits/php_advanced/Fidor/SDK/Transactions.php +47 -0
- data/starter_kits/php_advanced/Fidor/SDK/Transfers.php +65 -0
- data/starter_kits/php_advanced/Fidor/SDK/Transfers/Batch.php +18 -0
- data/starter_kits/php_advanced/Fidor/SDK/Transfers/Global.php +18 -0
- data/starter_kits/php_advanced/Fidor/SDK/Transfers/Internal.php +33 -0
- data/starter_kits/php_advanced/Fidor/SDK/Transfers/SEPA.php +18 -0
- data/starter_kits/php_advanced/Fidor/SDK/Users.php +23 -0
- data/starter_kits/php_advanced/README.md +19 -0
- data/starter_kits/php_advanced/curl-test.php +1 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap-theme.css +587 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap-theme.css.map +1 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap-theme.min.css +6 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap-theme.min.css.map +1 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap.css +6760 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap.css.map +1 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap.min.css +6 -0
- data/starter_kits/php_advanced/demo/assets/css/bootstrap.min.css.map +1 -0
- data/starter_kits/php_advanced/demo/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/starter_kits/php_advanced/demo/assets/fonts/glyphicons-halflings-regular.svg +288 -0
- data/starter_kits/php_advanced/demo/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/starter_kits/php_advanced/demo/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/starter_kits/php_advanced/demo/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/starter_kits/php_advanced/demo/assets/js/bootstrap.js +2363 -0
- data/starter_kits/php_advanced/demo/assets/js/bootstrap.min.js +7 -0
- data/starter_kits/php_advanced/demo/assets/js/jquery.min.js +6 -0
- data/starter_kits/php_advanced/demo/assets/js/npm.js +13 -0
- data/starter_kits/php_advanced/demo/authorize.php +103 -0
- data/starter_kits/php_advanced/demo/config.php +15 -0
- data/starter_kits/php_advanced/demo/dashboard.php +154 -0
- data/starter_kits/php_advanced/demo/error_auth.php +71 -0
- data/starter_kits/php_advanced/demo/error_auth_refresh.php +71 -0
- data/starter_kits/php_advanced/demo/error_token_expired.php +76 -0
- data/starter_kits/php_advanced/demo/get_accounts.php +152 -0
- data/starter_kits/php_advanced/demo/get_customers.php +130 -0
- data/starter_kits/php_advanced/demo/get_transactions.php +146 -0
- data/starter_kits/php_advanced/demo/index.php +84 -0
- data/starter_kits/php_advanced/demo/refresh_token.php +39 -0
- data/starter_kits/php_advanced/demo/revoke_access.php +38 -0
- data/starter_kits/php_advanced/demo/setup.php +14 -0
- data/starter_kits/php_advanced/demo/transfer_money.php +241 -0
- data/starter_kits/php_advanced/demo/transfer_money_results.php +126 -0
- metadata +50 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c40f1a70c94e4892f40607a57997d6d8f3a3f684
|
4
|
+
data.tar.gz: 25a939d8c4eabb519dc5d27dccf031adfeef229f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c055c409b78ac09c41a3305f37f80678ced864462ab2e9e30dd8620e2e98ed4b38aac02d0c70e19ed1c1f515461f14e2ea4f7e9c50a06a481f8c556c8b52f9d
|
7
|
+
data.tar.gz: f21988b94f1a1f24b905a07059febdebf3248efff20acb35bad57aec7c6dd3526d1e01c2b4413740475cafabc824457ad9fed02828b67949d889e7a3026dc5a9
|
data/CHANGELOG.md
CHANGED
data/lib/fidor_starter_kits.rb
CHANGED
@@ -6,7 +6,7 @@ require 'json'
|
|
6
6
|
|
7
7
|
module FidorStarterKits
|
8
8
|
|
9
|
-
STARTER_KITS = %w{ node_tx golang_transactions php_oauth_plain ruby_oauth_plain java_servlet }
|
9
|
+
STARTER_KITS = %w{ node_tx golang_transactions php_oauth_plain ruby_oauth_plain java_servlet php_advanced }
|
10
10
|
|
11
11
|
class << self
|
12
12
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<?php
|
2
|
+
namespace Fidor\SDK;
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @property Transactions $transactions Get transactions resource
|
6
|
+
* @property Transactions $transactions Get transfer resource
|
7
|
+
*/
|
8
|
+
class Accounts extends Client {
|
9
|
+
|
10
|
+
/**
|
11
|
+
*
|
12
|
+
* @var string
|
13
|
+
*/
|
14
|
+
protected $id;
|
15
|
+
|
16
|
+
/**
|
17
|
+
*
|
18
|
+
* @param \Fidor\SDK\Config $config
|
19
|
+
*/
|
20
|
+
public function __construct( Config $config ) {
|
21
|
+
parent::__construct( $config );
|
22
|
+
}
|
23
|
+
|
24
|
+
/**
|
25
|
+
*
|
26
|
+
* @param string $name
|
27
|
+
* @return mixed
|
28
|
+
*/
|
29
|
+
public function __get( $name ) {
|
30
|
+
$obj = parent::__get( $name );
|
31
|
+
return $obj;
|
32
|
+
}
|
33
|
+
|
34
|
+
/**
|
35
|
+
*
|
36
|
+
* @param integer $id
|
37
|
+
* @return string
|
38
|
+
*/
|
39
|
+
public function get( $id = null ) {
|
40
|
+
$data = parent::get( $this->config->getApiUrl() . '/accounts' );
|
41
|
+
if ( ! empty( $data['data'] ) ) {
|
42
|
+
$data = $data['data'];
|
43
|
+
}
|
44
|
+
return $data;
|
45
|
+
}
|
46
|
+
|
47
|
+
}
|
@@ -0,0 +1,276 @@
|
|
1
|
+
<?php
|
2
|
+
namespace Fidor\SDK;
|
3
|
+
|
4
|
+
class Authorization {
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Configuration
|
8
|
+
*
|
9
|
+
* @var \Fidor\SDK\Config
|
10
|
+
*/
|
11
|
+
protected $config;
|
12
|
+
|
13
|
+
/**
|
14
|
+
* User agent used in HTTP requests
|
15
|
+
*
|
16
|
+
* @var string
|
17
|
+
*/
|
18
|
+
protected $user_agent = 'FidorSDK (+https://docs.fidor.de)';
|
19
|
+
|
20
|
+
/**
|
21
|
+
*
|
22
|
+
* @var integer
|
23
|
+
*/
|
24
|
+
protected $connect_timeout = 15;
|
25
|
+
|
26
|
+
/**
|
27
|
+
*
|
28
|
+
* @var integer
|
29
|
+
*/
|
30
|
+
protected $timeout = 60;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Stores last request log
|
34
|
+
*
|
35
|
+
* @var string
|
36
|
+
*/
|
37
|
+
protected static $debug_log;
|
38
|
+
|
39
|
+
/**
|
40
|
+
*
|
41
|
+
* @var boolean
|
42
|
+
*/
|
43
|
+
protected $debug_enabled = false;
|
44
|
+
|
45
|
+
/**
|
46
|
+
*
|
47
|
+
* @param \Fidor\SDK\Config $config
|
48
|
+
* @param string $redirect_uri
|
49
|
+
*/
|
50
|
+
public function __construct( Config $config ) {
|
51
|
+
$this->config = $config;
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Turn debugging on
|
56
|
+
*
|
57
|
+
* @return \Fidor\SDK\Authorization
|
58
|
+
*/
|
59
|
+
public function enableDebug( ) {
|
60
|
+
$this->debug_enabled = true;
|
61
|
+
return $this;
|
62
|
+
}
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Turn debugging off
|
66
|
+
*
|
67
|
+
* @return \Fidor\SDK\Authorization
|
68
|
+
*/
|
69
|
+
public function disableDebug( ) {
|
70
|
+
$this->debug_enabled = false;
|
71
|
+
return $this;
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Defines the HTTP user agent string used in requests
|
76
|
+
*
|
77
|
+
* @param string $userAgent
|
78
|
+
* @return \Fidor\SDK\Authorization
|
79
|
+
*/
|
80
|
+
public function setUserAgent( $userAgent ) {
|
81
|
+
$this->user_agent = $userAgent;
|
82
|
+
return $this;
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Sets connection timeout
|
87
|
+
*
|
88
|
+
* @param integer $connectTimeout
|
89
|
+
* @return \Fidor\SDK\Authorization
|
90
|
+
*/
|
91
|
+
public function setConnectTimeout( $connectTimeout ) {
|
92
|
+
$this->connect_timeout = $connectTimeout;
|
93
|
+
return $this;
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
*
|
98
|
+
* @param integer $timeout
|
99
|
+
* @return \Fidor\SDK\Authorization
|
100
|
+
*/
|
101
|
+
public function setTimeout( $timeout ) {
|
102
|
+
$this->timeout = (int) $timeout;
|
103
|
+
return $this;
|
104
|
+
}
|
105
|
+
|
106
|
+
/**
|
107
|
+
*
|
108
|
+
* @return string
|
109
|
+
*/
|
110
|
+
public function getRequestUrl( $redirect_uri = null, $state = null ) {
|
111
|
+
return sprintf( '%s/authorize?response_type=code&client_id=%s&state=%s&redirect_uri=%s', $this->config->getOAuthUrl(), $this->config->getClientId(), $state, urlencode( $redirect_uri ) );
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
*
|
116
|
+
* @return string
|
117
|
+
*/
|
118
|
+
public function getTokenUrl( ) {
|
119
|
+
return $this->config->getOAuthUrl() . '/token';
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
*
|
124
|
+
* @return string
|
125
|
+
*/
|
126
|
+
public function getRevokeTokenUrl( ) {
|
127
|
+
return $this->config->getOAuthUrl() . '/revoke';
|
128
|
+
}
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Redirect user browser to authorization server.
|
132
|
+
*
|
133
|
+
* @param string $state
|
134
|
+
*/
|
135
|
+
public function start( $state = null ) {
|
136
|
+
$state = $state ? $state : self::makeState();
|
137
|
+
$auth_url = $this->getRequestUrl( $this->config->getCallbackUrl(), $state );
|
138
|
+
header( 'Location: ' . $auth_url );
|
139
|
+
exit;
|
140
|
+
}
|
141
|
+
|
142
|
+
/**
|
143
|
+
* Request access token after authorization was grantd by resource owner
|
144
|
+
*
|
145
|
+
* @param string $code
|
146
|
+
* @return string
|
147
|
+
*/
|
148
|
+
public function finish( $code ) {
|
149
|
+
$json = $this->http_post(
|
150
|
+
$this->getTokenUrl(),
|
151
|
+
sprintf( 'client_id=%s&client_secret=%s&code=%s&redirect_uri=%s&grant_type=authorization_code', $this->config->getClientId(), $this->config->getClientSecret(), $code, urlencode( $this->config->getCallbackUrl() ) ),
|
152
|
+
array( 'auth' => true, 'auth_scheme' => 'Bearer', )
|
153
|
+
);
|
154
|
+
|
155
|
+
return json_decode( $json, true );
|
156
|
+
}
|
157
|
+
|
158
|
+
/**
|
159
|
+
* Refresh access token
|
160
|
+
*
|
161
|
+
* @param string $refresh_token
|
162
|
+
* @return string
|
163
|
+
*/
|
164
|
+
public function refresh( $refresh_token = null ) {
|
165
|
+
$json = $this->http_post(
|
166
|
+
$this->getTokenUrl(), sprintf( 'grant_type=refresh_token&refresh_token=%s', $refresh_token ? $refresh_token : $this->config->getRefreshToken() ),
|
167
|
+
array( 'auth' => true, )
|
168
|
+
);
|
169
|
+
|
170
|
+
return json_decode( $json, true );
|
171
|
+
}
|
172
|
+
|
173
|
+
/**
|
174
|
+
* Revoke both access and refresh tokens. By default, it revokes access token.
|
175
|
+
*
|
176
|
+
* @param string|null $token
|
177
|
+
* @return string
|
178
|
+
*/
|
179
|
+
public function revoke( $token = null ) {
|
180
|
+
$json = $this->http_post(
|
181
|
+
$this->getRevokeTokenUrl(),
|
182
|
+
sprintf( 'token=%s', $token ? $token : $this->config->getAccessToken() ),
|
183
|
+
array( 'auth' => true, )
|
184
|
+
);
|
185
|
+
|
186
|
+
return json_decode( $json, true );
|
187
|
+
}
|
188
|
+
|
189
|
+
protected function http_post( $url, $data, $options = array() ) {
|
190
|
+
if ( function_exists( 'curl_init' ) ) {
|
191
|
+
$headers = array( 'Content-Type: application/x-www-form-urlencoded' );
|
192
|
+
|
193
|
+
$ch = curl_init( $url );
|
194
|
+
|
195
|
+
if ( array_key_exists( 'auth', $options ) && true === $options['auth'] ) {
|
196
|
+
$scheme = ! empty( $options['auth_scheme'] ) ? $options['auth_scheme'] : 'Basic';
|
197
|
+
$token = base64_encode( $this->config->getClientId() . ":" . $this->config->getClientSecret() );
|
198
|
+
$headers[] = sprintf( 'Authorization: %s %s', $scheme, $token );
|
199
|
+
}
|
200
|
+
|
201
|
+
curl_setopt( $ch, CURLOPT_HEADER, false );
|
202
|
+
curl_setopt( $ch, CURLOPT_POST, true );
|
203
|
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
204
|
+
|
205
|
+
if ( preg_match( '/^https:/is', trim( $url ) ) ) {
|
206
|
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
|
207
|
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
|
208
|
+
}
|
209
|
+
|
210
|
+
/**
|
211
|
+
* In case we're debugging
|
212
|
+
*/
|
213
|
+
$fh = null;
|
214
|
+
if ( $this->debug_enabled ) {
|
215
|
+
curl_setopt( $ch, CURLOPT_VERBOSE, true );
|
216
|
+
$fh = fopen( 'php://temp', 'w+' );
|
217
|
+
curl_setopt( $ch, CURLOPT_STDERR, $fh );
|
218
|
+
}
|
219
|
+
|
220
|
+
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $this->connect_timeout );
|
221
|
+
curl_setopt( $ch, CURLOPT_TIMEOUT, $this->timeout );
|
222
|
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );
|
223
|
+
curl_setopt( $ch, CURLOPT_USERAGENT, $this->user_agent );
|
224
|
+
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
|
225
|
+
|
226
|
+
$resp = curl_exec( $ch );
|
227
|
+
|
228
|
+
/**
|
229
|
+
* Debugging was enabled
|
230
|
+
*/
|
231
|
+
if ( $this->debug_enabled ) {
|
232
|
+
rewind( $fh );
|
233
|
+
self::$debug_log = ( $data ? "sent data: \n" . ( is_array( $data ) ? print_r( $data, true ) : $data ) : '' ) . "\n\nHTTP logs:\n" . stream_get_contents( $fh );
|
234
|
+
}
|
235
|
+
|
236
|
+
curl_close( $ch );
|
237
|
+
|
238
|
+
return $resp;
|
239
|
+
} else {
|
240
|
+
$headers = "Content-type: application/x-www-form-urlencoded\r\n";
|
241
|
+
|
242
|
+
if ( array_key_exists( 'auth', $options ) && true === $options['auth'] ) {
|
243
|
+
$scheme = ! empty( $options['auth_scheme'] ) ? $options['auth_scheme'] : 'Basic';
|
244
|
+
$token = base64_encode( $this->config->getClientId() . ":" . $this->config->getClientSecret() );
|
245
|
+
$headers .= sprintf( "Authorization: %s %s\r\n", $scheme, $token );
|
246
|
+
}
|
247
|
+
|
248
|
+
$options = array(
|
249
|
+
'http' => array(
|
250
|
+
'header' => $headers,
|
251
|
+
'method' => 'POST',
|
252
|
+
'content' => $data,
|
253
|
+
),
|
254
|
+
);
|
255
|
+
$context = stream_context_create( $options );
|
256
|
+
return file_get_contents( $url, false, $context );
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
/**
|
261
|
+
*
|
262
|
+
* @return string
|
263
|
+
*/
|
264
|
+
public static function getDebugLog( ) {
|
265
|
+
return self::$debug_log;
|
266
|
+
}
|
267
|
+
|
268
|
+
/**
|
269
|
+
* Generate a random string for use as state parameter
|
270
|
+
*
|
271
|
+
* @return string
|
272
|
+
*/
|
273
|
+
public static function makeState( ) {
|
274
|
+
return md5( time() . rand( 1000000, 9999999 ) );
|
275
|
+
}
|
276
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<?php
|
2
|
+
namespace Fidor\SDK;
|
3
|
+
|
4
|
+
class Autoload {
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Register class autoloader
|
8
|
+
*/
|
9
|
+
public static function register() {
|
10
|
+
spl_autoload_register( array( __CLASS__, 'load' ) );
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Load class
|
15
|
+
*
|
16
|
+
* @param string $class
|
17
|
+
*/
|
18
|
+
public static function load( $class ) {
|
19
|
+
// load only Fidor classes
|
20
|
+
if ( 'Fidor\\' === substr( $class, 0, 6 ) ) {
|
21
|
+
// turn namespace separator and _ to directory separtor
|
22
|
+
$file_path = __DIR__ . '/' . preg_replace( '/[\\_]/', DIRECTORY_SEPARATOR, substr( $class, strrpos( $class, '\\' ) + 1 ) ) . '.php';
|
23
|
+
|
24
|
+
// load class file if exists
|
25
|
+
if ( is_readable( $file_path ) ) {
|
26
|
+
require_once $file_path;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
}
|
32
|
+
|
33
|
+
Autoload::register();
|
@@ -0,0 +1,239 @@
|
|
1
|
+
<?php
|
2
|
+
namespace Fidor\SDK;
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @property \Fidor\SDK\Users $users Get users resource
|
6
|
+
* @property \Fidor\SDK\Accounts $accounts Get accounts resource
|
7
|
+
* @property \Fidor\SDK\Customers $customers Get customers resource
|
8
|
+
* @property \Fidor\SDK\Transactions $transactions Get transactions resource
|
9
|
+
* @property \Fidor\SDK\Transfers $transfers Get transfers resource
|
10
|
+
*
|
11
|
+
*/
|
12
|
+
class Client {
|
13
|
+
|
14
|
+
/**
|
15
|
+
*
|
16
|
+
* @var Config
|
17
|
+
*/
|
18
|
+
protected $config;
|
19
|
+
|
20
|
+
/**
|
21
|
+
*
|
22
|
+
* @var integer
|
23
|
+
*/
|
24
|
+
protected $connect_timeout = 15;
|
25
|
+
|
26
|
+
/**
|
27
|
+
*
|
28
|
+
* @var integer
|
29
|
+
*/
|
30
|
+
protected $timeout = 60;
|
31
|
+
|
32
|
+
/**
|
33
|
+
*
|
34
|
+
* @var string
|
35
|
+
*/
|
36
|
+
protected $user_agent = 'FidorSDK (+https://docs.fidor.de)';
|
37
|
+
|
38
|
+
/**
|
39
|
+
*
|
40
|
+
* @var string
|
41
|
+
*/
|
42
|
+
protected static $debug_log;
|
43
|
+
|
44
|
+
/**
|
45
|
+
*
|
46
|
+
* @param \Fidor\SDK\Config $config
|
47
|
+
*/
|
48
|
+
public function __construct( Config $config ) {
|
49
|
+
$this->config = $config;
|
50
|
+
}
|
51
|
+
|
52
|
+
/**
|
53
|
+
*
|
54
|
+
* @param string $name
|
55
|
+
* @return mixed
|
56
|
+
*/
|
57
|
+
public function __get( $name ) {
|
58
|
+
$class = __NAMESPACE__ . '\\' . ucfirst( $name );
|
59
|
+
if ( class_exists( $class ) && is_subclass_of( $class, __CLASS__ ) ) {
|
60
|
+
$obj = new $class( $this->config );
|
61
|
+
return $obj;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
*
|
67
|
+
* @param string $url
|
68
|
+
* @return string
|
69
|
+
*/
|
70
|
+
public function get( $url ) {
|
71
|
+
return $this->request( 'get', $url );
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
*
|
76
|
+
* @param string $url
|
77
|
+
* @param string|array $data
|
78
|
+
* @return string
|
79
|
+
*/
|
80
|
+
public function post( $url, $data ) {
|
81
|
+
return $this->request( 'post', $url, $data );
|
82
|
+
}
|
83
|
+
|
84
|
+
/**
|
85
|
+
*
|
86
|
+
* @param string $url
|
87
|
+
* @param string|array $data
|
88
|
+
* @return string
|
89
|
+
*/
|
90
|
+
public function put( $url, $data ) {
|
91
|
+
return $this->request( 'put', $url, $data );
|
92
|
+
}
|
93
|
+
|
94
|
+
/**
|
95
|
+
*
|
96
|
+
* @param string $url
|
97
|
+
* @param string|array $data
|
98
|
+
* @return string
|
99
|
+
*/
|
100
|
+
public function patch( $url, $data ) {
|
101
|
+
return $this->request( 'patch', $url, $data );
|
102
|
+
}
|
103
|
+
|
104
|
+
/**
|
105
|
+
*
|
106
|
+
* @param string $url
|
107
|
+
* @return string
|
108
|
+
*/
|
109
|
+
public function delete( $url ) {
|
110
|
+
return $this->request( 'put', $url );
|
111
|
+
}
|
112
|
+
|
113
|
+
/**
|
114
|
+
*
|
115
|
+
* @param string $method
|
116
|
+
* @param string $url
|
117
|
+
* @param string|null $data
|
118
|
+
*/
|
119
|
+
public function request( $method, $url, $data = null ) {
|
120
|
+
if ( function_exists( 'curl_init' ) ) {
|
121
|
+
return $this->curl_request( $method, $url, $data );
|
122
|
+
} else {
|
123
|
+
return $this->stream_request( $method, $url, $data );
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
/**
|
128
|
+
*
|
129
|
+
* @param string $method
|
130
|
+
* @param string $url
|
131
|
+
* @param mixed $data
|
132
|
+
* @return string
|
133
|
+
*/
|
134
|
+
protected function curl_request( $method, $url, $data = null ) {
|
135
|
+
$method = trim( strtoupper( $method ) );
|
136
|
+
|
137
|
+
/**
|
138
|
+
* The empty Expect headers removes HTTP 100-continue mechanism
|
139
|
+
*/
|
140
|
+
$headers = array(
|
141
|
+
'Accept: application/vnd.fidor.de; version=1,text/json',
|
142
|
+
'Authorization: Bearer ' . $this->config->getAccessToken(),
|
143
|
+
'Expect: ',
|
144
|
+
);
|
145
|
+
|
146
|
+
$ch = curl_init( $url );
|
147
|
+
curl_setopt( $ch, CURLOPT_HEADER, false );
|
148
|
+
|
149
|
+
if ( 'POST' === $method ) {
|
150
|
+
curl_setopt( $ch, CURLOPT_POST, true );
|
151
|
+
} elseif ( in_array( $method, array( 'HEAD', 'PUT', 'PATCH', 'DELETE' ) ) ) {
|
152
|
+
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, $method );
|
153
|
+
}
|
154
|
+
|
155
|
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
156
|
+
|
157
|
+
if ( preg_match( '/^https:/is', trim( $this->uri ) ) ) {
|
158
|
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
|
159
|
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
|
160
|
+
}
|
161
|
+
|
162
|
+
// debugging
|
163
|
+
curl_setopt( $ch, CURLOPT_VERBOSE, true );
|
164
|
+
$fh = fopen( 'php://temp', 'w+' );
|
165
|
+
curl_setopt( $ch, CURLOPT_STDERR, $fh );
|
166
|
+
// -debugging
|
167
|
+
|
168
|
+
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $this->connect_timeout );
|
169
|
+
curl_setopt( $ch, CURLOPT_TIMEOUT, $this->timeout );
|
170
|
+
|
171
|
+
if ( ! empty( $data ) ) {
|
172
|
+
if ( is_array( $data ) ) {
|
173
|
+
$data = json_encode( $data );
|
174
|
+
}
|
175
|
+
if ( in_array( $method, array( 'PUT', 'PATCH', 'DELETE' ) ) ) {
|
176
|
+
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, $data );
|
177
|
+
} else {
|
178
|
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );
|
179
|
+
}
|
180
|
+
|
181
|
+
$headers[] = 'Content-Type: application/json';
|
182
|
+
}
|
183
|
+
|
184
|
+
if ( $this->user_agent ) {
|
185
|
+
curl_setopt( $ch, CURLOPT_USERAGENT, $this->user_agent );
|
186
|
+
}
|
187
|
+
|
188
|
+
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
|
189
|
+
|
190
|
+
$result = curl_exec( $ch );
|
191
|
+
|
192
|
+
$request_info = curl_getinfo( $ch );
|
193
|
+
|
194
|
+
rewind( $fh );
|
195
|
+
self::$debug_log = ( $data ? "SENDING DATA: \n" . ( is_array( $data ) ? print_r( $data, true ) : $data ) . "\n\n" : '' ) . stream_get_contents( $fh ) . "\n\nRESPONSE:\n" . $result;
|
196
|
+
|
197
|
+
curl_close( $ch );
|
198
|
+
|
199
|
+
return json_decode( $result, true );
|
200
|
+
}
|
201
|
+
|
202
|
+
/**
|
203
|
+
*
|
204
|
+
* @param string $method
|
205
|
+
* @param string $url
|
206
|
+
* @param mixed $data
|
207
|
+
* @return string
|
208
|
+
*/
|
209
|
+
protected function stream_request( $method, $url, $data = null ) {
|
210
|
+
$headers = "Accept: application/vnd.fidor.de; version=1,text/json\r\n";
|
211
|
+
$headers .= "Authorization: Bearer " . $this->config->getAccessToken() . "\r\n";
|
212
|
+
$headers .= "Expect: \r\n";
|
213
|
+
|
214
|
+
$options = array();
|
215
|
+
$options['http']['method'] = $method;
|
216
|
+
|
217
|
+
if ( ! empty( $data ) ) {
|
218
|
+
if ( is_array( $data ) ) {
|
219
|
+
$data = json_encode( $data );
|
220
|
+
}
|
221
|
+
$headers .= "Content-Type: application/json\r\n";
|
222
|
+
$options['http']['content'] = $data;
|
223
|
+
}
|
224
|
+
|
225
|
+
$options['http']['header'] = $headers;
|
226
|
+
|
227
|
+
$context = stream_context_create( $options );
|
228
|
+
return file_get_contents( $url, false, $context );
|
229
|
+
}
|
230
|
+
|
231
|
+
/**
|
232
|
+
*
|
233
|
+
* @return string
|
234
|
+
*/
|
235
|
+
public static function get_debug_log( ) {
|
236
|
+
return self::$debug_log;
|
237
|
+
}
|
238
|
+
|
239
|
+
}
|