PHP code example of rainwaves / paystack-payment
1. Go to this page and download the library: Download rainwaves/paystack-payment library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rainwaves / paystack-payment example snippets
return [
'default' => env('PAYSTACK_PAYMENT_DRIVER', 'paystack'),
'paystack' => [
'secret_key' => env('PAYSTACK_SECRET_KEY', ''),
'public_key' => env('PAYSTACK_PUBLIC_KEY', ''),
'base_url' => env('PAYSTACK_BASE_URL', 'https://api.paystack.co'),
'webhook_secret' => env('PAYSTACK_WEBHOOK_SECRET', env('PAYSTACK_SECRET_KEY', '')),
'callback_url' => env('PAYSTACK_CALLBACK_URL'),
'cancel_url' => env('PAYSTACK_CANCEL_URL'),
'currency' => env('PAYSTACK_CURRENCY', 'ZAR'),
'timeout' => (int) env('PAYSTACK_TIMEOUT', 15),
'retry' => (int) env('PAYSTACK_RETRY', 2),
],
];
use Illuminate\Http\Request;
use rainwaves\PaystackPayment\Contracts\PaymentGatewayInterface;
use rainwaves\PaystackPayment\DTO\CheckoutInitializationData;
use rainwaves\PaystackPayment\DTO\CustomerData;
use rainwaves\PaystackPayment\DTO\PlanData;
use rainwaves\PaystackPayment\DTO\RefundData;
use rainwaves\PaystackPayment\DTO\WebhookPayload;
class PaymentController extends Controller
{
public function __construct(
private readonly PaymentGatewayInterface $payments,
) {}
public function createCustomer(Request $request)
{
return $this->payments->createCustomer(new CustomerData(
email: $request->string('email')->toString(),
firstName: $request->string('first_name')->toString(),
lastName: $request->string('last_name')->toString(),
phone: $request->string('phone')->toString(),
metadata: [
'user_id' => $request->user()?->id,
],
));
}
public function createPlan()
{
return $this->payments->createPlan(new PlanData(
name: 'Gold Plan',
amountInMinor: 9900,
interval: 'monthly',
description: 'Monthly Gold subscription',
));
}
public function singlePayment(Request $request)
{
return $this->payments->initializeCheckout(new CheckoutInitializationData(
reference: (string) str()->uuid(),
email: $request->string('email')->toString(),
amountInMinor: 12550,
callbackUrl: config('paystack.paystack.callback_url'),
metadata: [
'type' => 'single_payment',
'order_id' => $request->integer('order_id'),
],
));
}
public function subscriptionPayment(Request $request)
{
return $this->payments->initializeCheckout(new CheckoutInitializationData(
reference: (string) str()->uuid(),
email: $request->string('email')->toString(),
amountInMinor: 9900,
planCode: 'PLN_xxxxxxxx',
customerCode: 'CUS_xxxxxxxx',
callbackUrl: config('paystack.paystack.callback_url'),
metadata: [
'type' => 'subscription',
'portfolio_id' => $request->integer('portfolio_id'),
],
));
}
public function verifyTransaction(string $reference)
{
return $this->payments->verifyTransaction($reference);
}
public function refund(string $reference)
{
return $this->payments->createRefund(new RefundData(
transactionReference: $reference,
amountInMinor: 9900,
reason: 'Customer requested cancellation',
));
}
public function webhook(Request $request)
{
return $this->payments->verifyWebhook(new WebhookPayload(
rawBody: $request->getContent(),
headers: $request->headers->all(),
payload: $request->all(),
));
}
}
use rainwaves\PaystackPayment\DTO\CheckoutInitializationData;
$checkout = $payments->initializeCheckout(new CheckoutInitializationData(
reference: 'ORDER-1001',
email: '[email protected] ',
amountInMinor: 12550,
metadata: [
'type' => 'single_payment',
'order_id' => 1001,
],
));
return redirect()->away($checkout->checkoutUrl);
use rainwaves\PaystackPayment\DTO\CheckoutInitializationData;
use rainwaves\PaystackPayment\DTO\PlanData;
$plan = $payments->createPlan(new PlanData(
name: 'Premium Monthly',
amountInMinor: 9900,
interval: 'monthly',
));
$checkout = $payments->initializeCheckout(new CheckoutInitializationData(
reference: 'SUB-1001',
email: '[email protected] ',
amountInMinor: 9900,
planCode: $plan->code,
));
$transaction = $payments->verifyTransaction($reference);
if ($transaction->status === 'success' && $transaction->authorizationReusable) {
// save reusable authorization details for future billing
}
$verification = $payments->verifyWebhook(new WebhookPayload(
rawBody: $request->getContent(),
headers: $request->headers->all(),
payload: $request->all(),
));
if (! $verification->isValid) {
abort(401, 'Invalid Paystack webhook signature.');
}
if ($verification->isChargeSuccess()) {
// activate payment locally
}
if ($verification->isSubscriptionCreate()) {
// persist provider subscription details
}
bash
php artisan vendor:publish --provider="rainwaves\\PaystackPayment\\PaystackServiceProvider"