Правильне налаштування BayarCash у Laravel
Якщо ви розробляєте SaaS для малайзійського ринку, вам рано чи пізно знадобиться FPX. BayarCash — поширений вибір.
Проблема не в SDK. Проблема в архітектурі. Якщо ви викликаєте SDK безпосередньо з контролера або жорстко прописуєте коди статусів у представленнях (views), ви зіткнетеся з проблемами у продакшені.
Я впроваджував BayarCash у трьох різних Laravel-додатках. Ось патерн, який працює щоразу.
Key Terms To Master
- Portal: Конфігурація вашого мерчант-чекауту. Використовуйте
portal_key. - API Token: Автентифікує ваші вихідні запити.
- Secret Key: Підписує ваші корисні навантаження (payloads) та перевіряє вебхуки. Тримайте його в безпеці.
- Payment Intent: Ви надсилаєте запит на оплату, отримуєте URL і перенаправляєте користувача.
- Channel: Завжди використовуйте константи SDK замість "сирих" чисел.
Structure Your Code Well
Ваш доменний код ніколи не повинен бачити "сире" корисне навантаження BayarCash. Вам потрібні три рівні:
- Тонка обгортка клієнта (thin client wrapper): вона обробляє конфігурацію та надає типізовані методи.
- Шлюз (gateway): він реалізує інтерфейс і використовує мову вашого домену.
- Фабрика (factory): вона обирає активний шлюз, щоб ви могли легко замінити BayarCash на Stripe.
Binding a Fake Gateway
Якщо ви не надаєте API token, прив'яжіть Fake-провайдер у вашому сервіс-контейнері. Це дозволить вашим тестам працювати без мережі, а локальним збіркам — без активної оплати.
Webhook Best Practices
Вебхук — це ваше єдине джерело істини. Дотримуйтесь цих правил, щоб уникнути хаосу в продакшені:
- CSRF Exempt: Ваш маршрут вебхука має оминати захист CSRF.
- Verify Signatures: Завжди перевіряйте підпис перед виконанням будь-яких інших дій.
- The 200 Rule: Щойно ви перевірили підпис, поверніть відповідь 2xx.
- Avoid Retries: Якщо ви повернете помилку 500, BayarCash повторить запит до вашого вебхука 40 разів. Це може призвести до падіння сервера. Логуйте помилки, але все одно повертайте 200.
- Idempotency: Переконайтеся, що ваша логіка може обробити один і той самий вебхук двічі без створення дублікатів замовлень.
Checklist for Success
• Використовуйте order_number як ключ кореляції. Тримайте його довжиною до 30 символів.
• Збережіть локальний запис зі статусом "очікується" (pending) перед тим, як перенаправити користувача.
• Використовуйте server-to-server callback як основне джерело даних.
• Використовуйте return URL як страховку для звірки (reconciliation).
• Одразу зіставляйте цілочисельні коди статусів із власними Enum.
Інтеграція платежів стосується реальних грошей. Тестуйте перевірку підпису та ідемпотентність понад усе інше.
Source: https://dev.to/nasrulhazim/setting-up-bayarcash-fpx-in-laravel-the-right-way-4b2n
