Pay4All TWINT – Für WooCommerce & Pay4All Shop

Beschreibung

Pay4All for TWINT fügt TWINT als Zahlungsmethode zum kostenlosen Plugin Pay4All Shop hinzu (formularbasierte Bestellvorgänge).

TWINT ist eine Marke der TWINT AG (Schweiz). Dieses Plugin ist eine unabhängige Integration und steht in keiner Verbindung zur TWINT AG, wird von ihr nicht unterstützt oder gesponsert.

Hauptfunktionen:

  • TWINT-Integration für das kostenlose Plugin Pay4All Shop (Bestellformulare mit TWINT-Zahlung).
  • Schritt-für-Schritt-Einrichtungsassistent: TWINT-Anmeldedaten, Zertifikat-Upload, Verbindungstest, Statusseite.
  • Automatische Konvertierung des von TWINT gelieferten .p12-Zertifikats in das PEM-Format.
  • In den Assistenten integrierte Kassenregistrierung und Verbindungstest.
  • Vollständig übersetzte Admin-Oberfläche und Kundennachrichten in Französisch (fr_FR), Deutsch (de_DE) und Italienisch (it_IT). Ausgangssprache: Englisch (en_US).

Um dieses Plugin zu verwenden, benötigst du:

  • das kostenlose Plugin Pay4All Shop installiert und aktiviert.
  • ein TWINT-Händlerkonto mit einem konfigurierten Store und einem aktiven Zertifikat (siehe https://portal.twint.ch).

Es gibt keine Lizenzgebühr, kein Abonnement, keine Domain-Aktivierung. Installieren, aktivieren, den Assistenten ausführen, fertig.

WooCommerce-Unterstützung

Die WooCommerce-Zahlungs-Gateway-Integration (klassischer Checkout, Checkout-Blöcke, HPOS, Rückerstattungen, Hintergrundüberwachung) ist in diesem kostenlosen Plugin nicht enthalten. Sie befindet sich in der kostenpflichtigen Ergänzung „Pay4All Pro“, die außerhalb von WordPress.org unter https://pay4all.ch/ vertrieben wird. Installiere Pay4All Pro zusätzlich zu diesem Plugin, um das WooCommerce-TWINT-Gateway zu aktivieren.

Externe Dienste

Dieses Plugin verbindet sich mit der TWINT-Händler-SOAP-API (betrieben von der TWINT AG), um Zahlungen zu autorisieren, einzuziehen, zurückzuerstatten und abzugleichen. Ohne ein gültiges TWINT-Händlerkonto und Zertifikat kann das Gateway keine Zahlungen verarbeiten.

Wofür sie verwendet werden

  • Jede über ein Pay4All-Shop-Formular initiierte TWINT-Zahlung wird zur Autorisierung und zum Statusabruf an die TWINT-SOAP-API weitergeleitet (Zahlungsstart, Statusabruf im Hintergrund, Rückerstattung, Stornierung).
  • Es werden keine weiteren Daten an einen externen Dienst gesendet.

Welche Daten gesendet werden und wann

  • Beim Zahlungsstart: die Bestellnummer, der Betrag, die Währung, die Store-UID (aus deinem TWINT-Händlerkonto), die Kassen-ID und – je nach deiner TWINT-Konfiguration – die E-Mail-Adresse oder Telefonnummer des Kunden.
  • Beim Statusabruf und Abgleich: nur die TWINT-Transaktionskennung, die vom vorherigen Aufruf zurückgegeben wurde.
  • Bei einer Rückerstattung: die TWINT-Transaktionskennung sowie der zu erstattende Betrag.
  • Es werden keine Anmeldedaten, keine Plugin-Telemetrie und keine Website-Metadaten gesendet.

Wohin die Daten gesendet werden

Das Plugin kommuniziert je nach Ihrer Einstellung T4A_ENVIRONMENT mit einem von drei TWINT-eigenen Endpunkten:

  • Produktion: https://service.twint.ch/merchant/service/TWINTMerchantServiceV8_4
  • Integration / Staging: https://service-int.twint.ch/merchant/service/TWINTMerchantServiceV8_4
  • Vorautorisierungstest: https://service-pat.twint.ch/merchant/service/TWINTMerchantServiceV8_4

Nutzungsbedingungen und Datenschutzerklärung für TWINT

  • TWINT-Nutzungsbedingungen: https://www.twint.ch/en/legal/
  • TWINT-Datenschutz: https://www.twint.ch/en/data-protection/

Es wird von diesem Plugin kein weiterer externer Dienst kontaktiert.

Quellcode

Der vollständige, nicht minifizierte Quellcode dieses Plugins ist in der ZIP-Datei selbst enthalten. Jede PHP-Datei ist menschenlesbar und direkt bearbeitbar. Die JavaScript-Bundles unter assets/js/ werden in einer formatierten, nicht minifizierten Form ausgeliefert, sodass du sie ohne Build-Schritt lesen und ändern kannst.

Zum Arbeiten an diesem Plugin sind kein Compiler, Transpiler oder Bundler erforderlich.

Screenshots

Installation

  1. Lade den Ordner pay4all-for-twint nach /wp-content/plugins/ hoch (oder installiere die ZIP-Datei über Plugins > Installieren).
  2. Aktiviere „Pay4All for TWINT“ über die WordPress-Plugin-Seite.
  3. Installiere und aktiviere das kostenlose Plugin „Pay4All Shop“ (erforderliche Ergänzung).
  4. Öffne das Menü „Pay4All TWINT“ im Adminbereich und folge dem Assistenten: TWINT-Anmeldedaten, Zertifikat-Upload, Status.

Serveranforderungen:

  • PHP 7.4 oder höher (8.x empfohlen).
  • PHP-Erweiterungen: openssl, soap, curl.
  • WordPress 5.9 oder höher.
  • Pay4All-Shop-Plugin (erforderlich).

FAQ

Funktioniert das Plugin ohne Pay4All Shop?

Nein. Pay4All Shop ist eine erforderliche Ergänzung – der Assistent zeigt eine Warnung an, wenn die Ergänzung fehlt. Installiere beide Plugins zusammen.

Funktioniert das Plugin mit WooCommerce?

Nicht direkt. Das WooCommerce-TWINT-Gateway ist im kostenpflichtigen Add-on „Pay4All Pro“ enthalten, das über https://pay4all.ch/ vertrieben wird. Dieses Add-on wird zusätzlich zu diesem kostenlosen Plugin installiert und bindet den WooCommerce-Checkout, Checkout Blocks, die HPOS-Kompatibilität und die Hintergrundüberwachung an.

Wo finde ich meine TWINT-Anmeldedaten?

Melde dich bei https://portal.twint.ch an, erstelle einen Store und generiere ein Zertifikat. Der Assistent fragt nach der Store-UID, dem Zertifikatspasswort, der Kassen-ID und der Zertifikatsdatei.

Benötige ich ein Pay4All-Konto oder eine Lizenz?

Nein. Dieses Plugin ist vollständig kostenlos und funktioniert eigenständig (mit Pay4All Shop). Du benötigst nur TWINT-Händleranmeldedaten.

Wird WordPress Multisite unterstützt?

Nicht in dieser Version. Aktiviere das Plugin Website für Website.

Rezensionen

Zu diesem Plugin liegen noch keine Rezensionen vor.

Mitwirkende und Entwickler

„Pay4All TWINT – Für WooCommerce & Pay4All Shop“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:

Mitwirkende

Änderungsprotokoll

1.4.2

  • UX: WooCommerce teaser rewritten – „Pay4All Shop“ is a link to the plugin installer, „Download and try Pay4All Pro for 30 days“ link added.

1.4.1

  • UX: „Pay4All Shop“ now clickable in the „host plugin required“ admin notice, opens the plugin search directly.
  • i18n: notice string now uses a translator placeholder so the link stays intact across FR / DE / IT.

1.4.0

  • i18n-Überarbeitung – Quellzeichenketten ins Englische umgestellt. Alle für Benutzer sichtbaren Zeichenketten im Plugin-Code sind jetzt auf Englisch, entsprechend der WordPress-i18n-Konvention (msgid = englische Quelle, msgstr = Übersetzung). Vollständige Übersetzungspakete für Französisch (fr_FR), Deutsch (de_DE) und Italienisch (it_IT) sind unter /localization/ enthalten.
  • Plugin-Check-Konformität. unlink() wurde durch wp_delete_file() und chmod() durch $wp_filesystem->chmod() in der Zertifikatsspeicherschicht ersetzt. Der explizite Aufruf load_plugin_textdomain() wurde entfernt – WordPress 4.6+ lädt Übersetzungen automatisch über den Plugin-Header Domain Path: /localization.
  • Keine Verhaltensänderung, keine Konfigurationsänderung, keine manuelle Aktion erforderlich.

1.3.0

  • Sicherheit – Händlerzertifikat nicht mehr unter einer vorhersehbaren URL. Die TWINT-PEM-Datei (privater Schlüssel + Zertifikat) wurde früher nach wp-content/uploads/t4a_twint/twint.pem geschrieben – ein fester, erratbarer Pfad, der nur durch .htaccess deny from all geschützt war. Unter nginx (das .htaccess stillschweigend ignoriert) oder Apache mit AllowOverride None war die Datei direkt herunterladbar. Jeder Händler erhält nun einen zufälligen 48-stelligen Hex-Dateinamen, der pro Installation erzeugt wird (gespeichert in t4a_twint_settings_certfile), der enthaltende Ordner liefert sowohl eine index.php als auch eine .htaccess aus (doppelt abgesichert), und die Datei wird auf 0600 gesetzt. Die Zertifikatserneuerung über das TWINT-Backoffice erzeugt ebenfalls einen neuen Namen, sodass eine zuvor offengelegte URL ungültig wird.
  • Sicherheit – Zertifikatspasswort im Ruhezustand verschlüsselt. Das Passwort, das den privaten Schlüssel schützt, wurde im Klartext in wp_options gespeichert und im Wizard-HTML + der AJAX-Antwort + der Parsing-Fehlermeldung erneut ausgegeben. Es wird nun über authentifizierte Verschlüsselung verschlüsselt gespeichert (siehe unten), nie wieder an das DOM zurückgegeben (das Feld wird leer mit dem Hinweis „laissez vide pour conserver“ dargestellt), und die Fehlermeldung „Failed to parse certificate“ enthält das angegebene Passwort nicht mehr.
  • Sicherheit – authentifizierte Verschlüsselung für gespeicherte Geheimnisse. Cipher war AES-256-CTR mit einem längengeprüften Salt-Suffix – formbar, ohne MAC, das Schlüsselmaterial war LOGGED_IN_KEY in Rohform. Ersetzt durch sodium_crypto_secretbox (XChaCha20-Poly1305) mit einem openssl aes-256-gcm-Fallback, verschlüsselt über HKDF-SHA256 aus LOGGED_IN_KEY + LOGGED_IN_SALT. Von früheren Versionen geschriebene Chiffretexte werden weiterhin entschlüsselt (abwärtskompatibler Reader), sodass kein Datenverlust entsteht.
  • Sicherheit – TWINT-Rücksignatur läuft nun ab. Die Signatur der Redirect-/Cancel-URL wurde mit einem festen t=1 berechnet, wodurch sie unbegrenzt wiederholbar war. Sie bettet nun den echten Zeitstempel ein und weist jede URL zurück, die älter als T4A_REDIRECT_SIGNATURE_EXPIRATION ist (von 60 s auf 30 min erhöht, damit realistische TWINT-App-Abläufe nicht abgewiesen werden).
  • Sicherheit – FileServer Defense-in-Depth. Interne basename() + Typ-Whitelist + realpath-Begrenzung werden nun innerhalb von send_file() / display_pdf() erzwungen, zusätzlich zur bestehenden Bereinigung durch die Aufrufer. Jede Anfrage, die das erlaubte Upload-Verzeichnis verlässt, gibt HTTP 404 zurück.
  • Sicherheit – nginx-sicherer Ordnerschutz. t4a_twint/, logs/, temp/, locks/ liefern nun systematisch sowohl .htaccess als auch eine leere index.php aus, sodass Server, die .htaccess ignorieren, diese trotzdem nicht auflisten oder ausliefern können.
  • Intern: EnvironmentConfig::get_certificate_file_path() wird LIVE aufgelöst (nicht aus der beim Start eingefrorenen Konstante T4A_CERTIFICATE_PATH), sodass ein Zertifikat-Upload gefolgt von einem Verbindungstest in derselben Anfrage die soeben geschriebene Datei liest. Dasselbe gilt für das Zertifikatspasswort – der SoapClient liest es über get_certificate_password() statt über stripcslashes(get_option(...)).

1.2.0

  • Assistent überarbeitet – neue Registerkarte „Commande“. Der Einrichtungsassistent hat nun 4 Schritte (Préparation, Identifiants, Commande, État). Die Registerkarte „Commande“ fasst die Konfiguration des Bestellstatus nach der Zahlung für Pay4All Shop und WooCommerce in einer einzigen einheitlichen Karte zusammen, mit übereinstimmenden Bezeichnungen („Commande contenant…“) zwischen beiden Integrationen und bearbeitbaren Status-Auswahlfeldern.
  • Eigenständiger Start. Das Plugin setzt bei der Aktivierung nicht mehr voraus, dass Pay4All Shop vorhanden ist. Wenn die Ergänzung fehlt, erklärt ein gezielter Admin-Hinweis, was benötigt wird, anstatt die Aktivierung zu blockieren. Händler, die nur WooCommerce nutzen, können Pay4All Pro zusätzlich zu diesem Plugin installieren und Pay4All Shop vollständig überspringen.
  • Pay4All Pro-Kompatibilität. Die Registerkarte Commande erkennt, wenn Pay4All Pro aktiv ist, und bietet eine Verknüpfung „Plus de réglages“ zu admin.php?page=pay4all-twint-woo, wodurch die erweiterten WooCommerce-Einstellungen an einem einzigen Ort bleiben.
  • Lokalisierter Tutorial-Link. Der Block „Besoin d’aide“ in der Registerkarte Préparation verweist nun auf https://pay4all.ch/p/twint-woocommerce#tutorials in FR/DE/IT/EN.
  • Intern: FormDomainEvents.mark_payment_paid delegiert an einen gemeinsamen Helfer paid_status_for_p4all_form_order(), sodass Pay4All Shop und WooCommerce dieselbe Virtual-/Deferred-/Default-Logik verwenden.

1.1.0

  • SOAP-Client im Nicht-WSDL-Modus neu geschrieben. Der vollständige WSDL/XSD-Vertrag des TWINT Merchant Service v8.4 (zuvor als .xml-Schemadateien unter src/Engine/Soap/schemas/v8_4/ ausgeliefert) wurde gemäß der pauschalen Dateityp-Richtlinie von WordPress.org aus dem Plugin-Paket entfernt. Jede SOAP-Anfrage wird nun als handgeschriebener XML-Umschlag innerhalb von TwintSoapClient::dispatch() erstellt, über \SoapClient im Nicht-WSDL-Modus übertragen (mTLS + gzip + Timeouts unverändert), und die Antwort wird von einem hauseigenen DOMDocument stdClass-Konverter geparst, der die klassische ->_-Struktur von SoapClient nachbildet, sodass jeder bestehende Consumer ($response->Order->Status->Status->_ usw.) weiterhin funktioniert. Live gegen die TWINT-Produktion mit einem Zahlungs- + Rückerstattungs-Umlauf über einen kleinen Betrag validiert (StartOrder GetOrder-Polling ConfirmOrder REVERSAL).
  • Sensible Daten werden nicht mehr protokolliert. Das SOAP-Journal zeichnete früher bei jeder Operation die vollständige Anfrage-Nutzlast $args und das Objekt $response auf. Auf Anfrage des Prüfteams von WordPress.org protokolliert das Plugin nun nur noch den Operationsnamen + die Nachrichten-ID, niemals die Nutzlast. Gilt für TwintSoapClient, TransactionService, BackofficeTransactionService und AdminAjax::check_successful_order_statuses. Der reine Debug-Block print_r( $this->client ) wurde entfernt.
  • Intern: set_headers(), send_soap_request(), get_default_params() abgeschafft; ersetzt durch die Helfer dispatch() + build_envelope() + merchant_information_xml().

1.0.0

  • Erste Veröffentlichung auf WordPress.org.
  • TWINT-Integration für das kostenlose Plugin Pay4All Shop.
  • Einrichtungsassistent, Zertifikatsverwaltung, Kassenregistrierung.
  • Französische, deutsche, italienische und englische Übersetzungen enthalten.