MA
All projects

Case study

Monnify Laravel Package Contribution

Merged contribution to Monnify's official Laravel package: test coverage, CI, dependency injection refactor, contract fixes, and safer transport handling.


Overview

Monnify's official Laravel package gives Laravel teams a first-party integration path for payment collection, verification, webhooks, disbursements, virtual accounts, bills payment, and related payment workflows.

My merged contribution in PR #1 improved the package's reliability and maintainability: expanded automated coverage, added CI, refactored service wiring toward Laravel's container, fixed Monnify contract mismatches, and improved transport failure handling.

Packages

Monnify Laravel Package

Contributor to Monnify's official Laravel package:

  • Packagist: monnify/monnify-laravel
  • GitHub: Monnify/monnify-laravel
  • Merged PR: Improve test coverage and align Monnify contract handling
  • Added PHPUnit coverage across package wiring, shared request behavior, core services, and validators
  • Added GitHub Actions test workflow across supported PHP versions
  • Refactored package internals toward container-driven dependency injection and lazy service resolution
  • Fixed verified Monnify contract mismatches, including disbursement validation and direct debit split payload support
  • Hardened API transport failure handling and token cache behavior

Nomba SDK

Full Laravel SDK for Nomba (formerly Kuda Business) covering virtual accounts, payouts, and collections. In active development.

OPay & KoraPay

SDKs for OPay and KoraPay currently in progress — both following the same clean interface design as the Monnify and Nomba packages.

Design Principles

  • Laravel-first — Uses service providers, facades, and config patterns that feel native to Laravel developers
  • Testable — All packages ship with full test coverage and mock-friendly interfaces
  • Developer ergonomics — Minimal boilerplate to get a working integration; sensible defaults throughout
  • Consistent interface — All four SDKs share a common interface contract so switching providers requires minimal code changes