D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
forge
/
dentostock.com
/
app
/
Http
/
Controllers
/
Payment_Methods
/
Filename :
BkashPaymentController.php
back
Copy
<?php namespace App\Http\Controllers\Payment_Methods; use App\Models\PaymentRequest; use App\Models\User; use App\Traits\Processor; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Str; class BkashPaymentController extends Controller { use Processor; private $config_values; private $base_url; private $app_key; private $app_secret; private $username; private $password; private PaymentRequest $payment; private $user; public function __construct(PaymentRequest $payment,User $user) { $config = $this->payment_config('bkash', '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); } if ($config) { $this->app_key = $this->config_values->app_key; $this->app_secret = $this->config_values->app_secret; $this->username = $this->config_values->username; $this->password = $this->config_values->password; $this->base_url = ($config->mode == 'live') ? 'https://tokenized.pay.bka.sh/v1.2.0-beta' : 'https://tokenized.sandbox.bka.sh/v1.2.0-beta'; } $this->payment = $payment; $this->user = $user; } public function getToken() { $post_token = array( 'app_key' => $this->app_key, 'app_secret' => $this->app_secret ); $url = curl_init($this->base_url . '/tokenized/checkout/token/grant'); $post_token_json = json_encode($post_token); $header = array( 'Content-Type:application/json', 'username:' . $this->username, 'password:' . $this->password ); curl_setopt($url, CURLOPT_HTTPHEADER, $header); curl_setopt($url, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($url, CURLOPT_RETURNTRANSFER, true); curl_setopt($url, CURLOPT_POSTFIELDS, $post_token_json); curl_setopt($url, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($url, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); $resultdata = curl_exec($url); curl_close($url); $response = json_decode($resultdata, true); if (array_key_exists('msg', $response)) { return $response; } return $response; } public function make_tokenize_payment(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); } $payer = json_decode($data['payer_information']); $response = self::getToken(); $auth = $response['id_token']; session()->put('token', $auth); $callbackURL = route('bkash.callback', ['payment_id' => $request['payment_id'], 'token' => $auth]); $requestbody = array( 'mode' => '0011', 'amount' => round($data->payment_amount, 2), 'currency' => 'BDT', 'intent' => 'sale', 'payerReference' => !empty($payer->phone) ? $payer->phone : getWebConfig(name: 'company_phone'), 'merchantInvoiceNumber' => 'invoice_' . Str::random('15'), 'callbackURL' => $callbackURL ); $url = curl_init($this->base_url . '/tokenized/checkout/create'); $requestbodyJson = json_encode($requestbody); $header = array( 'Content-Type:application/json', 'Authorization:' . $auth, 'X-APP-Key:' . $this->app_key ); curl_setopt($url, CURLOPT_HTTPHEADER, $header); curl_setopt($url, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($url, CURLOPT_RETURNTRANSFER, true); curl_setopt($url, CURLOPT_POSTFIELDS, $requestbodyJson); curl_setopt($url, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($url, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); $resultdata = curl_exec($url); curl_close($url); $obj = json_decode($resultdata); return redirect()->away($obj->{'bkashURL'}); } public function callback(Request $request) { $paymentID = $_GET['paymentID']; $auth = $_GET['token']; $request_body = array( 'paymentID' => $paymentID ); $url = curl_init($this->base_url . '/tokenized/checkout/execute'); $request_body_json = json_encode($request_body); $header = array( 'Content-Type:application/json', 'Authorization:' . $auth, 'X-APP-Key:' . $this->app_key ); curl_setopt($url, CURLOPT_HTTPHEADER, $header); curl_setopt($url, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($url, CURLOPT_RETURNTRANSFER, true); curl_setopt($url, CURLOPT_POSTFIELDS, $request_body_json); curl_setopt($url, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($url, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); $resultdata = curl_exec($url); curl_close($url); $obj = json_decode($resultdata); if ($obj->statusCode == '0000') { $this->payment::where(['id' => $request['payment_id']])->update([ 'payment_method' => 'bkash', 'is_paid' => 1, 'transaction_id' => $obj->trxID ?? null, ]); $data = $this->payment::where(['id' => $request['payment_id']])->first(); if (isset($data) && function_exists($data->success_hook)) { call_user_func($data->success_hook, $data); } return $this->payment_response($data,'success'); } else { $payment_data = $this->payment::where(['id' => $request['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'); } } }