LiqPay webhook triggers in n8n: fulfill orders the second payment clears
Most Ukrainian online stores still run payments and fulfillment as two disconnected steps. A customer pays through LiqPay, and then someone opens the merchant dashboard, checks the status, marks the order paid, and pings the warehouse. That gap costs you real money: delayed shipping, angry "I paid, where is my order?" messages, and a manager burning an hour a day on status checks that a machine should handle.
The fix is a LiqPay webhook wired straight into an n8n workflow. When a payment succeeds, LiqPay sends a signed callback. n8n catches it, verifies the signature, and runs every downstream action automatically — no dashboard, no manual reconciliation.
The problem with polling and manual checks
Teams that don't use webhooks usually poll the LiqPay API on a schedule or check by hand. Polling wastes API calls and adds a delay of up to your polling interval — often several minutes — between payment and action. Manual checks are worse: they only happen when someone remembers, and they stop entirely on weekends and holidays. For a store doing 40 orders a day, that's 40 chances to ship late.
How the LiqPay webhook trigger works in n8n
LiqPay sends two fields to your callback URL: data (a base64-encoded JSON payload) and signature. The signature is base64(sha1(private_key + data + private_key)). If you skip verification, anyone can POST a fake "paid" event to your endpoint and trigger fulfillment for an order that was never paid. So verification is not optional.
Here is the workflow we deploy for clients:
- Webhook node — create an n8n Webhook node with a POST URL. Paste that URL into your LiqPay
server_urlfield so callbacks land there. - Signature check — a Function/Code node recomputes
base64(sha1(private_key + data + private_key))and compares it to the received signature. On mismatch, stop the workflow and log the attempt. - Decode the payload — base64-decode
datato readorder_id,status, andamount. Continue only when status equalssuccessorsubscribed. - Update the order — a Postgres/MySQL node (or an HTTP request to your OpenCart or Laravel backend) marks the order paid and writes the LiqPay transaction ID for your accounting trail.
- Notify and fulfill — send the warehouse a Telegram message with the order details, email the customer their invoice, and push a row to Google Sheets for the finance team. All in parallel, all in under two seconds.
The business result
For a client running an OpenCart store, this workflow cut the time between payment and warehouse notification from an average of 22 minutes to under 5 seconds, and removed roughly 5 hours of manual reconciliation per week. Fewer late shipments, no fake-payment risk, and a clean transaction log the accountant actually trusts.
If you sell online in Ukraine and still reconcile LiqPay payments by hand, this is a one-day integration with an immediate payback. We build these workflows on n8n against OpenCart, WordPress, and Laravel backends, with signature verification and full logging by default.
Talk to us: https://maximorum.com/