RegisterPropertyInteger("Reservate", 0); $this->RegisterPropertyInteger("GetAmount", 0); $this->RegisterVariableInteger("ReservationAmount", "ReservationAmount", '', 0); $this->RegisterVariableBoolean("AmountIsReserved", "AmountIsReserved", '', false); // Event-Handler registrieren $this->RegisterMessage($this->ReadPropertyInteger("Reservate"), VM_UPDATE); $this->RegisterMessage($this->ReadPropertyInteger("GetAmount"), VM_UPDATE); } public function ApplyChanges() { parent::ApplyChanges(); // Event-Handler erneut registrieren, falls sich die Property-IDs geändert haben $this->RegisterMessage($this->ReadPropertyInteger("Reservate"), VM_UPDATE); $this->RegisterMessage($this->ReadPropertyInteger("GetAmount"), VM_UPDATE); } public function MessageSink($TimeStamp, $SenderID, $Message, $Data) { IPS_LogMessage("Belevo_Bezahl_Modul", "MessageSink: SenderID=$SenderID, Message=$Message"); switch ($SenderID) { case $this->ReadPropertyInteger("Reservate"): if (GetValueBoolean($this->ReadPropertyInteger("Reservate"))) { $this->ReservateAmount(GetValueInteger($this->GetIDForIdent("ReservationAmount"))); } break; case $this->ReadPropertyInteger("GetAmount"): if (GetValueBoolean($this->ReadPropertyInteger("GetAmount"))) { $this->GetAmount(GetValueInteger($this->ReadPropertyInteger("GetAmount"))); } break; } } public function ReservateAmount($amount) { IPS_LogMessage("Belevo_Bezahl_Modul", "ReservateAmount: amount=$amount"); // Beispiel-Logik zur Reservierung des Betrags bei Stripe $apiKey = "pk_test_51Qkr79LJAcsNrpivA90lt7ULEzyXKR8l0pAqTBgfeuAIWlsLS4A3BdIBITc9UooFANbImvlJQ2F2jOZ0X5j8GI7Q00hNNasvQm"; // Test-API-Schlüssel // Öffnen eines Fensters zur Eingabe der Zahlungsinformationen $html = ''; SetValue($this->ReadPropertyInteger("Reservate"), $html); // Baut das HTML auf // Simulierte erfolgreiche Reservierung $reservationSuccessful = true; if ($reservationSuccessful) { SetValueBoolean($this->GetIDForIdent("AmountIsReserved"), true); IPS_LogMessage("Belevo_Bezahl_Modul", "Reservierung erfolgreich."); } else { IPS_LogMessage("Belevo_Bezahl_Modul", "Reservierung fehlgeschlagen."); } } public function GetAmount($amount) { IPS_LogMessage("Belevo_Bezahl_Modul", "GetAmount: amount=$amount"); // Beispiel-Logik zum Abziehen des Betrags bei Stripe $apiUrl = "https://api.stripe.com/v1/charges"; $apiKey = "pk_test_51Qkr79LJAcsNrpivA90lt7ULEzyXKR8l0pAqTBgfeuAIWlsLS4A3BdIBITc9UooFANbImvlJQ2F2jOZ0X5j8GI7Q00hNNasvQm"; $data = [ "amount" => $amount * 100, // Betrag in Cent "currency" => "CHF", // Ersetze dies durch die gewünschte Währung "source" => "tok_visa" // Beispiel: Test-Token von Stripe ]; $options = [ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\nAuthorization: Bearer $apiKey\r\n", 'method' => 'POST', 'content' => http_build_query($data), ], ]; $context = stream_context_create($options); $result = file_get_contents($apiUrl, false, $context); if ($result === FALSE) { IPS_LogMessage("Belevo_Bezahl_Modul", "Abzug fehlgeschlagen."); } else { $response = json_decode($result, true); if (isset($response['id'])) { SetValueBoolean($this->ReadPropertyInteger("Reservate"), false); SetValueBoolean($this->GetIDForIdent("AmountIsReserved"), false); SetValueBoolean($this->ReadPropertyInteger("GetAmount"), false); IPS_LogMessage("Belevo_Bezahl_Modul", "Abzug erfolgreich."); } else { IPS_LogMessage("Belevo_Bezahl_Modul", "Abzug fehlgeschlagen: " . $response['error']['message']); } } } } ?>