1. Go to this page and download the library: Download fiachehr/laravel-pardakht 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/ */
use Fiachehr\Pardakht\Facades\Pardakht;
use Fiachehr\Pardakht\ValueObjects\PaymentRequest;
public function payment()
{
// Create payment request
$paymentRequest = new PaymentRequest(
amount: 100000, // Amount in Rials
orderId: 'ORDER-12345', // Order ID
callbackUrl: route('payment.callback'),
description: 'Order payment #12345',
mobile: '09123456789', // Optional
email: '[email protected]', // Optional
metadata: [ // Optional
'user_id' => auth()->id(),
'product_id' => 5
]
);
try {
// Send request to default gateway
$response = Pardakht::request($paymentRequest);
// Or use specific gateway
// $response = Pardakht::request($paymentRequest, 'zarinpal');
if ($response->isSuccessful()) {
// Store tracking code in session
session(['payment_tracking_code' => $response->trackingCode]);
// Redirect user to payment gateway
return redirect($response->getPaymentUrl());
}
} catch (\Fiachehr\Pardakht\Exceptions\GatewayException $e) {
// Handle error
\Log::error('Payment request failed', [
'gateway' => $e->getGatewayName(),
'message' => $e->getMessage(),
'code' => $e->getGatewayCode()
]);
return back()->with('error', 'Payment request failed: ' . $e->getMessage());
}
}
use Fiachehr\Pardakht\Facades\Pardakht;
use Fiachehr\Pardakht\ValueObjects\VerificationRequest;
use Illuminate\Http\Request;
public function callback(Request $request)
{
// Get tracking code from session
$trackingCode = session('payment_tracking_code');
if (!$trackingCode) {
return redirect()->route('payment.failed')
->with('error', 'Payment information not found');
}
// Create verification request
$verificationRequest = new VerificationRequest(
trackingCode: $trackingCode,
gatewayData: $request->all() // All data returned from gateway
);
try {
// Verify payment
$response = Pardakht::verify($verificationRequest);
// Or specify gateway
// $response = Pardakht::verify($verificationRequest, 'mellat');
if ($response->isSuccessful()) {
// Payment successful - perform
'code' => $e->getGatewayCode()
]);
return view('payment.failed', [
'message' => $e->getMessage(),
'code' => $e->getGatewayCode(),
]);
}
}
// Get list of available gateways
$gateways = Pardakht::available();
// ['mellat', 'mabna', 'zarinpal']
// Get specific gateway instance
$mellatGateway = Pardakht::gateway('mellat');
$zarinpalGateway = Pardakht::gateway('zarinpal');
// Use gateway directly
$response = $mellatGateway->request($paymentRequest);
use Fiachehr\Pardakht\Contracts\TransactionRepositoryInterface;
class PaymentController extends Controller
{
public function __construct(
protected TransactionRepositoryInterface $transactionRepository
) {}
public function history()
{
// Get successful transactions
$successful = $this->transactionRepository->getSuccessful();
// Get failed transactions
$failed = $this->transactionRepository->getFailed();
// Find by tracking code
$transaction = $this->transactionRepository->findByTrackingCode($trackingCode);
// Find by order ID
$transaction = $this->transactionRepository->findByOrderId($orderId);
}
}
use Fiachehr\Pardakht\Models\Transaction;
// Get successful transactions for specific gateway
$transactions = Transaction::gateway('mellat')
->successful()
->latest()
->get();
// Get pending transactions
$pending = Transaction::pending()->get();
// Filter by date
$transactions = Transaction::whereDate('created_at', today())
->successful()
->get();
// Check transaction status
$transaction = Transaction::find(1);
if ($transaction->isSuccessful()) {
// Transaction was successful
}
use Fiachehr\Pardakht\Facades\Pardakht;
use Fiachehr\Pardakht\Gateways\AbstractGateway;
class CustomGateway extends AbstractGateway
{
public function getName(): string
{
return 'custom';
}
public function request(PaymentRequest $request): PaymentResponse
{
// Implement payment request
}
public function verify(VerificationRequest $request): VerificationResponse
{
// Implement payment verification
}
protected function validateConfig(): void
{
// Validate configuration
}
}
// Register custom gateway
Pardakht::extend('custom', CustomGateway::class);
// Method 1: Change default gateway in .env
PARDAKHT_DEFAULT_GATEWAY=zarinpal
// Method 2: Specify gateway at runtime
Pardakht::request($paymentRequest, 'zarinpal');
// In config/pardakht.php
'store_transactions' => false,