%PDF- %GIF98; %PNG;
Server : ApacheSystem : Linux host.digitalbabaji.in 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64 User : addictionfreeind ( 1003) PHP Version : 7.2.34 Disable Function : exec,passthru,shell_exec,system Directory : /home/addictionfreeind/public_html/admin1/app/Http/Controllers/Payment/ |
Upload File : |
<?php
namespace App\Http\Controllers\Payment;
use Illuminate\Support\Facades\Config;
use Log;
use App\Helper\Reply;
use App\Models\Order;
use App\Models\Invoice;
use Illuminate\Http\Request;
use App\Traits\MakePaymentTrait;
use App\Http\Controllers\Controller;
use App\Traits\MakeOrderInvoiceTrait;
use Unicodeveloper\Paystack\Paystack;
use GuzzleHttp\Exception\ClientException;
use App\Traits\PaymentGatewayTrait;
class PaystackController extends Controller
{
use MakePaymentTrait, MakeOrderInvoiceTrait, PaymentGatewayTrait;
public function __construct()
{
parent::__construct();
$this->pageTitle = __('app.paystack');
}
public function paymentWithPaystackPublic(Request $request, $id, $companyHash)
{
$this->paystackSet($companyHash);
$request->validate([
'name' => 'required|string',
'email' => 'required|email',
]);
$paystack = new Paystack();
switch ($request->type) {
case 'invoice':
$invoice = Invoice::findOrFail($id);
$request->orderID = $invoice->id;
$request->metadata = [
'invoice_number' => $invoice->invoice_number,
'payment_type' => $request->type
];
$request->amount = ($invoice->amountDue() * 100);
$request->currency = $invoice->currency ? $invoice->currency->currency_code : 'ZAR';
$request->callback_url = route('paystack.callback', [$id, 'invoice', $invoice->company->hash]);
break;
case 'order':
$order = Order::findOrFail($id);
$request->orderID = $order->id;
$request->metadata = [
'order_number' => $order->order_number,
'payment_type' => $request->type
];
$request->amount = ($order->total * 100);
$request->currency = $order->currency ? $order->currency->currency_code : 'ZAR';
$request->callback_url = route('paystack.callback', [$id, 'order', $order->company->hash]);
break;
default:
return Reply::error(__('messages.paymentTypeNotFound'));
}
$request->first_name = $request->name;
$request->quantity = 1;
$request->reference = $paystack->genTranxRef();
try {
/** @phpstan-ignore-next-line */
return Reply::redirect($paystack->getAuthorizationUrl()->url);
} catch (ClientException $e) {
return Reply::error(json_decode($e->getResponse()->getBody(), true)['message']);
} catch (\Throwable $th) {
return Reply::error($th->getMessage());
}
}
public function handleGatewayCallback($id, $type, $companyHash)
{
$this->paystackSet($companyHash);
$paystack = new Paystack();
$paymentDetails = $paystack->getPaymentData();
switch ($type) {
case 'invoice':
$invoice = Invoice::findOrFail($id);
$invoice->status = ($paymentDetails['data']['status'] == 'success') ? 'paid' : 'unpaid';
$invoice->save();
$this->makePayment('Paystack', ($paymentDetails['data']['amount'] / 100), $invoice, $paymentDetails['data']['reference'], (($paymentDetails['data']['status'] == 'success') ? 'complete' : 'failed'));
return redirect(route('front.invoice', $invoice->hash));
case 'order':
$order = Order::findOrFail($id);
$invoice = $this->makeOrderInvoice($order, (($paymentDetails['data']['status'] == 'success') ? 'completed' : 'failed'));
$this->makePayment('Paystack', ($paymentDetails['data']['amount'] / 100), $invoice, $paymentDetails['data']['reference'], (($paymentDetails['data']['status'] == 'success') ? 'complete' : 'failed'));
return redirect()->route('orders.show', $id);
default:
return redirect()->route('dashboard');
}
}
public function handleGatewayWebhook(Request $request)
{
$paymentDetails = $request->toArray();
switch ($paymentDetails['data']['metadata']['payment_type']) {
case 'invoice':
$invoice = Invoice::findOrFail($paymentDetails['data']['metadata']['id']);
$invoice->status = ($paymentDetails['data']['status'] == 'success') ? 'paid' : 'unpaid';
$invoice->save();
$this->makePayment('Paystack', ($paymentDetails['data']['amount'] / 100), $invoice, $paymentDetails['data']['reference'], (($paymentDetails['data']['status'] == 'success') ? 'complete' : 'failed'));
break;
case 'order':
$order = Order::findOrFail($paymentDetails['data']['metadata']['id']);
$invoice = $this->makeOrderInvoice($order, (($paymentDetails['data']['status'] == 'success') ? 'completed' : 'failed'));
$this->makePayment('Paystack', ($paymentDetails['data']['amount'] / 100), $invoice, $paymentDetails['data']['reference'], (($paymentDetails['data']['status'] == 'success') ? 'complete' : 'failed'));
break;
default:
break;
}
return response()->json(['status' => 'success']);
}
}