BayarCash op de juiste manier instellen in Laravel
Als je SaaS bouwt voor de Maleisische markt, heb je uiteindelijk FPX nodig. BayarCash is een veelgekozen optie.
De SDK is niet het probleem. Het probleem is je architectuur. Als je de SDK vanuit een controller aanroept of statuscodes hardcodeert in je views, krijg je problemen in productie.
Ik heb BayarCash geïmplementeerd in drie verschillende Laravel-apps. Hier is het patroon dat elke keer werkt.
Belangrijke termen om onder de knie te krijgen
- Portal: Je configuratie voor de merchant checkout. Gebruik de
portal_key. - API Token: Dit authenticeert je uitgaande aanroepen.
- Secret Key: Hiermee worden je payloads ondertekend en webhooks geverifieerd. Houd deze veilig.
- Payment Intent: Je stuurt een charge, ontvangt een URL en stuurt de gebruiker door.
- Channel: Gebruik altijd SDK-constanten in plaats van ruwe getallen.
Structureer je code goed
Je domeincode mag nooit een ruwe BayarCash-payload zien. Je hebt drie lagen nodig:
- Een dunne client wrapper: Deze handelt de configuratie af en biedt getypeerde methoden.
- Een gateway: Deze implementeert een interface en spreekt de taal van jouw domein.
- Een factory: Deze kiest de actieve gateway, zodat je BayarCash gemakkelijk kunt vervangen door Stripe.
Een Fake Gateway binden
Als je geen API-token opgeeft, bind dan een Fake provider in je service container. Hierdoor kunnen je tests draaien zonder netwerkverbinding en kunnen je lokale builds draaien zonder actieve facturering.
Best practices voor webhooks
De webhook is je bron van waarheid. Volg deze regels om problemen in productie te voorkomen:
- CSRF Exempt: Je webhook-route moet de CSRF-bescherming omzeilen.
- Verifieer handtekeningen: Verifieer altijd de handtekening voordat je iets anders doet.
- De 200-regel: Zodra je de handtekening hebt geverifieerd, geef je een 2xx-respons terug.
- Vermijd retries: Als je een 500-fout teruggeeft, zal BayarCash je webhook 40 keer opnieuw proberen. Dit kan je server laten crashen. Log fouten, maar geef toch een 200 terug.
- Idempotentie: Zorg ervoor dat je logica dezelfde webhook twee keer kan verwerken zonder dubbele bestellingen aan te maken.
Checklist voor succes
• Gebruik order_number als correlatiesleutel. Houd deze onder de 30 tekens.
• Sla een lokaal record met de status 'pending' op voordat je de gebruiker doorstuurt.
• Gebruik de server-to-server callback als je belangrijkste bron van waarheid.
• Gebruik de return URL als vangnet voor reconciliatie.
• Map integer statuscodes direct naar je eigen Enums.
Betalingsintegraties gaan over echt geld. Test je handtekeningverificatie en idempotentie meer dan wat dan ook.
Bron: https://dev.to/nasrulhazim/setting-up-bayarcash-fpx-in-laravel-the-right-way-4b2n
