| 开发者 | pay4all |
|---|---|
| 更新时间 | 2026年7月29日 15:29 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPL-2.0-or-later |
| 版权网址: | 版权信息 |
pay4all-for-twint folder to /wp-content/plugins/ (or install the ZIP from Plugins > Add New).openssl, soap, curl.No. Pay4All Shop is a required companion — the wizard shows a warning when the companion is missing. Install both plugins together.
Not directly. The WooCommerce TWINT gateway is packaged in the paid « Pay4All Pro » add-on, distributed from https://pay4all.ch/. That add-on installs on top of this free plugin and wires the WooCommerce checkout, Checkout Blocks, HPOS compatibility and background monitoring.
Log in to https://portal.twint.ch, create a store and generate a certificate. The wizard asks for the store UID, certificate password, cash-register ID and the certificate file.
No. This plugin is fully free and works standalone (with Pay4All Shop). You only need TWINT merchant credentials.
Not in this version. Activate the plugin site by site.
msgid = English source, msgstr = translation). Full translation packs are bundled for French (fr_FR), German (de_DE) and Italian (it_IT) under /localization/.unlink() with wp_delete_file() and chmod() with $wp_filesystem->chmod() in the certificate storage layer. Removed the explicit load_plugin_textdomain() call - WordPress 4.6+ auto-loads translations via the Domain Path: /localization plugin header.wp-content/uploads/t4a_twint/twint.pem — a fixed, guessable path protected only by .htaccess deny from all. On nginx (which silently ignores .htaccess) or Apache with AllowOverride None, the file was directly downloadable. Each merchant now gets a random 48-hex filename minted per install (stored in t4a_twint_settings_certfile), the containing folder ships both an index.php and an .htaccess (belt-and-suspenders), and the file is chmod'd to 0600. Certificate renewal via TWINT backoffice also mints a fresh name, so a previously exposed URL is invalidated.wp_options and re-emitted in the wizard HTML + AJAX response + parsing error message. It is now stored encrypted via authenticated encryption (see below), never echoed back to the DOM (the field renders empty with a « laissez vide pour conserver » hint), and the « Failed to parse certificate » error no longer includes the provided password.Cipher was AES-256-CTR with a length-checked salt suffix — malleable, no MAC, key material was LOGGED_IN_KEY used raw. Replaced with sodium_crypto_secretbox (XChaCha20-Poly1305) with an openssl aes-256-gcm fallback, keyed via HKDF-SHA256 from LOGGED_IN_KEY + LOGGED_IN_SALT. Ciphertexts written by earlier versions keep decrypting (backward-compatible reader) so no data loss.t=1, meaning it was replayable indefinitely. It now embeds the real timestamp and rejects any URL older than T4A_REDIRECT_SIGNATURE_EXPIRATION (bumped from 60 s to 30 min so realistic TWINT-app flows are not rejected).FileServer defense-in-depth. Internal basename() + type whitelist + realpath bounding are now enforced inside send_file() / display_pdf(), in addition to the callers' existing sanitisation. Any request that escapes the allowed upload directory returns HTTP 404.t4a_twint/, logs/, temp/, locks/ now systematically ship both .htaccess and an empty index.php so servers that ignore .htaccess still can't list or serve them.EnvironmentConfig::get_certificate_file_path() is resolved LIVE (not from the T4A_CERTIFICATE_PATH constant frozen at boot) so a cert upload followed by a connection test in the same request reads the just-written file. Same for the certificate password — the SoapClient reads it via get_certificate_password() instead of stripcslashes(get_option(...)).admin.php?page=pay4all-twint-woo, keeping advanced WooCommerce settings in a single place.https://pay4all.ch/p/twint-woocommerce#tutorials in FR/DE/IT/EN.paid_status_for_p4all_form_order() helper so Pay4All Shop and WooCommerce share the same virtual/deferred/default logic..xml schema files under src/Engine/Soap/schemas/v8_4/) has been removed from the plugin package per WordPress.org's blanket file-type policy. Every SOAP request is now built as a hand-written XML envelope inside TwintSoapClient::dispatch(), transported by \SoapClient in non-WSDL mode (mTLS + gzip + timeouts unchanged), and the response is parsed by an in-house DOMDocument → stdClass converter that mimics SoapClient's classic ->_ shape so every existing consumer ($response->Order->Status->Status->_, etc.) keeps working. Validated live against production TWINT on a small-amount payment + refund round-trip (StartOrder → GetOrder polling → ConfirmOrder → REVERSAL).$args request payload and $response object for every operation. On WordPress.org's review request the plugin now only logs the operation name + message id, never the payload. Applies to TwintSoapClient, TransactionService, BackofficeTransactionService and AdminAjax::check_successful_order_statuses. Debug-only print_r( $this->client ) block removed.set_headers(), send_soap_request(), get_default_params() retired ; replaced by dispatch() + build_envelope() + merchant_information_xml() helpers.