fintech-systems / laravel-payfast
A PayFast Onsite Payments integration for Laravel designed to ease subscription billing. Livewire views are included.
Fund package maintenance!
FintechSystems
Requires
- php: ^8.0
- illuminate/contracts: ^8.37
- livewire/livewire: ^2.8
- moneyphp/money: ^4.0
- payfast/payfast-php-sdk: ^1.1
- spatie/ray: ^1.32
- symfony/dotenv: ^5.3
Requires (Dev)
- nunomaduro/collision: ^5.3
- orchestra/testbench: ^6.20
- phpunit/phpunit: ^8.0|^9.0
- spatie/laravel-ray: ^1.23
- vimeo/psalm: ^4.8
README
Update 17 July 2024
This repo is being archived.
Most of the work here was continued at this repo: https://github.com/eugenefvdm/payfast-onsite-subscriptions
A PayFast Onsite Payments implementation for Laravel designed to ease subscription billing. Livewire views are included.
THIS IS BETA SOFTWARE
- There may be some bugs but the core functionality should work.
Requirements:
- PHP 8.0
- Laravel
- A PayFast account
Installation
Install the package via composer:
composer require fintech-systems/laravel-payfast-onsite
Publish Configuration and Views
Publish the config file with:
php artisan vendor:publish --provider="FintechSystems\Payfast\PayfastServiceProvider" --tag="payfast-config"
Publish the Success and Cancelled views and the Livewire components for subscriptions and receipts.
php artisan vendor:publish --provider="FintechSystems\Payfast\PayfastServiceProvider" --tag="payfast-views"
Nova Integration
Optionally publish Laravel Nova Subscription and Receipts Resources
php artisan vendor:publish --provider="FintechSystems\Payfast\PayfastServiceProvider" --tag="payfast-nova-resource"
Migrations
A migration is needed to create Customers, Orders, Receipts and Subscriptions tables:
php artisan migrate
Example Configuration
config/payfast.php
:
<?php return [ 'merchant_id' => env('PAYFAST_MERCHANT_ID', '10004002'), 'merchant_key' => env('PAYFAST_MERCHANT_KEY', 'q1cd2rdny4a53'), 'passphrase' => env('PAYFAST_PASSPHRASE', 'payfast'), 'testmode' => env('PAYFAST_TESTMODE', true), 'return_url' => env('PAYFAST_RETURN_URL', config('app.url') . '/payfast/success'), 'cancel_url' => env('PAYFAST_CANCEL_URL', config('app.url') . '/payfast/cancel'), 'notify_url' => env('PAYFAST_NOTIFY_URL', config('app.url') . '/payfast/webhook'), 'card_update_link_css' => env('CARD_UPDATE_LINK_CSS', 'inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:border-gray-900 focus:ring focus:ring-gray-300 disabled:opacity-25 transition'), 'card_updated_return_url' => env('CARD_UPDATED_RETURN_URL', config('app.url') . '/user/profile'), 'plans' => [ 3 => [ 'name' => 'Monthly R 99', 'start_date' => \Carbon\Carbon::now()->addDay()->format('Y-m-d'), 'payfast_frequency' => 3, 'initial_amount' => 5.99, 'recurring_amount' => 5.99, ], 6 => [ 'name' => 'Yearly R 1089', 'start_date' => \Carbon\Carbon::now()->format('Y-m-d'), 'payfast_frequency' => 6, 'initial_amount' => 6.89, 'recurring_amount' => 6.89, ] ], 'cancelation_reasons' => [ 'Too expensive', 'Lacks features', 'Not what I expected', ], ];
Livewire Setup
Jetstream
I have modelled some Livewire views to fit into a Laravel Jetstream user profile page.
When calling the Livewire component, you can override any PayFast form field by specifying a mergeFields
array.
Example modification Jetstream Livewire's resources/views/profiles/show.php
:
<!-- Subscriptions --> <div class="mt-10 sm:mt-0"> @livewire('jetstream-subscriptions', ['mergeFields' => [ 'name_first' => $user->name, 'name_last' => $user->name, 'item_description' => 'Subscription to Online Service' ]] ) </div> <x-jet-section-border /> <!-- End Subscriptions --> <!-- Receipts --> <div class="mt-10 sm:mt-0"> @livewire('jetstream-receipts') </div> <x-jet-section-border /> <!-- End Receipts -->
Usage
Examples
- Generate a payment link
- Create an ad-hoc token optionally specifying the amount
- Cancel a subscription
- Update a card
use FintechSystems\Payfast\Facades\Payfast; Route::get('/payment', function() { return Payfast::payment(5,'Order #1'); }); Route::get('/cancel-subscription', function() { return Payfast::cancelSubscription('73d2a218-695e-4bb5-9f62-383e53bef68f'); }); Route::get('/create-subscription', function() { return Payfast::createSubscription( Carbon::now()->addDay()->format('Y-m-d'), 5, // Amount 6 // Frequency (6 = annual, 3 = monthly) ); }); Route::get('/create-adhoc-token', function() { return Payfast::createAdhocToken(5); }); Route::get('/fetch-subscription', function() { return Payfast::fetchSubscription('21189d52-12eb-4108-9c0e-53343c7ac692'); }); Route::get('/update-card', function() { return Payfast::updateCardLink('40ab3194-20f0-4814-8c89-4d2a6b5462ed'); });
Testing
vendor/bin/phpunit
Changelog
Please see CHANGELOG for more information on what has changed recently.
Screenshots
Credits
License
The MIT License (MIT). Please see License File for more information.