Permalänk

Köra Curl kommando med PHP

Hjärnan går inte igång efter Jul... Nedan Curl vill jag köra med PHP men får det inte att fungera, har någon koll och kan ge mig ett exempel?

curl https://{subdomain}.zendesk.com/api/v2/requests.json \
-v -u {email_address}/token:{api_token}

Permalänk
Medlem
Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk

Nja, jag formulerade mig tokigt. Menade hur använder jag curl kommandot ovan programmatiskt i PHP och hur auktoriserar jag rätt då det finns en "user" (vet inte att den heter user) och en token (vet inte att den heter token).

Detta är vad jag vet samt så har jag mailadressen och token: https://developer.zendesk.com/rest_api/docs/support/requests

Koden i slutändan ska se ut något liknande:

$url = 'https://xxx.zendesk.com/api/v2/tickets.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $mail.":".$token);
$output = curl_exec($ch);
curl_close($ch);
$result = json_decode($output, true);

Permalänk
Medlem

Gissar att det är föredraget att använda token istället för user/pass (så du slipper ha dessa uppgifter i koden). Ser inte ut som du kan skapa API-tokens programmatiskt utan att de genereras i webbgränssnittet enligt dokumentationen här.

Enligt denna dokumentation så skall du använda basic auth innehållandes "<user>@<domain>.<tld>/token:<token>". Så att sätta CURLOPT_USERPWD borde vara tillräckligt.

Sen finns det ju färdiga API-klienter (för PHP) att integrera/bygga ut istället för att skriva allt från scratch. Kikat på dem?

Permalänk
Skrivet av felplacrd:

Gissar att det är föredraget att använda token istället för user/pass (så du slipper ha dessa uppgifter i koden). Ser inte ut som du kan skapa API-tokens programmatiskt utan att de genereras i webbgränssnittet enligt dokumentationen här.

Enligt denna dokumentation så skall du använda basic auth innehållandes "<user>@<domain>.<tld>/token:<token>". Så att sätta CURLOPT_USERPWD borde vara tillräckligt.

Sen finns det ju färdiga API-klienter (för PHP) att integrera/bygga ut istället för att skriva allt från scratch. Kikat på dem?

Tack för input! Jo, dom vill köra token istället för användare och lösenord. Så jag har mail och token som ska användas enligt instruktionerna du skicka där.

Men jag vet bara inte hur jag skriver det. Koden ovan med: curl_setopt($ch, CURLOPT_USERPWD, $api_user. ":" .$api_token); returnerar att jag inte kan auktoriseras.

Jo, har sett dom färdiga biblioteken men allt jag vill gör är att köra curl kommandot från första posten korrekt så att jag får tillbaka en aktuell lista. Då blir det overkill och onödiga dependencies att köra in flera biliotek tycker jag

Permalänk
Medlem

Fattar. Det är najs att slippa bloat. Men kom ihåg man förr eller senare - i alla fall ofta - kommer till en punkt där man inser att det kanske hade varit en god idé att utgå från ett ramverk ... Men det beror ju på hur stort projektet blir.

Detta fungerade för mig. Satte upp ett testkonto, Aktiverade "Token Access" via webbguit, och lade till en API-token.

<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://fel9738.zendesk.com/api/v2/tickets.json'); curl_setopt($ch, CURLOPT_USERPWD, "min-signup-email@gmail.com/token:min-token"); curl_setopt($ch, CURLINFO_HEADER_OUT, true); // detta var för debug, du kan stryka den $response = curl_exec($ch); curl_close($ch); echo $response; ?>

thomas@ubuntu:~$ php -f test.php | jq { "tickets": [ { "url": "https://fel9738.zendesk.com/api/v2/tickets/1.json", "id": 1, "external_id": null, "via": { "channel": "sample_ticket", "source": { "from": {}, "to": {}, "rel": null } }, <snip>

Permalänk
Skrivet av felplacrd:

Fattar. Det är najs att slippa bloat. Men kom ihåg man förr eller senare - i alla fall ofta - kommer till en punkt där man inser att det kanske hade varit en god idé att utgå från ett ramverk ... Men det beror ju på hur stort projektet blir.

Det fungerade, (jag skäms och vill komma med bortförklaringar men) tack så mycket för hjälpen!

Det ska bli ett plugin till WordPress och endast hämta den där och en till lista för att kombinera dem i WP's databas så därför jag inte vill dra in mer som ev kan strula framöver

Permalänk
Medlem

På tal om anti-bloat, förresten. Om du vill slippa även php-curl kan du göra nåt sånt här.

<?php $handle = fopen("https://min-signup-email%40gmail.com%2Ftoken:min-token@fel9738.zendesk.com/api/v2/tickets.json", "r"); $response = stream_get_contents($handle); fclose($handle); echo $response; ?>

Notera att @ och / är urlencodade.

Glömde fclose(); :)