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
- Lade den Ordner
pay4all-for-twintnach/wp-content/plugins/hoch (oder installiere die ZIP-Datei über Plugins > Installieren). - Aktiviere „Pay4All for TWINT“ über die WordPress-Plugin-Seite.
- Installiere und aktiviere das kostenlose Plugin „Pay4All Shop“ (erforderliche Ergänzung).
- Ö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Übersetze „Pay4All TWINT – Für WooCommerce & Pay4All Shop“ in deine Sprache.
Interessiert an der Entwicklung?
Durchstöbere den Code, sieh dir das SVN-Repository an oder abonniere das Entwicklungsprotokoll per RSS.
Ä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 durchwp_delete_file()undchmod()durch$wp_filesystem->chmod()in der Zertifikatsspeicherschicht ersetzt. Der explizite Aufrufload_plugin_textdomain()wurde entfernt – WordPress 4.6+ lädt Übersetzungen automatisch über den Plugin-HeaderDomain 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.pemgeschrieben – ein fester, erratbarer Pfad, der nur durch.htaccess deny from allgeschützt war. Unter nginx (das.htaccessstillschweigend ignoriert) oder Apache mitAllowOverride Nonewar die Datei direkt herunterladbar. Jeder Händler erhält nun einen zufälligen 48-stelligen Hex-Dateinamen, der pro Installation erzeugt wird (gespeichert int4a_twint_settings_certfile), der enthaltende Ordner liefert sowohl eineindex.phpals auch eine.htaccessaus (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_optionsgespeichert 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.
Cipherwar AES-256-CTR mit einem längengeprüften Salt-Suffix – formbar, ohne MAC, das Schlüsselmaterial warLOGGED_IN_KEYin Rohform. Ersetzt durchsodium_crypto_secretbox(XChaCha20-Poly1305) mit einemopenssl aes-256-gcm-Fallback, verschlüsselt über HKDF-SHA256 ausLOGGED_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=1berechnet, wodurch sie unbegrenzt wiederholbar war. Sie bettet nun den echten Zeitstempel ein und weist jede URL zurück, die älter alsT4A_REDIRECT_SIGNATURE_EXPIRATIONist (von 60 s auf 30 min erhöht, damit realistische TWINT-App-Abläufe nicht abgewiesen werden). - Sicherheit –
FileServerDefense-in-Depth. Internebasename()+ Typ-Whitelist +realpath-Begrenzung werden nun innerhalb vonsend_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.htaccessals auch eine leereindex.phpaus, sodass Server, die.htaccessignorieren, diese trotzdem nicht auflisten oder ausliefern können. - Intern:
EnvironmentConfig::get_certificate_file_path()wird LIVE aufgelöst (nicht aus der beim Start eingefrorenen KonstanteT4A_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 überget_certificate_password()statt überstripcslashes(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#tutorialsin 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 untersrc/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 vonTwintSoapClient::dispatch()erstellt, über\SoapClientim Nicht-WSDL-Modus übertragen (mTLS + gzip + Timeouts unverändert), und die Antwort wird von einem hauseigenenDOMDocumentstdClass-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
$argsund das Objekt$responseauf. Auf Anfrage des Prüfteams von WordPress.org protokolliert das Plugin nun nur noch den Operationsnamen + die Nachrichten-ID, niemals die Nutzlast. Gilt fürTwintSoapClient,TransactionService,BackofficeTransactionServiceundAdminAjax::check_successful_order_statuses. Der reine Debug-Blockprint_r( $this->client )wurde entfernt. - Intern:
set_headers(),send_soap_request(),get_default_params()abgeschafft; ersetzt durch die Helferdispatch()+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.
