Download the PHP package quellabs/canvas-payments-rabosmartpay without Composer
On this page you can find all versions of the php package quellabs/canvas-payments-rabosmartpay. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download quellabs/canvas-payments-rabosmartpay
More information about quellabs/canvas-payments-rabosmartpay
Files in quellabs/canvas-payments-rabosmartpay
Package canvas-payments-rabosmartpay
Short Description Rabo Smart Pay (OmniKassa v2) payment gateway integration for the Canvas PHP framework
License MIT
Informations about the package canvas-payments-rabosmartpay
Rabo Smart Pay Payment Provider
A Rabo Smart Pay (OmniKassa v2) payment provider for the Canvas framework. Part of the Canvas payments ecosystem.
Installation
Architecture
This package sits between the Rabo Smart Pay API and your application. Your application only ever touches the contracts
layer — it never depends on this package directly. PaymentRouter (from quellabs/canvas-payments) discovers this
package automatically via composer metadata and routes payment calls to it.
Exchange processing is decoupled from your application via signals. When Rabo Smart Pay calls the webhook URL,
the package emits a payment_exchange signal carrying a PaymentState. Your application listens for that signal
and handles it.
Payment flow
Configuration
Create config/rabosmartpay.php in your Canvas application:
| Key | Required | Description |
|---|---|---|
refresh_token |
Yes | Long-lived token from the Rabo Smart Pay dashboard (webshop settings) |
signing_key |
Yes | Base64-encoded HMAC signing key from the Rabo Smart Pay dashboard |
test_mode |
No | Routes to sandbox (betalen.rabobank.nl) when true. Defaults to false |
return_url |
Yes | Shopper is redirected here after a completed or pending payment |
cancel_return_url |
Yes | Shopper is redirected here after a cancelled or failed payment |
default_currency |
No | ISO 4217 currency code. Only EUR is supported. Defaults to EUR |
language |
No | Language for the hosted checkout page. NL, EN, FR, DE. Defaults to NL |
skip_result_page |
No | Skip Rabo Smart Pay's own confirmation page, redirect directly to return_url. Default true |
Important: storing transactionId and orderReference
After initiating a payment, InitiateResult::$transactionId holds Rabo Smart Pay's omnikassaOrderId UUID.
Store this against your order — it is required for refund calls.
InitiateResult::$metadata['orderReference'] holds the generated merchantOrderId. Store this too — it is
what Rabo Smart Pay echoes back in the return URL ?order_id= parameter and in the Status Pull response,
allowing you to correlate those callbacks to your order.
Supported payment methods
| Module name | Brand string | Method |
|---|---|---|
rabo_ideal |
IDEAL |
iDEAL 2.0 (NL) |
rabo_bancontact |
BANCONTACT |
Bancontact (BE) |
rabo_mastercard |
MASTERCARD |
Mastercard |
rabo_visa |
VISA |
Visa |
rabo_maestro |
MAESTRO |
Maestro |
rabo_vpay |
V_PAY |
V PAY |
rabo_cards |
CARDS |
All card methods combined |
rabo_applepay |
APPLE_PAY |
Apple Pay |
rabo_paypal |
PAYPAL |
PayPal (contract-dependent) |
Payment methods must be activated for your webshop in the Rabo Smart Pay dashboard before use.
Usage
Initiating a payment
Handling refunds
Listening for payment state changes
Webhook setup
Configure your webhook URL in the Rabo Smart Pay dashboard under your webshop settings:
The endpoint must be publicly reachable. Rabo Smart Pay does not retry failed webhook deliveries — return HTTP 200 to acknowledge receipt. Errors are logged server-side.
Webhook flow
- Rabo Smart Pay POSTs a notification JSON containing an
authenticationtoken. - This package verifies the HMAC-SHA512 signature on the notification body.
- The
authenticationtoken is used to perform a Status Pull call. - The Status Pull may return multiple order results and indicate
moreOrderResultsAvailable. - Each order result is mapped to a
PaymentStateand emitted via thepayment_exchangesignal.
Return URL parameters
Rabo Smart Pay appends the following to your return_url:
| Parameter | Description |
|---|---|
order_id |
The generated merchantOrderId stored in InitiateResult::$metadata['orderReference'] |
status |
IN_PROGRESS, COMPLETED, CANCELLED, EXPIRED, or FAILURE |
signature |
HMAC-SHA512 hex signature of "{order_id},{status}" |
The return URL handler verifies the signature and redirects the shopper — no signal is emitted here.
The authoritative payment state is delivered exclusively via the webhook. For IN_PROGRESS statuses
(common with iDEAL 2.0), the shopper is redirected to the success page and the final status arrives
via the webhook.
Missed webhooks and reconciliation
Rabo Smart Pay does not retry failed webhook deliveries. If your server is temporarily unreachable, or if the webhook notification is lost for any reason, your order will remain in a pending state indefinitely.
To handle this, implement a reconciliation job that periodically checks orders that have been in a pending state beyond
a reasonable threshold (e.g. 15 minutes). For each such order, call exchange() directly using the stored
transactionId (the omnikassaOrderId UUID from InitiateResult):
Rabo Smart Pay guarantees order status data is available for at least 24 hours after an order reaches a final state. Note that Rabo Smart Pay explicitly prohibits polling this endpoint — use it only as a fallback for orders where no webhook was received.
License
MIT
All versions of canvas-payments-rabosmartpay with dependencies
ext-curl Version *
symfony/http-client Version ^7.0 || ^8.0
quellabs/support Version *
quellabs/contracts Version *
quellabs/canvas-payments-contracts Version *