glennraya/xendivel
Xendivel is a Laravel wrapper for Xendit that simplifies accepting payments and sending payouts. It offers a fluent API for invoices, virtual accounts, e-wallets, retail outlets, QR codes, disbursements, and webhook handling, with straightforward configuration and Laravel-friendly integration.
Xendivel::createQrCode, getQrCode, simulateQrPayment mirroring the existing payment verbs). Each additional method is incremental, so "add method X next quarter" becomes a smaller, more predictable line item — useful when negotiating scope with stakeholders who expect per-method timelines.DYNAMIC → ONE_TIME_USE (fixed amount) and STATIC → MULTIPLE_USE (payer enters amount) map directly to two distinct merchant experiences: fixed-price checkout vs. countertop/printed QR for in-person or variable-amount collection. Decide per surface — a fixed-amount dynamic QR in an online cart removes a payer error mode; a static QR on a printed standee is a different product.PENDING → SUCCEEDED) forces an explicit choice: optimistic "waiting for payment" screen with polling, or redirect-and-notify. The bundled demo (generate → render → poll → simulate) is a usable reference for the first pattern and a reasonable basis for a design review.simulateQrPayment accepting either a QR reference or a pr-… id, plus demo-route and webhook auth-guard tests, lowers the cost of end-to-end rehearsal in test mode — relevant when you're deciding whether to gate launch on a manual payments test pass.Adopt when:
payment.succeeded callback at qr_webhook_url. The default /xendit/* CSRF exclusion already covers the path.Look elsewhere or build when:
--force would clobber customized templates. The upgrade path is vendor:publish --tag=xendivel --force — treat that flag as destructive and diff before applying.For executives (one paragraph): The payment package now supports QR Ph, the Philippine national QR standard, so customers can scan one code with any participating banking or e-wallet app and pay. That's the cheapest route to covering the long tail of wallets and banks we can't integrate individually, and because it runs on Xendit's default payments API there's no new channel activation or procurement cycle — the work is configuration and a webhook hookup, not a new vendor. It arrives with a working demo, automated tests, and a documented upgrade path. Realistic framing: this is market-parity capability delivered at low marginal cost, not a differentiator — the value is closing a coverage gap and reducing checkout abandonment for customers who don't use cards.
For engineering (what the upgrade actually costs):
qr_webhook_url, qr_channel_code (default QRPH), qr_currency (default PHP), the event/listener stubs, and updated checkout templates. Note the --force flag overwrites — diff and re-apply any local template customizations, and React users must rebuild assets and re-add the publishable key.QrPaymentEvents::class => [QrPaymentWebhookListener::class] in EventServiceProvider.payment.succeeded) callback in the Xendit dashboard pointing at qr_webhook_url (default /xendit/qr/webhook); CSRF exclusion is already handled.How can I help you explore Laravel packages today?