IT-Services Mertineit – Shop Connector for Papierkram

説明

IT-Services Mertineit – Shop Connector for Papierkram connects WooCommerce with Papierkram and allows you to manually create draft invoices directly from WooCommerce orders.

The plugin deliberately keeps Papierkram as the leading system for invoice numbers, document status and invoice history while eliminating repetitive manual data entry.

Features

  • Manual creation of draft invoices directly from WooCommerce orders
  • Customers are found by email address and reused or automatically created if they do not already exist
  • Product line items with original quantity, unit price and product number
  • Coupons are transferred as separate negative line items
  • Shipping costs are transferred as a separate line item
  • Small-business mode according to German Section 19 UStG (0% VAT)
  • Invoice number and document status synchronization
  • Shipping status and optional tracking number management in WooCommerce
  • Duplicate protection
  • Order notes
  • WooCommerce logging
  • Connection test

Workflow

Create the draft invoice manually from the WooCommerce order Review and finalize the invoice in Papierkram Update the invoice number and status in WooCommerce.

Requirements

  • WordPress
  • WooCommerce
  • Papierkram account (Plan M or L)
  • API access enabled
  • Papierkram API token

Product numbers are mandatory

Every product and every product variation requires its own product number.

For variable products, only the variation’s product number is used.

If at least one order item has no product number, the transfer is aborted. No customer and no invoice are created. The administrator receives an order note and a WooCommerce log entry explaining the problem.

Professional Edition

The Community Edition intentionally focuses on manual invoice creation.

Automatic synchronization, PDF download, PDF email attachments and additional automation features are available separately in the Professional Edition.

This plugin is an independent integration and is not affiliated with or endorsed by WooCommerce, Automattic Inc., Papierkram or odacer finanzsoftware GmbH.

External services

This plugin communicates directly with the Papierkram API (papierkram.de), operated by odacer finanzsoftware GmbH, Konrad-Adenauer-Ring 13, 65187 Wiesbaden, Germany.

When you manually transfer an order or perform a connection test, your web server sends requests directly to your own Papierkram account.

Depending on the order, the following information may be transferred:

  • Customer name
  • Company name
  • Billing address
  • Email address
  • Phone number (if available)
  • Order number
  • Product names
  • Product numbers
  • Quantities
  • Prices
  • Coupons
  • Shipping costs
  • Tax information

The communication takes place server-to-server.

No customer data is transmitted from the visitor’s browser.

No data is sent to any third-party service other than Papierkram.

Papierkram Terms of Service:
https://www.papierkram.de/agb

Papierkram Privacy Policy:
https://www.papierkram.de/datenschutz

スクリーンショット

インストール

  1. Upload the plugin via Plugins Add New Upload Plugin.
  2. Activate the plugin.
  3. Open WooCommerce Papierkram.
  4. Enter your Papierkram subdomain and API token.
  5. Click Test connection.
  6. Configure your payment term ID.
  7. Create your first draft invoice from the WooCommerce order actions.

FAQ

Does the plugin create final invoices?

No.

The plugin creates draft invoices only.

The invoice is reviewed and finalized inside Papierkram.

Are invoices created automatically?

No.

The Community Edition creates invoices manually.

Automatic synchronization is available in the Professional Edition.

Does the plugin transfer PDF invoices?

No.

PDF transfer is part of the Professional Edition.

Does the plugin support variable products?

Yes.

Each variation requires its own product number.

What happens if a product has no product number?

The transfer is aborted.

No customer and no invoice are created.

Is customer data stored on external servers?

Yes, when an administrator manually transfers an order, the customer and invoice data listed in the External services section is sent to and processed in the configured Papierkram account.

The plugin communicates directly between your WordPress installation and the Papierkram API and does not use an additional connector cloud service.

Review your Papierkram data-processing terms and privacy configuration before using the integration with personal data.

Is the plugin GDPR compliant?

The plugin is designed to transfer data only after an authorized administrator manually starts the invoice workflow and does not send data to unrelated third parties.

Whether a specific installation complies with the GDPR depends on the shop owner’s legal basis, privacy notice, data-processing agreement with Papierkram, retention settings and other configuration. Obtain legal advice where required.

Are shipping status and tracking numbers transferred?

No.

The currently supported Papierkram API does not provide documented fields for shipping status, carrier or tracking number.

This information remains inside WooCommerce.

What is written to the WooCommerce log?

The plugin writes technical diagnostics (order IDs, Papierkram record IDs, error codes and redacted error messages) to the WooCommerce log source itsmpc-papierkram-connector.

API tokens, authorization headers and personal customer data such as names, addresses and email addresses are not written to the log.

What happens when the plugin is deleted?

Deleting the plugin removes its configuration including the encrypted API token, the migration marker and its temporary locks and notices.

Order and user metadata that links WooCommerce orders to already created Papierkram invoices is intentionally kept, so the document references survive a reinstall. Remove that metadata manually if you want a complete cleanup.

評価

このプラグインにはレビューがありません。

貢献者と開発者

IT-Services Mertineit – Shop Connector for Papierkram はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“IT-Services Mertineit – Shop Connector for Papierkram” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

1.0.9

  • Added information about Shop Connector for Papierkram Pro and Product Sync for Papierkram to the plugin settings.

1.0.8

  • Unified GPL-2.0-or-later license identification across the plugin header, readme.txt and README.md.
  • Added the complete, unmodified GNU General Public License v2 text as LICENSE in the plugin root.
  • Added copyright attribution for IT-Services Manuel Mertineit.
  • No functional changes.

1.0.7

  • Verify every field of the independent recovery record (order ID, attempt ID, status, remote ID, timestamp) strictly by type and canonical value when reading it back; tampered stored values such as “123abc” are no longer accepted via a lossy integer cast.
  • Treat a failed removal of the recovery record as a controlled persistence error in every code path: the normal invoice-success path and the “invoice meanwhile saved” discard branch no longer report success or write a success note when the protection state could not be verifiably removed; retries stay blocked and no duplicate invoice is possible.
  • Reject API follow-up URLs (e.g. PDF download links) that contain a bare “#” fragment separator even when no fragment content follows it.
  • Remove an undeclared BCMath dependency from the regression test suite (portable string-based decimal increment); the full suite now passes on a plain php:7.4-cli environment without BCMath as well as on PHP 8.4.
  • Add regression tests for each of the five recovery record fields individually (including lossy-cast decoys), for failed recovery removal in every calling path including the absence of a false success note, and for the bare “#” separator including end-to-end proof that no follow-up HTTP request is sent.

1.0.6

  • Make the manual “discard unclear status” action verify that the independent recovery record was actually removed before reporting success; an undeletable record now returns a clear persistence error and keeps the retry blocked instead of falsely announcing that the transfer can be restarted.
  • Restrict the required-recipient-fields filter so it can only add fields, never remove street, ZIP, city or country from the mandatory minimum; filter exceptions are caught and fall back to the safe defaults instead of crashing the order action.
  • Validate the recipient country strictly as a two-letter ISO code checked against the real WooCommerce country list; country names (e.g. “Germany”) and non-string values (arrays, objects, booleans, numbers) are rejected instead of being silently normalized or causing a PHP warning/error.
  • Reject Papierkram contact IDs above PHP’s maximum integer instead of silently truncating them to that maximum and using the truncated value.
  • Reject percent-encoded, double-encoded, backslash and control-character variants of a URL fragment in API follow-up links (e.g. PDF downloads), not only an unencoded “#fragment”.
  • Shorten the 1.0.5 upgrade notice to meet the WordPress.org length limit.

1.0.5

  • Verify every independent recovery write against the freshly read database state and treat any unresolved write, corrupt record or unknown status as unresolved; a failed or unproven recovery confirmation after a successful remote invoice now blocks the retry instead of allowing a second draft invoice.
  • Remove the last silent fallbacks to a possibly stale order object in the duplicate-invoice safeguards (pre-transfer blocking check, post-transfer invoice-ID proof, manual “discard unclear status” action); a failed fresh reload now aborts the action instead of proceeding on outdated data.
  • Stop storing customer name and email address in the order note when a Papierkram contact search finds an email match that belongs to a different person; only the local order number, an internal error code and the validated technical contact ID are recorded.
  • Fall back to the fixed default required-recipient-fields when the itsmpc_required_recipient_fields filter returns an invalid value, instead of silently accepting an empty required-field list; validate the recipient country code against the real WooCommerce country list instead of only its two-letter format.
  • Require every Papierkram contact ID to be a strictly validated positive integer before it can be reused, matched or sent in an invoice request.
  • Reject URL fragments on absolute same-origin follow-up URLs (PDF download links) for consistency with the existing follow-up URL policy.
  • Treat a lock that expires in the exact current second as immediately reusable instead of waiting one additional second.

1.0.4

  • Restrict all outgoing API and PDF targets to official Papierkram hosts over HTTPS; reject loopback, link-local, private and reserved addresses, embedded credentials, URL fragments and non-standard ports, and never pass the API token across hosts or redirects.
  • Take over expired locks with a single atomic compare-and-swap operation and recover from corrupt lock values, so high concurrency can never create a second invoice or customer.
  • Require the manual “discard unclear status” action to hold the same per-order lock, prove the pending marker from fresh database state before any remote write, and keep an independent recovery record that blocks blind retries until an administrator resolves it.
  • Reduce error logging to a fixed allowlist without remote error text or personal data.
  • Reject empty or unknown order currencies and incomplete billing recipient data before any API call.
  • Collect all exact email matches and abort on ambiguity instead of using the first match.
  • Restrict connector configuration (API URL, token, connection test) to administrators (manage_options).
  • Known limitation: the one-time legacy data migration still loads order IDs without batching (documented scaling risk for very large stores).

1.0.3

  • Replace the invoice-creation lock with an atomic per-order lock (owner token, expiry, no foreign release); a reproducible two-process race that created duplicate invoices and customers is now prevented and covered by a permanent concurrency test.
  • Treat truncated or contradictory customer searches as failed instead of “customer not found”, so no duplicate customer can be created after an incomplete search.
  • Record a transfer marker before every invoice POST; unclear outcomes (timeouts, server errors, missing invoice ID, failed local save after remote creation) block blind retries until an administrator explicitly discards the state via a new order action.
  • Preserve the remote invoice ID in an order note and the log when local saving fails after the invoice was created in Papierkram.
  • Reject orders in non-EUR currencies before any API call instead of transferring foreign amounts as Euro values.
  • Transfer the real VAT rate for negative fee lines and encode query parameters exactly once.
  • Remove personal customer data from diagnostic logs (IDs and field names only).
  • Add uninstall.php: configuration, token, locks and notices are removed on deletion; invoice reference metadata is intentionally kept and documented.

1.0.2

  • Show redirect-safe success and error notices after manual invoice actions in Classic and HPOS order screens.
  • Scope notices to the initiating administrator and affected order, consume them after display and expire stale notices.
  • Prevent queued notices from overwriting each other and prevent duplicate error order notes.
  • Return actionable, safely escaped messages for validation, configuration, customer, invoice and refresh failures.
  • Redact tokens, authorization data and untrusted API HTML from administrator messages and diagnostic logs.
  • Reject malformed or unexpected Papierkram responses before continuing a write workflow.
  • Harden the settings connection test against invalid nonce, missing capability and malformed API responses.
  • Add Classic/HPOS message-flow fixtures and expanded regression coverage.

1.0.1

  • Prevent customer creation when the Papierkram customer lookup fails.
  • Verify updated country values using normalized ISO country codes.
  • Render API-provided payment-term names without injecting HTML.
  • Report payment-term lookup failures during the connection test.
  • Correct query-parameter encoding and WordPress.org tag count.
  • Add automated regression, version-consistency and release-package checks.

1.0.0

  • First public release.
  • Manual transfer of WooCommerce orders as draft invoices.
  • Customer lookup and automatic customer creation.
  • Product, coupon and shipping line item support.
  • Duplicate protection.
  • Invoice number and status synchronization.
  • WooCommerce logging.
  • Connection test.
  • Support for German Section 19 UStG.