D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
forge
/
mbpharmacy.ghanempharmacy.com
/
app
/
Http
/
Controllers
/
Filename :
PaymobController.php
back
Copy
<?php namespace App\Http\Controllers; use App\Models\PaymentRequest; use App\User; use App\Traits\Processor; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Validator; class PaymobController extends Controller { use Processor; private $config_values; private PaymentRequest $payment; private $user; public function __construct(PaymentRequest $payment, User $user) { $config = $this->payment_config('paymob_accept', 'payment_config'); if (!is_null($config) && $config->mode == 'live') { $this->config_values = json_decode($config->live_values); } elseif (!is_null($config) && $config->mode == 'test') { $this->config_values = json_decode($config->test_values); } $this->payment = $payment; $this->user = $user; } protected function cURL($url, $json) { // Create curl resource $ch = curl_init($url); // Request headers $headers = array(); $headers[] = 'Content-Type: application/json'; // Return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // $output contains the output string $output = curl_exec($ch); // Close curl resource to free up system resources curl_close($ch); return json_decode($output); } protected function GETcURL($url) { // Create curl resource $ch = curl_init($url); // Request headers $headers = array(); $headers[] = 'Content-Type: application/json'; // Return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // $output contains the output string $output = curl_exec($ch); // Close curl resource to free up system resources curl_close($ch); return json_decode($output); } public function credit(Request $request) { $validator = Validator::make($request->all(), [ 'payment_id' => 'required|uuid' ]); if ($validator->fails()) { return response()->json($this->response_formatter(GATEWAYS_DEFAULT_400, null, $this->error_processor($validator)), 400); } $data = $this->payment::where(['id' => $request['payment_id']])->where(['is_paid' => 0])->first(); if (!isset($data)) { return response()->json($this->response_formatter(GATEWAYS_DEFAULT_204), 200); } session()->put('payment_id', $data->id); if ($data['additional_data'] != null) { $business = json_decode($data['additional_data']); $business_name = $business->business_name ?? "my_business"; } else { $business_name = "my_business"; } $payer = json_decode($data['payer_information']); try { $token = $this->getToken(); $order = $this->createOrder($token, $data, $business_name); $paymentToken = $this->getPaymentToken($order, $token, $data, $payer); } catch (\Exception $exception) { return response()->json($this->response_formatter(GATEWAYS_DEFAULT_404), 200); } return Redirect::away('https://accept.paymobsolutions.com/api/acceptance/iframes/' . $this->config_values->iframe_id . '?payment_token=' . $paymentToken); } public function getToken() { $response = $this->cURL( 'https://accept.paymob.com/api/auth/tokens', ['api_key' => $this->config_values->api_key] ); return $response->token; } public function createOrder($token, $payment_data, $business_name) { $items[] = [ 'name' => $business_name, 'amount_cents' => round($payment_data->payment_amount * 100), 'description' => 'payment ID :' . $payment_data->id, 'quantity' => 1 ]; $data = [ "auth_token" => $token, "delivery_needed" => "false", "amount_cents" => round($payment_data->payment_amount * 100), "currency" => $payment_data->currency_code, "items" => $items, ]; $response = $this->cURL( 'https://accept.paymob.com/api/ecommerce/orders', $data ); return $response; } public function getPaymentToken($order, $token, $payment_data, $payer) { $value = $payment_data->payment_amount; $billingData = [ "apartment" => "N/A", "email" => $payer->email, "floor" => "N/A", "first_name" => $payer->name, "street" => "N/A", "building" => "N/A", "phone_number" => $payer->phone ?? "N/A", "shipping_method" => "PKG", "postal_code" => "N/A", "city" => "N/A", "country" => "N/A", "last_name" => $payer->name, "state" => "N/A", ]; $data = [ "auth_token" => $token, "amount_cents" => round($value * 100), "expiration" => 3600, "order_id" => $order->id, "billing_data" => $billingData, "currency" => $payment_data->currency_code, "integration_id" => $this->config_values->integration_id ]; $response = $this->cURL( 'https://accept.paymob.com/api/acceptance/payment_keys', $data ); return $response->token; } public function callback(Request $request) { $data = $request->all(); ksort($data); $hmac = $data['hmac']; $array = [ 'amount_cents', 'created_at', 'currency', 'error_occured', 'has_parent_transaction', 'id', 'integration_id', 'is_3d_secure', 'is_auth', 'is_capture', 'is_refunded', 'is_standalone_payment', 'is_voided', 'order', 'owner', 'pending', 'source_data_pan', 'source_data_sub_type', 'source_data_type', 'success', ]; $connectedString = ''; foreach ($data as $key => $element) { if (in_array($key, $array)) { $connectedString .= $element; } } $secret = $this->config_values->hmac; $hased = hash_hmac('sha512', $connectedString, $secret); if ($hased == $hmac && $data['success'] === "true") { $this->payment::where(['id' => session('payment_id')])->update([ 'payment_method' => 'paymob_accept', 'is_paid' => 1, 'transaction_id' => session('payment_id'), ]); $payment_data = $this->payment::where(['id' => session('payment_id')])->first(); if (isset($payment_data) && function_exists($payment_data->success_hook)) { call_user_func($payment_data->success_hook, $payment_data); } return $this->payment_response($payment_data,'success'); } $payment_data = $this->payment::where(['id' => session('payment_id')])->first(); if (isset($payment_data) && function_exists($payment_data->failure_hook)) { call_user_func($payment_data->failure_hook, $payment_data); } return $this->payment_response($payment_data,'fail'); } }