ok
Direktori : /home2/selectio/www/ecommerce-website/website/app/Http/Controllers/ |
Current File : /home2/selectio/www/ecommerce-website/website/app/Http/Controllers/BkashPaymentController.php |
<?php namespace App\Http\Controllers; use App\CPU\CartManager; use App\CPU\Convert; use App\CPU\Helpers; use App\CPU\OrderManager; use Brian2694\Toastr\Facades\Toastr; use Illuminate\Http\Request; use Illuminate\Support\Str; class BkashPaymentController extends Controller { private $base_url; private $app_key; private $app_secret; private $username; private $password; public function __construct() { $config=\App\CPU\Helpers::get_business_settings('bkash'); // You can import it from your Database $bkash_app_key = $config['api_key']; // bKash Merchant API APP KEY $bkash_app_secret = $config['api_secret']; // bKash Merchant API APP SECRET $bkash_username = $config['username']; // bKash Merchant API USERNAME $bkash_password = $config['password']; // bKash Merchant API PASSWORD $bkash_base_url = ($config['environment'] == 'live') ? 'https://tokenized.pay.bka.sh/v1.2.0-beta' : 'https://tokenized.sandbox.bka.sh/v1.2.0-beta'; $this->app_key = $bkash_app_key; $this->app_secret = $bkash_app_secret; $this->username = $bkash_username; $this->password = $bkash_password; $this->base_url = $bkash_base_url; } public function getToken() { session()->forget('bkash_token'); $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_encode($post_token); $header = array( 'Content-Type:application/json', "password:$this->password", "username:$this->username" ); 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); curl_setopt($url, CURLOPT_FOLLOWLOCATION, 1); $resultdata = curl_exec($url); curl_close($url); $response = json_decode($resultdata, true); if (array_key_exists('msg', $response)) { return $response; } session()->put('bkash_token', $response['id_token']); return $response; } public function make_tokenize_payment(Request $request) { $discount = session()->has('coupon_discount') ? session('coupon_discount') : 0; $order_amount = CartManager::cart_grand_total() - $discount; $user = Helpers::get_customer(); $response = self::getToken(); $auth = $response['id_token']; session()->put('token', $auth); $callbackURL = route('bkash-callback', ['token' => $auth]); $requestbody = array( 'mode' => '0011', 'amount' => (string)$order_amount, 'currency' => 'BDT', 'intent' => 'sale', 'payerReference' => $user['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 = $request['paymentID']; $auth = $request['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); info($resultdata); curl_close($url); $obj = json_decode($resultdata); if ($obj->statusCode == '0000') { $order_ids = []; $unique_id = OrderManager::gen_unique_id(); foreach (CartManager::get_cart_group_ids() as $group_id) { $data = [ 'payment_method' => 'bkash', 'order_status' => 'confirmed', 'payment_status' => 'paid', 'transaction_ref' => $obj->trxID ?? null, 'order_group_id' => $unique_id, 'cart_group_id' => $group_id ]; $order_id = OrderManager::generate_order($data); array_push($order_ids, $order_id); } CartManager::cart_clean(); if (auth('customer')->check()) { Toastr::success('Payment success.'); return view('web-views.checkout-complete'); } return response()->json(['message' => 'Payment succeeded'], 200); } else { if (auth('customer')->check()) { Toastr::error('Payment failed.'); return redirect('/'); } return response()->json(['message' => 'Payment failed'], 403); } } }