A comprehensive Laravel package for seamless integration with the Paystack payment gateway. This package provides an expressive and convenient way to interact with the Paystack API within your Laravel application.
- π Fluent API Interface - Clean and intuitive method chaining
- π‘οΈ Comprehensive Error Handling - Custom exception classes for different error types
- π Security First - Built-in validation and security checks
- π Full API Coverage - Support for all Paystack API endpoints
- π§ͺ Extensive Testing - High test coverage with mock support
- π Excellent Documentation - Comprehensive guides and examples
- π§ Developer Friendly - Easy setup and configuration
- β‘ Performance Optimized - Efficient HTTP client with retry logic
- π Multi-Currency Support - NGN, GHS, USD, and more
- π Webhook Support - Built-in webhook handling and verification
- PHP: ^8.1|^8.2|^8.3
- Laravel: ^9.0|^10.0|^11.0
- Composer: ^2.0
You can install the package via Composer:
composer require iamolayemi/laravel-paystack
The package will automatically register itself if you're using Laravel's auto-discovery feature.
Add your Paystack credentials to your .env
file:
PAYSTACK_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxx
PAYSTACK_PUBLIC_KEY=pk_test_xxxxxxxxxxxxxxxxxxxxx
PAYSTACK_CALLBACK_URL=https://yourdomain.com/paystack/callback
PAYSTACK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxx
php artisan vendor:publish --provider="Iamolayemi\Paystack\PaystackServiceProvider"
use Iamolayemi\Paystack\Facades\Paystack;
// Initialize a payment
$paymentData = [
'amount' => 500000, // 5000 NGN in kobo
'email' => '[email protected]',
'reference' => 'PAY_' . uniqid(),
'callback_url' => 'https://yourdomain.com/payment/callback',
];
$response = Paystack::transaction()
->initialize($paymentData)
->response();
if ($response['status']) {
$authorizationUrl = $response['data']['authorization_url'];
// Redirect user to $authorizationUrl
}
// Using the helper function
$response = paystack()->transaction()
->initialize($paymentData)
->response();
// Get only the authorization URL
$authorizationUrl = Paystack::transaction()
->initialize($paymentData)
->response('data.authorization_url');
// Or use the dedicated method
$authorizationUrl = Paystack::transaction()
->initialize($paymentData)
->authorizationURL();
// Verify a transaction
$reference = 'PAY_xxxxxxxxx';
$verification = Paystack::transaction()
->verify($reference)
->response();
if ($verification['status'] && $verification['data']['status'] === 'success') {
// Payment was successful
$amount = $verification['data']['amount'];
$customerEmail = $verification['data']['customer']['email'];
}
The package provides access to all Paystack API endpoints:
Paystack::transaction()->initialize($data);
Paystack::transaction()->verify($reference);
Paystack::transaction()->list($params);
Paystack::transaction()->fetch($id);
Paystack::customer()->create($data);
Paystack::customer()->list($params);
Paystack::customer()->fetch($emailOrCode);
Paystack::customer()->update($code, $data);
Paystack::transfer()->initiate($data);
Paystack::transfer()->finalize($data);
Paystack::transfer()->list($params);
Paystack::transfer()->fetch($code);
Paystack::plan()->create($data);
Paystack::plan()->list($params);
Paystack::subscription()->create($data);
Paystack::subscription()->list($params);
- Banks: List banks, resolve account numbers
- Countries: List countries and states
- Invoices: Create and manage invoices
- Products: Product management
- Refunds: Process refunds
- Settlements: Settlement management
- Splits: Split payment configuration
- Sub-accounts: Sub-account management
The package provides comprehensive error handling with custom exception classes:
use Iamolayemi\Paystack\Exceptions\PaystackApiException;
use Iamolayemi\Paystack\Exceptions\PaystackValidationException;
use Iamolayemi\Paystack\Exceptions\PaystackConnectionException;
try {
$response = Paystack::transaction()->initialize($data)->response();
} catch (PaystackValidationException $e) {
// Handle validation errors
$errors = $e->getErrors();
} catch (PaystackApiException $e) {
// Handle API errors
$message = $e->getMessage();
$endpoint = $e->getEndpoint();
} catch (PaystackConnectionException $e) {
// Handle connection errors
$url = $e->getUrl();
}
# Run all tests
composer test
# Run with coverage
composer test-coverage
# Run specific test
vendor/bin/phpunit --filter=TransactionTest
use Illuminate\Support\Facades\Http;
Http::fake([
'api.paystack.co/transaction/initialize' => Http::response([
'status' => true,
'message' => 'Authorization URL created',
'data' => [
'authorization_url' => 'https://checkout.paystack.com/0x234567',
'reference' => 'TEST_REF_123',
],
], 200),
]);
For detailed documentation, visit https://laravel-paystack.netlify.app
- PHP: ^8.1|^8.2|^8.3
- Composer: ^2.0
- Node.js: ^16.0 (for documentation)
# Clone the repository
git clone https://github.com/iamolayemi/laravel-paystack.git
cd laravel-paystack
# Install dependencies
composer install
# Run all checks to ensure everything is working
make ci
The project uses a comprehensive Makefile for development tasks:
# Show all available commands
make help
# Install dependencies
make install
# Development workflow
make dev-setup # Complete development setup
make dev-install # Install development dependencies
# Run all tests
make test
# Run tests with coverage report
make test-coverage
# Run specific test file
vendor/bin/phpunit tests/Unit/TransactionEndpointTest.php
# Run tests with specific filter
vendor/bin/phpunit --filter=testTransactionInitialization
# Run static analysis with PHPStan
make analyse
# Fix code style issues automatically
make fix
# Check code style without fixing
make fix-dry-run
# Run all code quality checks
make check
# Check for security vulnerabilities
make security-check
# Validate composer.json
make validate
# Run complete CI pipeline (test + analyse + style + security)
make ci
# Run all checks (test + analyse + style)
make check
# Clean build artifacts
make clean
# Update dependencies
make update
# Update only composer.lock
make update-lock
# Build the package for production
make build
# Generate documentation
make docs
# Build documentation (if using docs package)
cd docs && npm install && npm run build
# Build Docker image
make docker-build
# Run tests in Docker
make docker-test
# Run shell in Docker container
make docker-shell
# Release patch version (1.0.0 -> 1.0.1)
make release-patch
# Release minor version (1.0.0 -> 1.1.0)
make release-minor
# Release major version (1.0.0 -> 2.0.0)
make release-major
- Setup:
make dev-setup
- Make changes: Edit code
- Test:
make test
- Check quality:
make analyse
- Fix style:
make fix
- Full validation:
make ci
- Commit:
git commit -m "Your message"
- Push:
git push
The project enforces high code quality standards:
- PHPStan Level 8: Strict static analysis
- Laravel Pint: PSR-12 coding standards
- PHPUnit: 100% test coverage target
- Security Checker: Vulnerability scanning
# Run all tests
make test
# Run with coverage (generates HTML report)
make test-coverage
# Run specific test suite
vendor/bin/phpunit --testsuite=Unit
vendor/bin/phpunit --testsuite=Feature
# Run tests with verbose output
vendor/bin/phpunit --verbose
# Run tests with stop on failure
vendor/bin/phpunit --stop-on-failure
# Run PHPStan analysis
make analyse
# Run with specific level
vendor/bin/phpstan analyse --level=8
# Generate baseline (for ignoring existing errors)
vendor/bin/phpstan analyse --generate-baseline
# Fix all code style issues
make fix
# Check what would be fixed
make fix-dry-run
# Fix specific file
vendor/bin/pint src/Endpoints/Transaction.php
# If tests fail, try cleaning and reinstalling
make clean
composer install
make test
# If PHPStan fails, check configuration
vendor/bin/phpstan analyse --debug
# If style check fails, auto-fix
make fix
For the best development experience:
- PHPStorm/IntelliJ: Enable PHPStan integration
- VS Code: Install PHP extensions
- EditorConfig: Project includes
.editorconfig
- PHP CS Fixer: Configuration in
.php-cs-fixer.php
Consider setting up pre-commit hooks:
# Create pre-commit hook
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/sh
make ci
EOF
chmod +x .git/hooks/pre-commit
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Clone your fork
- Install dependencies:
composer install
- Run tests:
make test
- Make your changes
- Ensure all tests pass:
make ci
- Submit a pull request
If you discover any bugs, please create an issue on GitHub.
If you discover any security-related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.
- Olayemi Olatayo - Original author
- All Contributors - Community contributors
- Paystack - Payment gateway provider