Descrição
This plugin authenticates against the Prodaxis API gateway with a per-company API key
and exposes the [prodaxis_print_quote] shortcode, which lets a visitor upload an
3D model (STL, OBJ, 3MF or AMF), choose a material, color and template, and get an estimated print
price, time and filament length.
Because the gateway derives the company from the API key, one WordPress site
quotes against exactly one company’s print options: whichever key you configure
under Settings -> Print Quote.
How it works
- Every request to the gateway is sent server-side with an
X-API-Keyheader
carrying the configured key. The gateway resolves the key to its company and
scopes the response accordingly. - It calls GET /print/options to read the company’s materials, colors and
templates. - The result is cached (configurable lifetime) and used to populate the quote
tool’s material, color and template controls.
The API key never reaches the browser — all requests happen on the WordPress
server.
External service
This plugin is an interface to the Prodaxis API gateway, a third-party
service that holds your company’s 3D-print materials and performs the price
calculations. The plugin has no use without access to that service, and no data
is sent anywhere until you configure the gateway URL and an API key under
Settings -> Print Quote.
Once configured, when a visitor requests a quote the plugin sends the following
to the gateway URL you configured, server-side (never from the visitor’s
browser):
- the uploaded 3D model,
- the selected material, color and template,
- your company API key, as the
X-API-Keyrequest header.
The gateway returns the estimated price, print time and filament length. The
uploaded model and selections are transmitted to your configured gateway solely
to produce the quote.
When a visitor places an order, the plugin additionally sends their order
details (name, optional company, email, phone, shipping address or pickup
locker code, the chosen delivery method and quantities) to the same gateway,
server-side, to create the order and start the payment.
Payment is collected by Stripe (https://stripe.com/): the visitor’s browser is
redirected to a Stripe-hosted checkout page operated on the merchant’s Stripe
account. No card data ever touches this plugin or your WordPress site. See
Stripe’s Privacy Policy: https://stripe.com/privacy
- Service provider: Prodaxis — https://prodaxis.io/
- Terms of Service: https://www.prodaxis.io/legal/terms
- Privacy Policy: https://www.prodaxis.io/legal/privacy
InPost Geowidget (optional)
If you paste an InPost Geowidget token under Settings -> Print Quote, the quote
widget also offers a map-based Paczkomat (parcel locker) picker. In that case
the visitor’s browser loads InPost’s official Geowidget v5 assets from InPost’s
CDN:
- https://geowidget.inpost.pl/inpost-geowidget.js
- https://geowidget.inpost.pl/inpost-geowidget.css
These assets are loaded only when all of the following hold: the page contains
the [prodaxis_print_quote] shortcode, you have configured a Geowidget token,
and the shop offers a parcel-locker delivery method. The map itself initializes
only after the visitor clicks the “Choose a Paczkomat on the map” button; it
then talks to InPost’s services to display pickup points, sending your
Geowidget token (a browser-safe credential generated in the InPost Parcel
Manager, https://manager.paczkomaty.pl) with those requests. If no token is
configured, no InPost resource is ever requested and visitors type the locker
code manually.
- Service provider: InPost — https://inpost.pl/
- Privacy Policy: https://inpost.pl/polityka-prywatnosci
Shortcode
[prodaxis_print_quote]
Renders an interactive quote-and-order tool. On wide containers it shows a
split configurator (persistent 3D preview and live quote on the left, options
on the right); on narrow containers (mobile, sidebars) it collapses into a
guided card. A visitor:
- Uploads a 3D model (STL, OBJ, 3MF or AMF).
- Picks a material, then a color and quality template available for that
material (the controls are built from the same /print/options catalog).
The price is calculated automatically as soon as everything is selected,
and recalculated whenever an option changes. - Continues through a three-step flow (Configure -> Your details -> Payment)
and either pays immediately via Stripe Checkout or places the order for
payment by invoice, depending on the selected payment mode. When the shop
offers delivery methods (courier, parcel locker or personal pickup), the
visitor picks one on the details step; locker deliveries ask for the
locker code instead of a shipping address (with an optional map-based
Paczkomat picker when an InPost Geowidget token is configured), and the
delivery charge (with any free-delivery threshold) is added to the order
total.
The browser never talks to the gateway directly. The file and selections are
sent to WordPress (admin-ajax), which proxies them server-side using the same
cached service-account token:
- POST /slicer/upload – uploads the model and returns its print reference.
- POST /print/calculate/async – starts the calculation and returns immediately
with a calculationId (status IN_PROGRESS); slicing runs in the background. - GET /calculation/{id} – polled until the status becomes COMPLETED (with
the price, print time and filament length) or FAILED.
Because slicing is asynchronous, the widget shows a “calculating” state and
polls every couple of seconds, giving up after about three minutes.
Changing the material and recalculating reuses the already-uploaded file;
choosing a different file re-uploads. Requests are protected with a WordPress
nonce.
Optional attributes:
accent– hex accent color for the widget (default#0f4c81)template_style–cards(default) orcompacttemplate selectorpowered_by– brand shown in the footer line (defaultProdaxis); set it empty to hide the line
Example: [prodaxis_print_quote accent="#0f9d6b" template_style="compact"]
Notes
- The WordPress server must be able to reach the API gateway URL.
localhost
works only when WordPress runs on the same machine as the gateway; inside a
Docker container usehttp://host.docker.internal:8086instead, since
localhost there points at the container, not the host. - The API key is stored in the WordPress options table and sent as the
X-API-Key header. It is scoped to one company and limited to the print
read/quote operations the widget needs; if it leaks, regenerate it in the
company dashboard (which immediately invalidates the old one). - Upload size is bounded by two limits: PHP’s
upload_max_filesize/
post_max_size on the WordPress server (raise these for large models) and the
gateway’s authoritative per-company limit, which is enforced server-side.
Third-party libraries
The print-quote widget’s 3D preview is powered by Three.js (r185 / 0.185.0),
bundled locally under assets/js/vendor/ so the widget needs no external
requests:
- three.module.min.js, STLLoader.js, OBJLoader.js, 3MFLoader.js, AMFLoader.js,
fflate.module.js, OrbitControls.js — Three.js r185, MIT
license, Copyright Three.js Authors.
Source: https://github.com/mrdoob/three.js/tree/r185
These are loaded as ES modules: the viewer script imports the bundled build and
its STL/OBJ/3MF/AMF loader and OrbitControls addons directly. The MIT license is
GPL-compatible. Apart from the optional InPost Geowidget described above (which
loads only when you configure its token), no other external scripts or services
are loaded in the browser.
Instalação
- Copy the
prodaxis-print-quotefolder intowp-content/plugins/. - Activate “Prodaxis Print Quote” in Plugins.
- Go to Settings -> Print Quote and set:
- API Gateway base URL (e.g. http://host.docker.internal:8086 when WordPress
runs in Docker; the gateway is on the host, not inside the container) - API key (generate it in your company dashboard under Settings -> API; it is
shown in full only once, so copy it then) - Cache lifetime in seconds (default 300)
- SSL verification (disable only for local self-signed certificates)
- Language: Site default, English or Polish (Site default follows the
WordPress site language)
- API Gateway base URL (e.g. http://host.docker.internal:8086 when WordPress
- Add
[prodaxis_print_quote]to any page or post.
Avaliações
Este plugin não tem avaliações.
Contribuidores e programadores
“Prodaxis Print Quote” é software de código aberto. As seguintes pessoas contribuíram para este plugin:
ContribuidoresTraduza o “Prodaxis Print Quote” para o seu idioma.
Interessado no desenvolvimento?
Consulte o código, consulte o repositório SVN, ou subscreva o registo de alterações por RSS.
Registo de alterações
1.18.0
- The widget now carries the Prodaxis type stack itself instead of inheriting
the theme’s, so the same embed reads the same on every site; option labels
are small caps, prices use tabular figures and buttons share one tracking. - The model is uploaded the moment it is picked, so the wait overlaps with
choosing options instead of following it: the file row shows the phase, the
option controls stay as placeholders until the gateway has the file, and the
quote starts by itself once the last option is chosen. - This print’s price, its quantity and Add to order now sit under the choices
they belong to; the rail beside them is only ever the whole order. - The widget flow is now four named steps – your model, your details, delivery,
review – with a progress bar on every screen and a Back button that names
where it goes. - Delivery moved out of the details form onto a step of its own: carriers show
a logo, their price and any free-from threshold, and the Paczkomat code and
map button sit directly under the carrier they belong to. - Wide embeds put the step you are on in one column and keep the 3D preview
and the whole order in a rail beside it; the rail’s contents follow the step. - Nothing but the dropzone renders before a file exists, so the widget never
looks broken in a sidebar. - The order is editable wherever it appears – wide rail and narrow drawer
alike: every line carries a quantity stepper and a Remove button under the
print it belongs to, plus “Add another model” in the drawer. - Address and phone are asked once, in “Your details”; the address block is
skipped entirely for shops that only offer lockers or personal pickup. - Quality templates render as cards on wide containers and as a segmented
control on narrow ones. - Slicing shows a placeholder price and a Cancel control on the file row
instead of an empty card. - Changing a quantity no longer redraws the widget: the stepper and the totals
that follow it update in place, so the control does not flicker under the
cursor and the 3D preview is left alone.
1.17.0
- Widget and settings screen restyled on the Prodaxis design system: brand
tokens, 500-weight headings, 8/12/16px radii and the shared badge palette. - The order rail is always visible in the wide layout and is labelled apart
from “This print”, so adding a second model never looks like it replaced the
first; order lines gained a plain Remove control next to the quantity. - The review step states the payment mode (“Stripe – pay now” / “Invoice – pay
later”) instead of implying it. - Returning from Stripe now shows the receipt (order reference, prints, amount
paid) next to the confirmation banner, not just the banner. - Delivery options that cost nothing read “Free”; the locker code and map
button sit under the carrier they belong to. - Settings -> Print Quote rebuilt: fields grouped into Connection and Widget,
a live connection readout (materials, colors/templates, payment mode, cache
age) that tells a rejected key apart from a company without a print method,
plus Test connection and Clear cache now buttons and a copyable shortcode.
1.16.0
- Uploads now accept OBJ, 3MF and AMF models in addition to STL. The widget
validates and previews all four formats in 3D (Three.js OBJ/3MF/AMF loaders
are bundled alongside STLLoader); print-service converts non-STL uploads to
STL server-side before slicing, so quotes are unchanged.
1.15.0
- Delivery method names are now rendered by the plugin instead of coming from
the backend: the delivery-options endpoint no longer returns a label, and
the widget maps each method type (InPost Paczkomat, InPost Kurier, DPD, DHL,
GLS, Poczta Polska, Personal pickup) to a translatable display name — the
bundled Polish translation shows “Odbiór osobisty” for personal pickup.
Unknown method types fall back to the raw type identifier.
1.14.1
- Delivery methods now show carrier logos: each delivery option row displays
the carrier’s logo (InPost, DPD, DHL, GLS, Poczta Polska) next to its label,
from SVGs bundled with the plugin. Personal pickup and unknown methods keep
the plain row, and a logo that fails to load falls back to it too.
1.14.0
- New optional “InPost Geowidget token” setting under Settings -> Print Quote:
paste the browser-safe token generated in the InPost Parcel Manager
(https://manager.paczkomaty.pl) to enable a map-based Paczkomat picker. - With a token configured, locker deliveries show a “Choose a Paczkomat on the
map” button next to the locker-code field. It opens the official InPost
Geowidget v5 in a modal (closable with Esc); picking a point fills the code
automatically and shows the point’s address, while the field stays editable
as before. - The Geowidget script and stylesheet are loaded from InPost’s CDN only on
pages with the shortcode, only when a token is configured and the shop
offers a parcel-locker delivery method — and the map initializes only when
the visitor opens it. Without a token nothing changes and no InPost
resources load (see the External service section).
1.13.0
- Delivery method selection: when the shop enables delivery options in the
Prodaxis dashboard (GET /order/delivery-options), the details step shows a
required “Delivery” choice above the address — courier, parcel locker
(Paczkomat) or personal pickup — with each method’s price and its
free-delivery threshold (“Free from …”, shown as Free once the order
qualifies). - Locker deliveries replace the shipping address with a required locker-code
field (with a link to the InPost locker finder); personal pickup needs
neither. Courier orders keep the current address requirements. - The order summary and cart rail show a delivery line and a grand total, and
the amount charged via Stripe is the gateway’s order total, which includes
the server-computed delivery charge. The selected option is always
re-validated server-side. - Shops without delivery options are unaffected: the widget looks and behaves
exactly as before.
1.12.1
- Browser and password-manager autofill (Chrome, NordPass, etc.) now recognizes
the checkout details fields: inputs live inside a real form element and carry
name/id attributes alongside the standard autocomplete tokens. - Pressing Enter in the details form continues to the payment step.
1.12.0
- Orders can now contain several prints. After a price comes back, “Continue”
becomes “Add to order”: each configured model is added as an order line with
its own quantity, editable and removable (with undo) before submitting. - Wide layout shows the order list in the left rail under the current print’s
quote; narrow layout gets a collapsible order summary under the price row. - The payment review lists every order line; Stripe checkout charges the order
total. Each line’s price is still re-fetched server-side by calculation id.
1.11.0
- SLS (powder) materials from the gateway catalog are now listed and quotable:
the widget understands the{fdm, sla, sls}options shape, tags SLS
materials with their method, and sendsmethodType=SLSon calculate. - Material usage for SLS quotes is shown in grams.
1.10.0
- Support the new method-aware catalog: the widget now understands the
gateway’s{fdm, sla}options shape and lists SLA (resin) materials next to
FDM ones, each tagged with its print method. The old flat FDM-only shape is
still accepted. - Quotes for SLA materials are calculated as SLA: the selected material’s
print method is sent with the calculation request. - Material usage in the quote respects the print method: meters of filament
for FDM, milliliters of resin for SLA.
1.9.1
- Order submissions now carry an idempotency key, so a double click or a
retried request can no longer create duplicate orders (and duplicate
confirmation emails) for the same quote.
1.9.0
- New Language setting under Settings -> Print Quote: Site default, English or
Polish. Site default follows the WordPress site language; English and Polish
force that language for the quote widget and all plugin messages regardless
of the site locale. - Ship a full Polish (pl_PL) translation, bundled under
languages/(with a
POT template for further translations). - The example form placeholders (name, email, company, street) are now
translatable too.
1.8.2
- Fixed the widget visibly jumping on every option click or file upload: the
entrance animation now plays only when moving between steps, and the price
readout keeps a stable height while switching between idle, calculating,
price and error states.
1.8.1
- The payment mode is now resolved with a single gateway call
(GET /payment/mode) instead of separate provider and Stripe-account
lookups; the effective now/later decision is made server-side by the
Prodaxis payment service.
1.8.0
- The payment flow is now dictated by the shop’s payment provider configured in
the Prodaxis dashboard (Manual/Email or Stripe) — the interim visitor-facing
payment-mode toggle has been removed. - The widget shows Stripe checkout only when the shop selected Stripe and its
connected account can accept charges; otherwise orders are placed without
payment and the shop arranges payment with the customer by email. - The configured mode is enforced server-side on the checkout endpoint and
cached alongside the catalog (flushed when settings are saved).
1.7.0
- Redesign the widget after the Prodaxis QuoteFlow design: a split configurator
on wide containers (persistent 3D preview + live quote panel) that collapses
into a guided stepper card on mobile, with a three-step flow
(Configure -> Your details -> Payment) and a success screen. - The price is now calculated automatically as soon as the model and all
options are selected, and recalculated when an option changes (the uploaded
file is reused; superseded calculations are discarded). - New “Pay on invoice” mode: creates the order without starting a payment and
confirms that an invoice will follow. An interim toggle switches between
Stripe checkout and invoice mode until the account-mode API is available. - Default accent color changed to Prodaxis blue (#0f4c81).
1.6.0
- New: visitors can order and pay for a calculated print. After a quote, an
“Order & pay” step collects contact and shipping details, creates the order
through the gateway and redirects to a Stripe-hosted checkout page. - The charged amount is always re-read from the gateway by calculation
reference server-side; the browser never dictates the price. - Returning from payment shows a confirmation (or cancellation) notice on the
quote page.
1.5.1
- Rename all PHP functions, classes, constants, the stored option, transients,
the nonce and AJAX actions, and script handles to use the uniqueprodprqu_
prefix, avoiding collisions with other plugins. Re-enter the API key under
Settings -> Print Quote after updating. - Update the bundled Three.js library from r128 to r185 and load the 3D preview
as an ES module (the modern build is ESM-only). - Document the external Prodaxis API gateway service, the data sent to
it, and links to its Terms of Service and Privacy Policy.
1.5.0
- Authenticate with a per-company API key (sent as the
X-API-Keyheader)
instead of a service-account e-mail and password. Removes the server-side
login step and token caching. Configure the key under Settings -> Print
Quote; generate it in your company dashboard (Settings -> API).
1.4.0
- Remove the
[company_print_catalog]catalog shortcode and its assets. The
plugin now focuses solely on the[prodaxis_print_quote]tool. The print
options are still fetched from /print/options to populate the quote controls.
1.3.0
- Add an interactive 3D preview of the uploaded model above the upload step
(Three.js, bundled locally): the model auto-rotates, can be orbited and
zoomed, and is tinted live by the selected color. Degrades to a small
“3D preview unavailable” notice where WebGL or Three.js is missing.
1.2.0
- Redesign the
[prodaxis_print_quote]widget: a single card with a drag-and-drop
upload zone, a custom material picker, color swatches, quality-template cards
and an animated price result. New optional shortcode attributesaccent,
template_style andpowered_by.
1.1.1
- Fix: the quote widget now embeds its configuration inline in the shortcode
markup, so the material list populates reliably regardless of how the theme or
page builder prints scripts.
1.1.0
- Add the
[prodaxis_print_quote]shortcode: upload a model, pick a material,
color and template, and get an asynchronous price calculation. Files and
selections are proxied server-side (POST /slicer/upload, POST
/print/calculate/async) and the result is polled (GET /calculation/{id}) until
it completes or fails. Requests are protected with a WordPress nonce.
1.0.0
- Initial release: shortcode, admin settings, server-side auth with token and
catalog caching, material/color/template cards with expandable details.