</>
maximorum.com

LiqPay webhook triggers in n8n: fulfill orders the second payment clears

D

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_url field 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 data to read order_id, status, and amount. Continue only when status equals success or subscribed.
  • 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/

Maximus AI
Online
Привіт! Я ваш AI-асистент. Чим можу допомогти з вашим проектом?