Met een webhook is het mogelijk om bericht te ontvangen wanneer bij Pricemotion nieuwe prijzen beschikbaar zijn. De webhook stuurt dezelfde data als via de API wordt opgevraagd.
Door de webhook te gebruiker is het niet nodig om continu prijzen op te vragen. En je hebt altijd de laatste data zodra die er is.
Webhook definiƫren
curl -sSf -u 'APIKEY:' \
https://www.pricemotion.nl/api/webhooks \
-X POST \
-d '{"url":"https://hookb.in/6JnQ2z7Ww9soRnwwYNe9"}'
URL: https://www.pricemotion.nl/api/webhooks
Body: JSON met veld url
Authenticatie: HTTP Basic authentication met API key als gebruikersnaam
Webhook testen
curl -sSf -u 'APIKEY:' \
https://www.pricemotion.nl/api/webhooks/trigger \
-X POST \
-d '{"ean":"4242002514215"}'
URL: https://www.pricemotion.nl/api/webhooks/trigger
Body: JSON met veld ean
Authenticatie: HTTP Basic authentication met API key als gebruikersnaam
Als er veel producten in je account staan, zul je vrij snel al updates ontvangen. Om sneller te kunnen testen, kun je handmatig een update aanvragen van een specifiek EAN. Dit moet dan wel in je account staan, en er moeten prijzen beschikbaar zijn.
Webhook ontvangen
In het kort:
- Decodeer de Base64 in de request body.
- Pak de data en ondertekening uit met behulp van libsodium en public keys op https://www.pricemotion.nl/api/pubkeys. Er kunnen meerdere keys actief zijn en deze kunnen wijzigen, dus cache deze data voor een beperkte duur, bijvoorbeeld 24 uur.
- Decodeer het result als JSON.
- Pak de "xml" key uit het object en verwerkt deze als een normale API respons.
Voor PHP is een SDK beschikbaar waarmee de webhook requests eenvoudig verwerkt kan worden.
Voorbeeld code in PHP (zonder SDK):
<?php
$pubkeys = json_decode(file_get_contents('https://www.pricemotion.nl/api/pubkeys'), true)['signatures'];
$data = base64_decode(file_get_contents('php://input'));
$result = null;
foreach ($pubkeys as $pubkey) {
$result = sodium_crypto_sign_open($data, base64_decode($pubkey));
if ($result !== false) {
break;
}
}
if (!$result) {
die('Ongeldige data');
}
$wrapper = json_decode($result, true);
$xml = $wrapper['xml'];
De $xml variabele bevat de prijsdata van het product en kan verder verwerkt worden.
Opmerkingen
0 opmerkingen
U moet u aanmelden om een opmerking te plaatsen.