binkode / laravel-paystack

Welcome to the Laravel Paystack Developer Package which you will use to build amazing payment experiences with the Paystack API.
https://paystack.myckhel.com
MIT License
4 stars 1 forks source link
laravel-paystack laravel-paystack-subscription paystack paystack-api paystack-payment-gateway

laravel-paystack

Use Paystack Apis in your laravel project.

There are other libraries but this was created to solve the issues such as flexibility and ability to call paystack apis in laravel Job scope.

Software License [Travis]() Total Downloads Postman Collection

šŸ“š APIs Documentation

šŸ“š Paystack Doc

šŸŒ Demo App

Install

composer require binkode/laravel-paystack

Setup

The package will automatically register a service provider.

You need to publish the configuration file:

php artisan vendor:publish --provider="Binkode\Paystack\PaystackServiceProvider"

Publish config

This is the default content of the config file paystack.php:

<?php

return [
    "public_key"    => env("PAYSTACK_PUBLIC_KEY"),
    "secret_key"    => env("PAYSTACK_SECRET_KEY"),
    "url"           => env("PAYSTACK_URL", 'https://api.paystack.co'),
    "merchant_email"           => env("PAYSTACK_MERCHANT_EMAIL"),

    "route" => [
        "middleware"        => ["paystack_route_disabled", "api"], // For injecting middleware to the package's routes
        "prefix"            => "api", // For injecting middleware to the package's routes
        "hook_middleware"   => ["validate_paystack_hook", "api"]
    ],
];

Update env

Update Your Projects .env with their credentials:

PAYSTACK_PUBLIC_KEY=XXXXXXXXXXXXXXXXXXXX
PAYSTACK_SECRET_KEY=XXXXXXXXXXXXXXXXXXXX
PAYSTACK_URL=https://api.paystack.co
PAYSTACK_MERCHANT_EMAIL=username@email.extension

Usage

Transaction

use Binkode\Paystack\Support\Transaction;

Transaction::list($params);

Transaction::initialize($params);

Transaction::verify($reference, $params);

Transaction::fetch($transaction, $params);

Transaction::charge_authorization($params);

Transaction::check_authorization($params);

Transaction::viewTimeline($id_or_reference, $params);

Transaction::totals($params);

Transaction::export($params);

Transaction::partial_debit($params);

Transaction Split

use Binkode\Paystack\Support\Split;

Split::create($params);

Split::list($params);

Split::fetch($split, $params);

Split::update($split, $params);

Split::add($split, $params);

Split::remove($split, $params);

Apple Pay

use Binkode\Paystack\Support\ApplePay;

ApplePay::createDomain($params);

ApplePay::listDomains($params);

ApplePay::removeDomain($params);

Subaccounts

use Binkode\Paystack\Support\SubAccount;

SubAccount::create($params);

SubAccount::list($params);

SubAccount::fetch($subaccount, $params);

SubAccount::update($subaccount, $params);

Customer

use Binkode\Paystack\Support\Customer;

Customer::create($params);

Customer::list($params);

Customer::fetch($customer, $params);

Customer::update($customer, $params);

Customer::identification($customer, $params);

Customer::set_risk_action($customer, $params);

Customer::deactivate_authorization($params);

Dedicated Virtual Accounts

use Binkode\Paystack\Support\DedicatedVirtualAccount;

DedicatedVirtualAccount::create($params);

DedicatedVirtualAccount::list($params);

DedicatedVirtualAccount::fetch($dedicated_account, $params);

DedicatedVirtualAccount::remove($dedicated_account, $params);

DedicatedVirtualAccount::split($params);

DedicatedVirtualAccount::removeSplit($params);

DedicatedVirtualAccount::providers($params);

Plans

use Binkode\Paystack\Support\Plan;

Plan::create($params);

Plan::list($params);

Plan::fetch($plan, $params);

Plan::update($plan, $params);

Subscriptions

use Binkode\Paystack\Support\Subscription;

Subscription::create($params);

Subscription::list($params);

Subscription::fetch($plan, $params);

Subscription::enable($params);

Subscription::disable($params);

Subscription::link($code, $params);

Subscription::sendUpdateSubscription($code, $params);

Products

use Binkode\Paystack\Support\Product;

Product::create($params);

Product::list($params);

Product::fetch($product, $params);

Product::update($product, $params);

Payment Pages

use Binkode\Paystack\Support\Page;

Page::create($params);

Page::list($params);

Page::fetch($page, $params);

Page::update($page, $params);

Page::checkSlug($slug, $params);

Page::addProduct($page, $params);

Invoices

use Binkode\Paystack\Support\Invoice;

Invoice::create($params);

Invoice::list($params);

Invoice::fetch($invoice, $params);

Invoice::update($invoice, $params);

Invoice::verify($code, $params);

Invoice::notify($code, $params);

Invoice::totals($params);

Invoice::finalize($code, $params);

Invoice::archive($code, $params);

Settlements

use Binkode\Paystack\Support\Settlement;

Settlement::list($params);

Settlement::transactions($settlement, $params);

Transfer Recipients

use Binkode\Paystack\Support\Recipient;

Recipient::create($params);

Recipient::bulkCreate($params);

Recipient::list($params);

Recipient::fetch($recipient, $params);

Recipient::update($recipient, $params);

Recipient::remove($recipient, $params);

Transfers

use Binkode\Paystack\Support\Transfer;

Transfer::initiate($params);

Transfer::finalize($params);

Transfer::bulkCreate($params);

Transfer::list($params);

Transfer::fetch($transfer, $params);

Transfer::fetch($reference, $params);

Transfers Control

use Binkode\Paystack\Support\TransferControl;

TransferControl::balance($params);

TransferControl::balanceLedger($params);

TransferControl::resendTransfersOTP($params);

TransferControl::disableTransfersOTP($params);

TransferControl::finalizeDisableOTP($params);

TransferControl::enableTransfersOTP($params);

Bulk Charges

use Binkode\Paystack\Support\BulkCharge;

BulkCharge::initiate($params);

BulkCharge::list($params);

BulkCharge::fetch($bulkcharge, $params);

BulkCharge::fetchChargesBatch($bulkcharge, $params);

BulkCharge::pauseChargesBatch($bulkcharge, $params);

BulkCharge::resumeChargesBatch($bulkcharge, $params);

Control Panel

use Binkode\Paystack\Support\ControlPanel;

ControlPanel::fetchPaymentSessionTimeout($params);

ControlPanel::updatePaymentSessionTimeout($params);

Charge

use Binkode\Paystack\Support\Charge;

Charge::create($params);

Charge::submitPin($params);

Charge::submitOtp($params);

Charge::submitPhone($params);

Charge::submitBirthday($params);

Charge::submitAddress($params);

Charge::checkPending($reference, $params);

Disputes

use Binkode\Paystack\Support\Dispute;

Dispute::list($params);

Dispute::fetch($dispute, $params);

Dispute::listTransaction($dispute, $params);

Dispute::update($dispute, $params);

Dispute::addEvidence($dispute, $params);

Dispute::getUploadURL($dispute, $params);

Dispute::resolve($dispute, $params);

Dispute::export($params);

Refunds

use Binkode\Paystack\Support\Refund;

Refund::create($params);

Refund::list($params);

Refund::fetch($refund, $params);

Verification

use Binkode\Paystack\Support\Verification;

Verification::resolve($params);

Verification::validateAccount($params);

Verification::resolveCardBIN($bin, $params);

Miscellaneous

use Binkode\Paystack\Support\Miscellaneous;

Miscellaneous::listBanks($params);

Miscellaneous::listProviders($params);

Miscellaneous::listCountries($params);

Miscellaneous::listStates($params);

Using WebHook route

Laravel paystack provides you a predefined endpoint that listens to and validates incoming paystack's webhook events. It emits Binkode\Paystack\Events\Hook on every incoming hooks which could be listened to. The hook request is validated with validate_paystack_hook middleware by using the paystack's config secret_key against the incoming request.

Setup Paystack Webhook

Check official page to read more about paystack webhook laravel-paystack exposes hooks api endpoint use the enddpoints url to for the paystack webhook url during the setup.

| POST      | /hooks                                |               | Binkode\Paystack\Http\Controllers\HookController@hook              | api            |

Listening to laravel-paystack Hook event

You may start listening to incoming paystack webhooks after setup by registering the event in your laravel project's EventServiceProvider file.

namespace App\Listeners;

use Binkode\Paystack\Events\Hook; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Log;

class PaystackWebHookListener { /**

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Event;

use Binkode\Paystack\Events\Hook; use App\Listeners\PaystackWebHookListener;

class EventServiceProvider extends ServiceProvider { /**

Using built in routes

Enable the in built routes by removing paystack_route_disabled middleware from paystack's route config.

POST            apple-pay/domain .............. Binkode\Paystack\Http\Controllers\ApplePayController@createDomain
GET|HEAD        apple-pay/domain ............... Binkode\Paystack\Http\Controllers\ApplePayController@listDomains
DELETE          apple-pay/domain .............. Binkode\Paystack\Http\Controllers\ApplePayController@removeDomain
GET|HEAD        balance ..................... Binkode\Paystack\Http\Controllers\TransferControlController@balance
GET|HEAD        balance/ledger ........ Binkode\Paystack\Http\Controllers\TransferControlController@balanceLedger
GET|HEAD        bank ........................ Binkode\Paystack\Http\Controllers\MiscellaneousController@listBanks
GET|HEAD        bank/resolve ................... Binkode\Paystack\Http\Controllers\VerificationController@resolve
POST            bank/validate .......... Binkode\Paystack\Http\Controllers\VerificationController@validateAccount
GET|HEAD        banks ................... Binkode\Paystack\Http\Controllers\MiscellaneousController@listProviders
POST            bulkcharge ...................... Binkode\Paystack\Http\Controllers\BulkChargeController@initiate
GET|HEAD        bulkcharge .......................... Binkode\Paystack\Http\Controllers\BulkChargeController@list
GET|HEAD        bulkcharge/pause/{bulkcharge} Binkode\Paystack\Http\Controllers\BulkChargeController@pauseChargeā€¦
GET|HEAD        bulkcharge/resume/{bulkcharge} Binkode\Paystack\Http\Controllers\BulkChargeController@resumeCharā€¦
GET|HEAD        bulkcharge/{bulkcharge} ............ Binkode\Paystack\Http\Controllers\BulkChargeController@fetch
GET|HEAD        bulkcharge/{bulkcharge}/charges Binkode\Paystack\Http\Controllers\BulkChargeController@fetchCharā€¦
POST            charge ................................ Binkode\Paystack\Http\Controllers\ChargeController@create
POST            charge/submit_address .......... Binkode\Paystack\Http\Controllers\ChargeController@submitAddress
POST            charge/submit_birthday ........ Binkode\Paystack\Http\Controllers\ChargeController@submitBirthday
POST            charge/submit_otp .................. Binkode\Paystack\Http\Controllers\ChargeController@submitOtp
POST            charge/submit_phone .............. Binkode\Paystack\Http\Controllers\ChargeController@submitPhone
POST            charge/submit_pin .................. Binkode\Paystack\Http\Controllers\ChargeController@submitPin
GET|HEAD        charge/{reference} .............. Binkode\Paystack\Http\Controllers\ChargeController@checkPending
GET|HEAD        country ................. Binkode\Paystack\Http\Controllers\MiscellaneousController@listCountries
POST            customer ............................ Binkode\Paystack\Http\Controllers\CustomerController@create
GET|HEAD        customer .............................. Binkode\Paystack\Http\Controllers\CustomerController@list
POST            customer/deactivate_authorization Binkode\Paystack\Http\Controllers\CustomerController@deactivatā€¦
POST            customer/set_risk_action ... Binkode\Paystack\Http\Controllers\CustomerController@set_risk_action
GET|HEAD        customer/{customer} .................. Binkode\Paystack\Http\Controllers\CustomerController@fetch
PUT             customer/{customer} ................. Binkode\Paystack\Http\Controllers\CustomerController@update
POST            customer/{customer}/identification Binkode\Paystack\Http\Controllers\CustomerController@identifiā€¦
GET|HEAD        decision/bin/{bin} ...... Binkode\Paystack\Http\Controllers\VerificationController@resolveCardBIN
POST            dedicated_account .... Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountController@create
GET|HEAD        dedicated_account ...... Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountController@list
GET|HEAD        dedicated_account/available_providers Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountCā€¦
POST            dedicated_account/split Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountController@split
DELETE          dedicated_account/split Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountController@remoā€¦
GET|HEAD        dedicated_account/{dedicated_account} Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountCā€¦
DELETE          dedicated_account/{dedicated_account} Binkode\Paystack\Http\Controllers\DedicatedVirtualAccountCā€¦
GET|HEAD        dispute ................................ Binkode\Paystack\Http\Controllers\DisputeController@list
GET|HEAD        dispute/transaction/{dispute} Binkode\Paystack\Http\Controllers\DisputeController@listTransaction
GET|HEAD        dispute/{dispute} ..................... Binkode\Paystack\Http\Controllers\DisputeController@fetch
PUT             dispute/{dispute} .................... Binkode\Paystack\Http\Controllers\DisputeController@update
POST            dispute/{dispute}/evidence ...... Binkode\Paystack\Http\Controllers\DisputeController@addEvidence
GET|HEAD        dispute/{dispute}/export ............. Binkode\Paystack\Http\Controllers\DisputeController@export
PUT             dispute/{dispute}/resolve ........... Binkode\Paystack\Http\Controllers\DisputeController@resolve
GET|HEAD        dispute/{dispute}/upload_url ... Binkode\Paystack\Http\Controllers\DisputeController@getUploadURL
POST            hooks ..................................... Binkode\Paystack\Http\Controllers\HookController@hook
GET|HEAD        integration/payment_session_timeout Binkode\Paystack\Http\Controllers\ControlPanelController@fetā€¦
PUT             integration/payment_session_timeout Binkode\Paystack\Http\Controllers\ControlPanelController@updā€¦
POST            page .................................... Binkode\Paystack\Http\Controllers\PageController@create
GET|HEAD        page ...................................... Binkode\Paystack\Http\Controllers\PageController@list
GET|HEAD        page/check_slug_availability/{slug} .. Binkode\Paystack\Http\Controllers\PageController@checkSlug
GET|HEAD        page/{page} .............................. Binkode\Paystack\Http\Controllers\PageController@fetch
PUT             page/{page} ............................. Binkode\Paystack\Http\Controllers\PageController@update
POST            page/{page}/product ................. Binkode\Paystack\Http\Controllers\PageController@addProduct
POST            paymentrequest ....................... Binkode\Paystack\Http\Controllers\InvoiceController@create
GET|HEAD        paymentrequest ......................... Binkode\Paystack\Http\Controllers\InvoiceController@list
POST            paymentrequest/archive/{invoice_code} Binkode\Paystack\Http\Controllers\InvoiceController@archive
POST            paymentrequest/finalize/{invoice_code} Binkode\Paystack\Http\Controllers\InvoiceController@finalā€¦
POST            paymentrequest/notify/{invoice_code} . Binkode\Paystack\Http\Controllers\InvoiceController@notify
GET|HEAD        paymentrequest/totals ................ Binkode\Paystack\Http\Controllers\InvoiceController@totals
GET|HEAD        paymentrequest/verify/{invoice_code} . Binkode\Paystack\Http\Controllers\InvoiceController@verify
GET|HEAD        paymentrequest/{invoice} .............. Binkode\Paystack\Http\Controllers\InvoiceController@fetch
PUT             paymentrequest/{invoice} ............. Binkode\Paystack\Http\Controllers\InvoiceController@update
POST            plan .................................... Binkode\Paystack\Http\Controllers\PlanController@create
GET|HEAD        plan ...................................... Binkode\Paystack\Http\Controllers\PlanController@list
GET|HEAD        plan/{plan} .............................. Binkode\Paystack\Http\Controllers\PlanController@fetch
PUT             plan/{plan} ............................. Binkode\Paystack\Http\Controllers\PlanController@update
POST            product .............................. Binkode\Paystack\Http\Controllers\ProductController@create
GET|HEAD        product ................................ Binkode\Paystack\Http\Controllers\ProductController@list
GET|HEAD        product/{product} ..................... Binkode\Paystack\Http\Controllers\ProductController@fetch
PUT             product/{product} .................... Binkode\Paystack\Http\Controllers\ProductController@update
POST            refund ................................ Binkode\Paystack\Http\Controllers\RefundController@create
GET|HEAD        refund .................................. Binkode\Paystack\Http\Controllers\RefundController@list
GET|HEAD        refund/{refund} ........................ Binkode\Paystack\Http\Controllers\RefundController@fetch
GET|HEAD        settlement .......................... Binkode\Paystack\Http\Controllers\SettlementController@list
GET|HEAD        settlement/{settlement}/transactions Binkode\Paystack\Http\Controllers\SettlementController@tranā€¦
POST            split .................................. Binkode\Paystack\Http\Controllers\SplitController@create
GET|HEAD        split .................................... Binkode\Paystack\Http\Controllers\SplitController@list
GET|HEAD        split/{split} ........................... Binkode\Paystack\Http\Controllers\SplitController@fetch
PUT             split/{split} .......................... Binkode\Paystack\Http\Controllers\SplitController@update
POST            split/{split}/subaccount/add .............. Binkode\Paystack\Http\Controllers\SplitController@add
POST            split/{split}/subaccount/remove ........ Binkode\Paystack\Http\Controllers\SplitController@remove
POST            subaccount ........................ Binkode\Paystack\Http\Controllers\SubAccountController@create
GET|HEAD        subaccount .......................... Binkode\Paystack\Http\Controllers\SubAccountController@list
GET|HEAD        subaccount/{subaccount} ............ Binkode\Paystack\Http\Controllers\SubAccountController@fetch
PUT             subaccount/{subaccount} ........... Binkode\Paystack\Http\Controllers\SubAccountController@update
POST            subscription .................... Binkode\Paystack\Http\Controllers\SubscriptionController@create
GET|HEAD        subscription ...................... Binkode\Paystack\Http\Controllers\SubscriptionController@list
POST            subscription/disable ........... Binkode\Paystack\Http\Controllers\SubscriptionController@disable
POST            subscription/enable ............. Binkode\Paystack\Http\Controllers\SubscriptionController@enable
POST            subscription/{code}/manage/email Binkode\Paystack\Http\Controllers\SubscriptionController@sendUpā€¦
GET|HEAD        subscription/{code}/manage/link ... Binkode\Paystack\Http\Controllers\SubscriptionController@link
GET|HEAD        subscription/{subscription} ...... Binkode\Paystack\Http\Controllers\SubscriptionController@fetch
GET|HEAD        transaction ........................ Binkode\Paystack\Http\Controllers\TransactionController@list
POST            transaction/charge_authorization Binkode\Paystack\Http\Controllers\TransactionController@charge_ā€¦
POST            transaction/check_authorization Binkode\Paystack\Http\Controllers\TransactionController@check_auā€¦
GET|HEAD        transaction/export ............... Binkode\Paystack\Http\Controllers\TransactionController@export
POST            transaction/initialize ....... Binkode\Paystack\Http\Controllers\TransactionController@initialize
POST            transaction/partial_debit . Binkode\Paystack\Http\Controllers\TransactionController@partial_debit
GET|HEAD        transaction/timeline/{id_or_reference} Binkode\Paystack\Http\Controllers\TransactionController@vā€¦
GET|HEAD        transaction/totals ............... Binkode\Paystack\Http\Controllers\TransactionController@totals
GET|HEAD        transaction/verify/{reference} ... Binkode\Paystack\Http\Controllers\TransactionController@verify
GET|HEAD        transaction/{transaction} ......... Binkode\Paystack\Http\Controllers\TransactionController@fetch
POST            transfer .......................... Binkode\Paystack\Http\Controllers\TransferController@initiate
GET|HEAD        transfer .............................. Binkode\Paystack\Http\Controllers\TransferController@list
POST            transfer/bulk ................... Binkode\Paystack\Http\Controllers\TransferController@bulkCreate
POST            transfer/disable_otp Binkode\Paystack\Http\Controllers\TransferControlController@disableTransferā€¦
POST            transfer/disable_otp_finalize Binkode\Paystack\Http\Controllers\TransferControlController@finaliā€¦
POST            transfer/enable_otp Binkode\Paystack\Http\Controllers\TransferControlController@enableTransfersOā€¦
POST            transfer/finalize_transfer ........ Binkode\Paystack\Http\Controllers\TransferController@finalize
POST            transfer/resend_otp Binkode\Paystack\Http\Controllers\TransferControlController@resendTransfersOā€¦
GET|HEAD        transfer/verify/{reference} ......... Binkode\Paystack\Http\Controllers\TransferController@verify
GET|HEAD        transfer/{transfer} .................. Binkode\Paystack\Http\Controllers\TransferController@fetch
POST            transferrecipient .................. Binkode\Paystack\Http\Controllers\RecipientController@create
GET|HEAD        transferrecipient .................... Binkode\Paystack\Http\Controllers\RecipientController@list
POST            transferrecipient/bulk ......... Binkode\Paystack\Http\Controllers\RecipientController@bulkCreate
GET|HEAD        transferrecipient/{transferrecipient} Binkode\Paystack\Http\Controllers\RecipientController@fetch
PUT             transferrecipient/{transferrecipient} Binkode\Paystack\Http\Controllers\RecipientController@updaā€¦
DELETE          transferrecipient/{transferrecipient} Binkode\Paystack\Http\Controllers\RecipientController@remoā€¦

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

Security

If you discover any security-related issues, please email binkode1@hotmail.com instead of using the issue tracker.

License

The MIT License (MIT). Please see License File for more information.