OOP curl class
Ik ben laatst begonnen met voor het eerst curl te gebruiken in PHP.
Code (php)
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
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
$headers = [
"Content-Type: application/json",
"Accept: application/json",
"X-API-TOKEN: ".$token,
"Connection: keep-alive",
];
$body = [
'FirstName' => $result['inputs']['fname'],
'MiddleName' => $result['inputs']['prefix'],
'LastName' => $result['inputs']['lname'],
'Email' => $result['inputs']['email'],
'PhonePrivate' => $result['inputs']['phone'],
'Gender' => $result['inputs']['sex'],
'Zipcode' => $result['inputs']['zipcode'],
'City' => $result['inputs']['place'],
'Address' => $result['inputs']['street'],
'HouseNumber' => $result['inputs']['housenumber'],
'HouseNumberExtension' => $result['inputs']['addition'],
'BirthDate' => $result['inputs']['birthdate'],
'Language' => $result['inputs']['language'],
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://www.sportivity.com/sportivity-api/Customers',
CURLOPT_RETURNTRANSFER => true, //Return output instead of printing it.
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($body, JSON_FORCE_OBJECT),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSl_VERIFYHOST => false,)
);
$result['response'] = curl_exec($curl);
$result['errors'] = [];
curl_close($curl);
echo json_encode($result['response']);
"Content-Type: application/json",
"Accept: application/json",
"X-API-TOKEN: ".$token,
"Connection: keep-alive",
];
$body = [
'FirstName' => $result['inputs']['fname'],
'MiddleName' => $result['inputs']['prefix'],
'LastName' => $result['inputs']['lname'],
'Email' => $result['inputs']['email'],
'PhonePrivate' => $result['inputs']['phone'],
'Gender' => $result['inputs']['sex'],
'Zipcode' => $result['inputs']['zipcode'],
'City' => $result['inputs']['place'],
'Address' => $result['inputs']['street'],
'HouseNumber' => $result['inputs']['housenumber'],
'HouseNumberExtension' => $result['inputs']['addition'],
'BirthDate' => $result['inputs']['birthdate'],
'Language' => $result['inputs']['language'],
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://www.sportivity.com/sportivity-api/Customers',
CURLOPT_RETURNTRANSFER => true, //Return output instead of printing it.
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($body, JSON_FORCE_OBJECT),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSl_VERIFYHOST => false,)
);
$result['response'] = curl_exec($curl);
$result['errors'] = [];
curl_close($curl);
echo json_encode($result['response']);
Deze code word geactiveerd op het moment dat alle formulier velden correct zijn ingevuld.
Als response krijg ik de input velden terug inclusief een customer_id. wat goed is.
Ik vond dit alleen slordig en probeerde het in een class te maken:
Code (php)
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
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
<?php
class Api {
protected $base_url = 'https://www.sportivity.com/sportivity-api';
protected $token;
public function __construct($token){
$this->token = $token;
}
protected function getHeaders(){
return [
"Content-Type: application/json",
"Accept: application/json",
"X-API-TOKEN: ".$this->token,
"Connection: keep-alive",
];
}
public function prepareApi($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->base_url.$url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->getHeaders());
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($curl);
curl_close($curl);
return json_decode($response);
}
public function sendPostRequest($url, $body)
{
return $this->postRequest($url, $body);
}
private function postRequest($url, $body){
$curl = curl_init;
curl_setopt_array($curl, $this->getCurlPostOptions($url, $body));
$response = curl_exec($curl);
curl_close($curl);
return json_encode($response);
}
private function getCurlPostOptions($url, $body){
return [
CURLOPT_URL => $this->base_url.$url,
CURLOPT_RETURNTRANSFER => true, //Return output instead of printing it.
CURLOPT_HTTPHEADER => $this->getHeaders(),
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($body, JSON_FORCE_OBJECT),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSl_VERIFYHOST => false,
];
}
public function getLocations(){
return $this->prepareApi('/Locations');
}
public function getSubscriptions(){
return $this->prepareApi('/MembershipDefinition');
}
}
// $api = new Api();
// $test = $api->getLocations();
// var_dump($test->LocationResources);
?>
class Api {
protected $base_url = 'https://www.sportivity.com/sportivity-api';
protected $token;
public function __construct($token){
$this->token = $token;
}
protected function getHeaders(){
return [
"Content-Type: application/json",
"Accept: application/json",
"X-API-TOKEN: ".$this->token,
"Connection: keep-alive",
];
}
public function prepareApi($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->base_url.$url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->getHeaders());
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($curl);
curl_close($curl);
return json_decode($response);
}
public function sendPostRequest($url, $body)
{
return $this->postRequest($url, $body);
}
private function postRequest($url, $body){
$curl = curl_init;
curl_setopt_array($curl, $this->getCurlPostOptions($url, $body));
$response = curl_exec($curl);
curl_close($curl);
return json_encode($response);
}
private function getCurlPostOptions($url, $body){
return [
CURLOPT_URL => $this->base_url.$url,
CURLOPT_RETURNTRANSFER => true, //Return output instead of printing it.
CURLOPT_HTTPHEADER => $this->getHeaders(),
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($body, JSON_FORCE_OBJECT),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSl_VERIFYHOST => false,
];
}
public function getLocations(){
return $this->prepareApi('/Locations');
}
public function getSubscriptions(){
return $this->prepareApi('/MembershipDefinition');
}
}
// $api = new Api();
// $test = $api->getLocations();
// var_dump($test->LocationResources);
?>
Vervolgens probeer ik de data dus zo op te halen:
Code (php)
1
2
2
$api = new Api($token);
$result['response'] = $api->sendPostRequest('/Customers', $body);
$result['response'] = $api->sendPostRequest('/Customers', $body);
Helaas krijg ik een response: "null" terug en weet ik niet waar dat aan ligt.
Toevoeging op 19/10/2021 12:04:11:
Vervolgens doe ik eigenlijk nog
echo $result;
wat dus in jquery met een ajax request word opgehaald en JSON.parse() op het result
Ik zie twee keer een curl_close(): die in prepareApi() sluit waarschijnlijk vroegtijdig de verbinding.
Ward van der Put op 19/10/2021 12:27:55:
Ik zie twee keer een curl_close(): die in prepareApi() sluit waarschijnlijk vroegtijdig de verbinding.
PrepareApi() is een oudere functie, die gebruik ik om alle subscriptions te tonen, kan het zo zijn dat hij vanwege de zelfde variabel naam de verbinding al sluit voordat ik die post request doe? Want in die post request open ik de verbinding bewijze van opnieuw.
Toevoeging op 19/10/2021 12:38:43:
Ward van der Put op 19/10/2021 12:27:55:
Ik zie twee keer een curl_close(): die in prepareApi() sluit waarschijnlijk vroegtijdig de verbinding.
ik had even de curl_close weggehaald, maar dat maakt geen verschil. Als ik het object in de console.log bekijk in jquery dan zie ik dat 'response' ="null"
Waar komt die LocationResources vandaan?
Ozzie PHP op 19/10/2021 12:50:16:
$test->LocationResources
Waar komt die LocationResources vandaan?
Waar komt die LocationResources vandaan?
Oh let maar niet op die call hoor. In ieder geval als je de locations ophaalde dan zaten ze in de ->locationResources. Vandaar dat ik dat een keer dumpte
Toevoeging op 19/10/2021 14:01:09:
stom foutje van mij. Ik vergat bij curl_init de () haha
Toevoeging op 19/10/2021 16:22:16:
Ik loop alleen tegen een ander probleem aan. Zodra ik de Post request maak, dan komt het in dit object
Dit object wordt vervolgens ge-echoed in een json_encode, en in de front end met jquery opgehaald. Het toont alle waardes die naar de API zijn gestuurd + een aangemaakt CustomerID. Alleen krijg ik het niet voor elkaar om het CustomerId in de PHP goed te ontvangen, ik heb die namelijk nodig voor een 2e api call. Het werkt allemaal een beetje gek omdat ik steeds met jquery een ajax call maak naar een php functie die met een WordPress ajax action word aangeroepen. Ik weet niet of iemand daar ervaring mee heeft?