marlon-be/marlon-ogone
Laravel package for integrating Ogone (Ingenico) payments into your application. It handles payment requests, redirects, and feedback validation, letting you accept online payments quickly and securely with minimal setup.
Install via Composer:
composer require marlon-be/marlon-ogone
On Laravel 5.5+ the service provider and MarlonOGone facade are auto-discovered; on older versions register them manually in config/app.php.
Publish the package config:
php artisan vendor:publish
This drops config/ogone.php into your app. Fill in the values you get from the Ogone/Ingenico back-office under Configuration → Technical information:
pspid — your merchant PSPIDsha_in — passphrase used to sign the outgoing payment requestsha_out — passphrase used to verify the incoming feedbackmode — test or production (flips the endpoint between secure.ogone.com/ncol/test/... and .../ncol/prod/...)currency, language, and hash algorithm (sha1 vs sha512)First use case: a checkout flow. In a controller, build a parameter array (order reference, amount, accepturl, declineurl, exceptionurl, backurl), call the package's payment-creation method (typically MarlonOGone::createPayment($params)) to get the signed query string, and redirect the user to Ogone:
return redirect()->away(MarlonOGone::createPayment($params));
Then add a public GET route for accepturl/declineurl that hands the query string to the package's feedback/receive method so the SHA-OUT signature is validated before you mark the order as paid.
Look first at the published config file and the package's facade/root class — the README is short, so the source is the real documentation.
PaymentService / OgoneGateway class so controllers and models never touch the vendor API directly. This is your exit ramp if you swap to a newer Ingenico/Worldline SDK later./payment/accept, /payment/decline, /payment/exception) handles the callback, invokes feedback validation, and returns a view.Order to Ogone fields (ORDERID, AMOUNT, CURRENCY, LANGUAGE, CN, EMAIL, TXT, PM/BRAND) in one clearly named builder — this is where you document what each Ogone field means for your app.1050. Use (int) round($euros * 100) in a single helper, never inline in several call sites.PAYID / transaction reference and short-circuit if the order is already marked paid. The accept URL can be re-hit by browser refresh or bookmarks.4111111111111111, any CVC/future expiry). Exercise the accept, decline, and exception paths separately.CURRENCY and LANGUAGE per payment rather than relying only on defaults in config/ogone.php, especially if you sell in more than one market.sha_in; verifying feedback uses sha_out. Mixing them produces cryptic errors ("unknown order/1/s/…", or invalid signature on the callback).config/ogone.php.$_GET/payload before validating so you can debug mismatches.mode value. Make it explicit in .env (OGONE_MODE=test) and log the endpoint used at boot.accepturl / declineurl / exceptionurl must be simple absolute HTTPS URLs — avoid query strings, spaces, or non-ASCII characters, or Ogone may silently drop them.WIN3DS (usually MAINW or POPUP). Leaving it off produces "3DS" failures or declined test transactions.VerifyCsrfToken; the GET accept/decline routes should still be web-middleware but keep auth out (the user may have an expired session).composer.json, verify PHP/Laravel compatibility before upgrading (Laravel 10/11 may need a fork or ignore-platform-reqs), and keep the vendor calls isolated behind your own OgoneGateway so a replacement is a one-file change.ORDERID, PAYID, amount, status, and the exact request/response. The Ogone back-office "Payment history" is your ground truth when reconciling a disputed order.How can I help you explore Laravel packages today?