Hallo,
ich habe seit einigen Tagen in meinem Dyson-Modul einen Fehler, auf die Anmeldung antwortet er nur mitt HTTP 403 (also forbidden).
Da das ja schon seit vielen Monaten funktioniert bin ich etwas irritiert und habe meinen eigenen Code in Frage gestellt.
Daher habe ich versucht, das auf das wesentliche zu reduzieren
dieser curl-Aufruf funktioniert und liefert die erwartete Antwort.
curl -X POST -H "Content-Type: application/json" -k 'https://appapi.cp.dyson.com/v1/userregistration/authenticate?country=DE' -d '{"Email": "user@domain.xx", "Password": "<password>"}'
{"Account":"xxxx-yyyy-zzzz","Password":"lwglhglhwlhg=⇔"}
Dann habe ich mir das in php übersetzen lassen:
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://appapi.cp.dyson.com/v1/userregistration/authenticate?country=DE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"Email": "user@domain.xx", "Password": "<password>"}');
$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
echo 'result=' . $result . PHP_EOL;
das gibt folgenden Fehler
Error:SSL certificate problem: unable to get local issuer certificate
Also CURLOPT_SSL_VERIFYPEER hinzugefügt (wie in meinem Modul gemacht)
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://appapi.cp.dyson.com/v1/userregistration/authenticate?country=DE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"Email": "user@domain.xx", "Password": "<password>"}');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
echo 'result=' . $result . PHP_EOL;
Antwort
result=error code: 1020
Dann nochmal einen url-Aufruf aus einem Script
$s = "curl -X POST -H \"Content-Type: application/json\" -k 'https://appapi.cp.dyson.com/v1/userregistration/authenticate?country=DE' -d '{\"Email\": \"user@domain.xx\", \"Password\": \"\<password>\"}'";
echo $s . PHP_EOL;
system($s);
ergibt
curl -X POST -H „Content-Type: application/json“ -k ‚https://appapi.cp.dyson.com/v1/userregistration/authenticate?country=DE‘ -d ‚{„Email“: „user@domain.xx“, „Password“: „<password>“}‘
{„Account“:„xxxx-yyyy-zzzz“,„Password“:„lwglhglhwlhg=⇔“}
also auch richtig.
Es ist egal, ob ich das als Script oder per Modul durchführe.
Test mit Symcon 5.5 stable (IP-Symcon 5.5, Ubuntu, 04.12.2020, f9de3bea4595) und 5.5 ninja (IP-Symcon 5.5, Raspberry Pi, 06.01.2021, 15f964b68d15).
Der Code wird nur in dem Dyson-Konfigurator verwendet und den Konfiguration rufe ich natürlich nicht so häufig auf.
Insofern kann ich nicht genau sagen, wie lange das nicht funktioniert; das hat aber bislang bei mir und natürlich den Anwendern des Dyson-Moduls geklappt.
Ich habe leider keine 5.4 mehr zur Hand um das zu testen, sonst würde ich einen pi nochmal in der alten Version aufsetzen, um das Verhalten zu prüfen.
Hat irgend jemand eine Idee, was da nicht funktioniert?
Danke & Gruß
demel