App Listener
The App Listener is the device-side client that makes payment detection possible without a payment provider’s official API: it reads payment app notifications (DANA, GoPay Merchant, etc.) on the merchant’s phone as they arrive, parses the paid amount, and forwards it to this gateway’s inbound webhook — see Webhooks → Inbound for the exact contract it must call.
Currently implemented as a MacroDroid
macro. The filename is versioned (-v1, -v2, …) so a future macro update ships as a new file
instead of silently overwriting this one — existing tenants keep working off whichever version
they already imported until they choose to reimport the newer one.
- qris-gateway-payment-listener-v2.mdr (recommended) — adds a retry loop (up to 3 attempts, 30s apart) around the webhook POST, plus a device notification if all attempts fail.
- qris-gateway-payment-listener-v1.mdr — fires the webhook once with no retry.
- Install MacroDroid from the Play Store.
- In MacroDroid: menu → Import/Export → Import Macro(s), then select the downloaded
.mdrfile. It imports as Payment Listener (QRIS Gateway). - Open the macro and edit its Notification Received trigger — the application list ships empty on purpose, so tap Select Application and choose the merchant’s actual payment app (GoPay Merchant, DANA, etc.).
- Edit the HTTP Request action’s
X-User-ID/X-Webhook-Secretheader values — replace theYOUR_USER_ID/YOUR_WEBHOOK_SECRETplaceholders with your tenant’s own (see Authentication for where those come from). The URL (https://api-qris-gateway.laboon.biz.id/v1/webhook/payment-status) is already set — it’s the same for every tenant on this gateway instance. - Enable the macro. It fires on every matching notification and does not need further configuration.
Tested apps
Section titled “Tested apps”| App | Package | Status |
|---|---|---|
| GoPay Merchant | com.gojek.gopaymerchant | Working |
| DANA | — | Working |
| ShopeePay | com.shopeepay.id | Working |
| Merchant BCA | com.bca.msb | Not supported — see Known limitations |
What the macro does
Section titled “What the macro does”- Trigger on a new notification from the target payment app (e.g. GoPay Merchant).
- Parse the amount, timestamp, and payment status out of the notification text.
- Send
POST /v1/webhook/payment-statuswith:X-User-ID: the tenant’s user IDX-Webhook-Secret: the tenant’ssecret_key_liveorsecret_key_sandbox(whichever matches selects the mode — see Authentication)- JSON body matching the inbound contract
The endpoint always responds 200 on a successful call. In v2, if the POST doesn’t return 200
(e.g. network hiccup), the macro retries up to 3 times, 30 seconds apart, and shows a device
notification if every attempt fails. v1 fires the POST once with no retry. See
Webhooks for what happens on the gateway side for each outcome.
Continue to Errors →