CURL naar PHP omzetten
Dit is dan mijn eerste post op dit forum en ik val direct binnen met een vraag. Hopelijk is er iemand die me bij het volgende probleem kan helpen. Mijn kennis vwb Curl is zeer beperkt en ik zit al lang vast op dit onderwerp.
Als ik het volgende CURL script in de terminal uitvoer loopt dit als een trein:
curl -XPOST https://api.wonderpush.com/v1/management/deliveries \
-d accessToken=ABCDEFGHIJK \
-d applicationId=0123456789 \
-d segmentIds=@ALL \
-d notificationOverride='{"type":"simple","text":"Testmessage","data":{"type":"simple"}}'
Nu is het idee dat dit script automatisch op de server wordt uitgevoerd zodra dit nodig is, ik zal dus iets in PHP moeten schrijven dat deze output geeft.
Nu ben ik momenteel bij het volgende stukje code:
$APPLICATION_ID = "0123456789";
$ACCESS_TOKEN = "ABCDEFGHIJK";
$url = 'https://api.wonderpush.com/v1/management/deliveries';
$ch = curl_init();
$headers = array(
'Content-Type: application/json',
'Content-Length: ' . strlen($_data),
);
$data = array(
'accessToken' => $ACCESS_TOKEN
);
$_data = json_encode($data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
Om te testen heb ik CURL afgekort tot de eerste 2 regels, als ik dit in de terminal uitvoer krijg ik de response dat de body mist maar de access_Token komt wel door. Echter als ik het uitvoer met het PHP script mist hij de access_Token.
Schijnbaar stuurt mijn stukje PHP de access_Token niet door of op de verkeerde manier.
Kan iemand mij vertellen wat er mis gaat? Het gebrek aan feedback (wat staat er in de POST data?) helpt niet met het debuggen. Als iemand weet hoe ik dat kan zien ben ik ook een stapje verder.
Alvast bedankt!
Geert-Jan
kun je 'deliveries' alleen ophalen met een GET en niet met een POST.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$url = 'https://api.wonderpush.com/v1/management/deliveries/?accessToken=' . $ACCESS_TOKEN;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>
$url = 'https://api.wonderpush.com/v1/management/deliveries/?accessToken=' . $ACCESS_TOKEN;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>
Zou dus voldoende moeten zijn.
Volgens mij is de documentatie op https://www.wonderpush.com/docs/reference/management-api/v1#!/post__v1_management_deliveries_ van toepassing. Dit gaat over het posten van push berichten.
Example
POST https://api.wonderpush.com/v1/management/deliveries/?accessToken=foobar
Zou volgens mij dan moeten werken met POST maar geen idee hoe.
Nu zeg je zelf dat dat het in de terminal wel werkt..:
"curl -XPOST"
Je haalt het op met een GET maar gebruikt vervolgens -XPOST
It should be noted that curl selects which methods to use on its own depending on what action to ask for. -d will do POST, -I will do HEAD and so on. If you use the --request / -X option you can change the method keyword curl selects, but you will not modify curl's behavior. This means that if you for example use -d "data" to do a POST, you can modify the method to a PROPFIND with -X and curl will still think it sends a POST. You can change the normal GET to a POST method by simply adding -X POST in a command line like:
curl -X POST http://example.org/
... but curl will still think and act as if it sent a GET so it won't send any request body etc.
Bron: https://curl.haxx.se/docs/httpscripting.html
Gewijzigd op 17/02/2016 11:47:39 door E vH
EDIT: of wellicht detecteert cURL dit automatisch, maar wordt er niet voldaan aan een randvoorwaarde om te kunnen communiceren via https?
Heb je al geprobeerd om het melden + weergeven van fouten aan te zetten en heb je je errorlogs geraadpleegd? Heeft cURL zelf een (verbose) debug modus?
Gewijzigd op 17/02/2016 14:36:50 door Thomas van den Heuvel
HTTPS heb ik aangezet maar maakte geen verschil, met de info die ik kan ik weer even vooruit, er gaat een hele nieuwe wereld open... Verbose met errorlog is ook Work in progress, hier ben ik al even mee bezig geweest maar kreeg geen positief resultaat.