{"id":379819,"date":"2026-10-09T12:01:48","date_gmt":"2026-10-09T12:01:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bank-transfer-payments-for-woocommerce\/"},"modified":"2026-10-09T13:25:06","modified_gmt":"2026-10-09T13:25:06","slug":"zirkel-iban-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/da.wordpress.org\/plugins\/zirkel-iban-for-woocommerce\/","author":6326268,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.5","requires_php":"8.3","requires_plugins":null,"header_name":"Zirkel Virtual IBAN for WooCommerce","header_author":"zirkel.design","header_description":"Accept reconciled bank transfer payments in WooCommerce via Stripe. Each order gets unique virtual bank account details (SEPA\/ACH\/Bacs\/SPEI), and webhooks mark the order paid automatically.","assets_banners_color":"0c6ea0","last_updated":"2026-10-09 13:25:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/zirkeldesign\/zirkel-iban-for-woocommerce","header_author_uri":"https:\/\/zirkel.design","rating":0,"author_block_rating":0,"active_installs":0,"downloads":88,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"d.sturm","date":"2026-10-09 12:01:28","revision":3736576},"1.0.2":{"tag":"1.0.2","author":"d.sturm","date":"2026-10-09 12:39:45","revision":3736645},"1.1.0":{"tag":"1.1.0","author":"d.sturm","date":"2026-10-09 13:25:06","revision":3736741}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3736576,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3736576,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3736576,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3736576,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3736576,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.2","1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[127760,285350,33608,33609,285349],"plugin_category":[],"plugin_contributors":[256580],"plugin_business_model":[],"class_list":["post-379819","plugin","type-plugin","status-publish","hentry","plugin_tags-bank-transfer","plugin_tags-bankuberweisung","plugin_tags-iban","plugin_tags-sepa","plugin_tags-vorkasse","plugin_contributors-dsturm-1","plugin_committers-dsturm"],"banners":{"banner":"https:\/\/ps.w.org\/zirkel-iban-for-woocommerce\/assets\/banner-772x250.png?rev=3736576","banner_2x":"https:\/\/ps.w.org\/zirkel-iban-for-woocommerce\/assets\/banner-1544x500.png?rev=3736576","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/zirkel-iban-for-woocommerce\/assets\/icon.svg?rev=3736576","icon":"https:\/\/ps.w.org\/zirkel-iban-for-woocommerce\/assets\/icon.svg?rev=3736576","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Zirkel Virtual IBAN for WooCommerce lets your store accept bank transfers the modern way: powered by Stripe's customer_balance funding flow, every order receives its <strong>own unique virtual bank account<\/strong> (SEPA IBAN, UK Bacs, US ACH, Mexican SPEI or Japanese Zengin). When the customer sends the transfer, a Stripe webhook marks the order paid <strong>automatically<\/strong> \u2014 no manual bank-statement matching.<\/p>\n\n<p>Built DACH-first: SEPA \/ EUR is the default, with a German (Sie and Du) interface.<\/p>\n\n<p><strong>Free means free.<\/strong> This plugin processes real, live payments out of the box. There is no test-mode-only limitation and no paywall on taking money.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Per-order virtual bank account details shown on the thank-you page and in order emails.<\/li>\n<li>Automatic reconciliation via Stripe webhooks (paid, failed, cancelled, processing, partially funded).<\/li>\n<li><strong>GiroCode (EPC-QR)<\/strong> on the thank-you page \u2014 customers scan it with their banking app to pre-fill the transfer.<\/li>\n<li>Full and partial <strong>refunds<\/strong> straight from the WooCommerce order screen.<\/li>\n<li>Works in both the <strong>block-based checkout<\/strong> and the classic checkout.<\/li>\n<li>A dedicated \"Awaiting Bank Transfer\" order status, or choose your own (On hold \/ Pending payment).<\/li>\n<li>Underpayment detection: partial transfers are flagged on the order.<\/li>\n<li>Optional reuse of Stripe API keys already configured by the official WooCommerce Stripe Gateway, Payment Plugins for Stripe WooCommerce, or Payment Gateway Stripe and WooCommerce Integration.<\/li>\n<li>German translations, informal (Du) and formal (Sie).<\/li>\n<li>HPOS (High-Performance Order Storage) compatible.<\/li>\n<\/ul>\n\n<p>This plugin requires a Stripe account and the WooCommerce plugin. Stripe is a third-party payment service; by using this plugin payment data is transmitted to Stripe (see the Stripe <a href=\"https:\/\/stripe.com\/privacy\">Privacy Policy<\/a> and <a href=\"https:\/\/stripe.com\/legal\">Terms<\/a>).<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Stripe API to create a payment intent and a virtual bank account for an order, and to receive confirmation when the transfer arrives. Without that connection the plugin cannot do its job, so the service is required rather than optional.<\/p>\n\n<p><strong>Service:<\/strong> Stripe (Stripe, Inc. \/ Stripe Payments Europe, Ltd.)<\/p>\n\n<p><strong>When data is sent:<\/strong> when a customer places an order and chooses this payment method, when an order is refunded, and when the shop owner opens the customer balance panel in the admin.<\/p>\n\n<p><strong>What is sent:<\/strong> the order number, order total and currency, the shop name, the billing country, and the customer's name and email address. The name and email are used to create a Stripe customer, which the bank-transfer flow requires because the virtual account belongs to that customer record.<\/p>\n\n<p><strong>What is received:<\/strong> the virtual bank account details (IBAN\/BIC or the equivalent for other rails) that are shown to the customer, and webhook notifications about the payment status.<\/p>\n\n<p>No data is sent to Stripe until the customer actively selects this payment method. This plugin sends nothing to any other third party, and it does not load any script or font from a remote host.<\/p>\n\n<p>Stripe <a href=\"https:\/\/stripe.com\/legal\">Terms of Service<\/a> \u00b7 Stripe <a href=\"https:\/\/stripe.com\/privacy\">Privacy Policy<\/a> \u00b7 Stripe <a href=\"https:\/\/stripe.com\/legal\/dpa\">Data Processing Agreement<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> and activate it.<\/li>\n<li>Go to WooCommerce \u2192 Settings \u2192 Payments \u2192 Bank Transfer and enable it.<\/li>\n<li>Enter your Stripe secret key (test and live), or let the plugin reuse keys from an existing Stripe plugin.<\/li>\n<li>In your Stripe Dashboard, add a webhook endpoint pointing to the URL shown in the gateway settings, and paste the signing secret into the Webhook Secret field.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20stripe%20account%3F\"><h3>Do I need a Stripe account?<\/h3><\/dt>\n<dd><p>Yes. This plugin uses Stripe's bank-transfer (customer_balance) feature; availability of specific bank-transfer types depends on your Stripe account country and currency.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20official%20woocommerce%20stripe%20gateway%20installed%3F\"><h3>Does it work with the official WooCommerce Stripe gateway installed?<\/h3><\/dt>\n<dd><p>Yes. It can reuse the API credentials stored by the official WooCommerce Stripe Gateway or by Payment Plugins for Stripe WooCommerce, so you do not have to enter keys twice.<\/p><\/dd>\n<dt id=\"is%20the%20webhook%20required%3F\"><h3>Is the webhook required?<\/h3><\/dt>\n<dd><p>Yes, for automatic reconciliation. A signing secret must be configured \u2014 the plugin refuses to process unverified webhook requests.<\/p><\/dd>\n<dt id=\"can%20i%20really%20take%20live%20payments%20with%20the%20free%20version%3F\"><h3>Can I really take live payments with the free version?<\/h3><\/dt>\n<dd><p>Yes. The free version is not limited to Stripe test mode. Stripe's own transaction fees apply, as with any payment method.<\/p><\/dd>\n<dt id=\"it%20works%20in%20test%20mode%20but%20not%20live.%20why%3F\"><h3>It works in test mode but not live. Why?<\/h3><\/dt>\n<dd><p>Bank transfers must be enabled on your Stripe account for live payments, which is a separate thing from anything in this plugin. In the Stripe Dashboard go to Settings \u2192 Payment methods and enable <strong>Bank transfers<\/strong> (Bank\u00fcberweisungen). Availability also depends on your account's country and currency, and some accounts need Stripe to approve it first. Until that is done, Stripe rejects the payment with a capability error.<\/p><\/dd>\n<dt id=\"how%20long%20does%20payment%20take%20to%20arrive%3F\"><h3>How long does payment take to arrive?<\/h3><\/dt>\n<dd><p>Stripe confirms bank transfers within roughly 0\u20133 business days, depending on the customer's bank. The order stays in \"Awaiting Bank Transfer\" until the money lands, then the webhook marks it paid automatically.<\/p><\/dd>\n<dt id=\"is%20there%20a%20minimum%20order%20amount%3F\"><h3>Is there a minimum order amount?<\/h3><\/dt>\n<dd><p>Yes. Stripe requires at least 0.50 EUR (or the equivalent) for a bank transfer. Below that the payment method is hidden at checkout, since it could not be completed. You can change the threshold with the <code>btpw_minimum_amount<\/code> filter.<\/p><\/dd>\n<dt id=\"are%20chargebacks%20possible%3F\"><h3>Are chargebacks possible?<\/h3><\/dt>\n<dd><p>Bank transfers do not support disputes in the way cards do, which is part of their appeal for merchants. Refunds are supported, including partial refunds, from the WooCommerce order screen.<\/p><\/dd>\n<dt id=\"what%20if%20a%20customer%20transfers%20too%20little%3F\"><h3>What if a customer transfers too little?<\/h3><\/dt>\n<dd><p>Stripe holds the part-payment in the customer balance and waits for the rest. The plugin records the shortfall as an order note so you can follow up.<\/p><\/dd>\n<dt id=\"my%20customer%27s%20bank%20says%20the%20recipient%20name%20does%20not%20match.%20what%20now%3F\"><h3>My customer's bank says the recipient name does not match. What now?<\/h3><\/dt>\n<dd><p>Since 9 October 2025 every SEPA transfer in the EU\/EEA goes through Verification of Payee: the customer's bank checks the recipient name against the IBAN before releasing the payment. Nothing is required of your shop technically, the bank does this on its own. The account that receives the money is held by Stripe, so the name to enter is the one shown as \"Account Holder Name\" in the payment instructions, not your shop name. That is the exact name Stripe answers the check with, and it comes from Business Name under Settings \u2192 Business details in your Stripe Dashboard. If a customer reports a mismatch, check that field first. For Belgian virtual IBANs Stripe currently advises customers to confirm the warning after verifying the details are correct.<\/p><\/dd>\n<dt id=\"does%20it%20support%20woocommerce%20subscriptions%3F\"><h3>Does it support WooCommerce Subscriptions?<\/h3><\/dt>\n<dd><p>Bank transfers cannot be charged automatically, so subscription renewals are always manual: each renewal issues a fresh virtual bank account for the customer to pay. This is available as an optional add-on feature.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Improved: Updated to the latest Stripe API version and Stripe PHP library.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Improved: Smaller download, a developer configuration file is no longer included.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved: Tested with WordPress 7.1.<\/li>\n<li>Improved: Payment instructions now explain the SEPA recipient-name check (Verification of Payee) so customers know a name notice from their bank is normal.<\/li>\n<li>Improved: The account holder name is shown first in the bank details, as it is the field banks now verify.<\/li>\n<li>Fixed: The GiroCode is no longer generated with a guessed recipient name when Stripe does not supply one.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: Stripe bank-transfer gateway with per-order virtual bank accounts and automatic webhook reconciliation.<\/li>\n<li>Added: GiroCode (EPC-QR) on the thank-you page for SEPA payments.<\/li>\n<li>Added: Full and partial refunds from the order screen.<\/li>\n<li>Added: Block-based checkout support.<\/li>\n<li>Added: Configurable awaiting-payment order status.<\/li>\n<li>Added: Underpayment detection for partially funded transfers.<\/li>\n<\/ul>","raw_excerpt":"Accept reconciled bank transfer payments in WooCommerce via Stripe. Each order gets unique virtual bank account details, reconciled automatically.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/379819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=379819"}],"author":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dsturm"}],"wp:attachment":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=379819"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=379819"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=379819"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=379819"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=379819"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=379819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}