ok
Direktori : /home2/selectio/www/limpiar.in.net/updates/app/Http/Controllers/Api/V2/ |
Current File : /home2/selectio/www/limpiar.in.net/updates/app/Http/Controllers/Api/V2/SslCommerzController.php |
<?php namespace App\Http\Controllers\Api\V2; use App\Models\BusinessSetting; use App\Http\Controllers\SSLCommerz; use App\Models\CombinedOrder; use App\Models\User; use App\Models\Wallet; use Illuminate\Http\Request; # IF BROWSE FROM LOCAL HOST, KEEP true if (!defined("SSLCZ_IS_LOCAL_HOST")) { define("SSLCZ_IS_LOCAL_HOST", true); } class SslCommerzController extends Controller { public $sslc_submit_url; public $sslc_validation_url; public $sslc_mode; public $sslc_data; public $store_id; public $store_pass; public $error = ''; public function __construct() { # IF SANDBOX TRUE, THEN IT WILL CONNECT WITH SSLCOMMERZ SANDBOX (TEST) SYSTEM if (BusinessSetting::where('type', 'sslcommerz_sandbox')->first()->value == 1) { $this->setSSLCommerzMode(true); } else { $this->setSSLCommerzMode(false); } $this->store_id = env('SSLCZ_STORE_ID'); $this->store_pass = env('SSLCZ_STORE_PASSWD'); $this->sslc_submit_url = "https://" . $this->sslc_mode . ".sslcommerz.com/gwprocess/v3/api.php"; $this->sslc_validation_url = "https://" . $this->sslc_mode . ".sslcommerz.com/validator/api/validationserverAPI.php"; } public function begin(Request $request) { $payment_type = $request->payment_type; $combined_order_id = $request->combined_order_id; $amount = $request->amount; $user_id = $request->user_id; $post_data = array(); $post_data['total_amount'] = $request->amount; # You cant not pay less than 10 $post_data['currency'] = "BDT"; if ($request->payment_type == "cart_payment") { $post_data['tran_id'] = 'AIZ-' . $request->combined_order_id . '-' . date('Ymd'); // tran_id must be unique } else if ( $request->payment_type == "wallet_payment" || $request->payment_type == "seller_package_payment" || $request->payment_type == "customer_package_payment" ) { $post_data['tran_id'] = 'AIZ-' . $request->user_id . '-' . date('Ymd'); } $post_data['value_a'] = $request->user_id; $post_data['value_b'] = $request->combined_order_id; $post_data['value_c'] = $request->payment_type; $post_data['value_d'] = $request->amount; if ($request->payment_type == "cart_payment") { $combined_order = CombinedOrder::find($combined_order_id); $post_data['value_d'] = $combined_order->grand_total; } else if ($request->payment_type == "wallet_payment") { $post_data['value_b'] = 'sslcommerz'; } else if ($request->payment_type == "seller_package_payment" || $request->payment_type == "customer_package_payment") { $post_data['value_b'] = $request->package_id; } # CUSTOMER INFORMATION $post_data['cus_name'] = "Customer Name"; $post_data['cus_add1'] = "Customer Address"; $post_data['cus_city'] = "Customer City"; $post_data['cus_postcode'] = "1234"; $post_data['cus_country'] = "Bangladesh"; $post_data['cus_phone'] = "123456123"; $post_data['cus_email'] = "some@mail.com"; $post_data['success_url'] = url("api/v2/sslcommerz/success"); $post_data['fail_url'] = url("api/v2/sslcommerz/fail"); $post_data['cancel_url'] = url("api/v2/sslcommerz/cancel"); return $this->initiate($post_data); } public function payment_success(Request $request) { $sslc = new SSLCommerz(); #Start to received these value from session. which was saved in index function. $tran_id = $request->value_a; #End to received these value from session. which was saved in index function. $payment = json_encode($request->all()); if (isset($request->value_c)) { try { if ($request->value_c == 'cart_payment') { checkout_done($request->value_b, $payment); } elseif ($request->value_c == 'wallet_payment') { wallet_payment_done($request->value_a, $request->value_d, 'SslCommerz', $payment); } elseif ($request->value_c == 'seller_package_payment') { seller_purchase_payment_done($request->value_a, $request->value_b, $request->value_d, 'SslCommerz', $payment); } else if ($request->value_c == 'customer_package_payment') { customer_purchase_payment_done($request->value_a, $request->value_b); } return response()->json(['result' => true, 'message' => translate("Payment is successful")]); } catch (\Exception $e) { return response()->json(['result' => false, 'message' => $e->getMessage()]); } } return response()->json([ 'result' => false, 'message' => translate('Payment Failed') ]); /*return response()->json([ 'result' => false, 'payment_type'=> $payment_type, 'message' => 'Payment Successful' ]);*/ } public function payment_process(Request $request) { } public function payment_fail(Request $request) { return response()->json([ 'result' => false, 'message' => translate('Payment Failed') ]); } public function payment_cancel(Request $request) { return response()->json([ 'result' => false, 'message' => translate('Payment Cancelled') ]); } public function initiate($post_data) { /*return response()->json([ 'post_data' => json_encode($post_data), 'result' => false, 'url' => '', 'message' => "gg", ]);*/ if ($post_data != '' && is_array($post_data)) { $post_data['store_id'] = $this->store_id; $post_data['store_passwd'] = $this->store_pass; $load_sslc = $this->sendRequest($post_data); if ($load_sslc) { if (isset($this->sslc_data['status']) && $this->sslc_data['status'] == 'SUCCESS') { if (isset($this->sslc_data['GatewayPageURL']) && $this->sslc_data['GatewayPageURL'] != '') { return response()->json([ 'result' => true, 'url' => $this->sslc_data['GatewayPageURL'], 'message' => 'Redirect Url is found' ]); } else { return response()->json([ 'result' => false, 'url' => '', 'message' => 'No redirect URL found!' ]); } } else { return response()->json([ 'result' => false, 'url' => '', 'message' => "Invalid Credential!", ]); } } else { return response()->json([ 'result' => false, 'url' => '', 'message' => "Connectivity Issue. Please contact your sslcommerz manager", ]); } } else { return response()->json([ 'result' => false, 'url' => '', 'message' => "Please provide a valid information list about transaction with transaction id, amount, success url, fail url, cancel url, store id and pass at least", ]); } } # SEND CURL REQUEST public function sendRequest($data) { $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $this->sslc_submit_url); curl_setopt($handle, CURLOPT_POST, 1); curl_setopt($handle, CURLOPT_POSTFIELDS, $data); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); if (SSLCZ_IS_LOCAL_HOST) { curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); } else { curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 2); // Its default value is now 2 curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, true); } $content = curl_exec($handle); $code = curl_getinfo($handle, CURLINFO_HTTP_CODE); if ($code == 200 && !(curl_errno($handle))) { curl_close($handle); $sslcommerzResponse = $content; # PARSE THE JSON RESPONSE $this->sslc_data = json_decode($sslcommerzResponse, true); return $this; } else { curl_close($handle); $msg = "FAILED TO CONNECT WITH SSLCOMMERZ API"; $this->error = $msg; return false; } } # SET SSLCOMMERZ PAYMENT MODE - LIVE OR TEST public function setSSLCommerzMode($test) { if ($test) { $this->sslc_mode = "sandbox"; } else { $this->sslc_mode = "securepay"; } } # VALIDATE SSLCOMMERZ TRANSACTION public function sslcommerz_validate($merchant_trans_id, $merchant_trans_amount, $merchant_trans_currency, $post_data) { # MERCHANT SYSTEM INFO if ($merchant_trans_id != "" && $merchant_trans_amount != 0) { # CALL THE FUNCTION TO CHECK THE RESUKT $post_data['store_id'] = $this->store_id; $post_data['store_pass'] = $this->store_pass; if ($this->SSLCOMMERZ_hash_varify($this->store_pass, $post_data)) { $val_id = urlencode($post_data['val_id']); $store_id = urlencode($this->store_id); $store_passwd = urlencode($this->store_pass); $requested_url = ($this->sslc_validation_url . "?val_id=" . $val_id . "&store_id=" . $store_id . "&store_passwd=" . $store_passwd . "&v=1&format=json"); $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $requested_url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); if (SSLCZ_IS_LOCAL_HOST) { curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); } else { curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 2); // Its default value is now 2 curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, true); } $result = curl_exec($handle); $code = curl_getinfo($handle, CURLINFO_HTTP_CODE); if ($code == 200 && !(curl_errno($handle))) { # TO CONVERT AS ARRAY # $result = json_decode($result, true); # $status = $result['status']; # TO CONVERT AS OBJECT $result = json_decode($result); $this->sslc_data = $result; # TRANSACTION INFO $status = $result->status; $tran_date = $result->tran_date; $tran_id = $result->tran_id; $val_id = $result->val_id; $amount = $result->amount; $store_amount = $result->store_amount; $bank_tran_id = $result->bank_tran_id; $card_type = $result->card_type; $currency_type = $result->currency_type; $currency_amount = $result->currency_amount; # ISSUER INFO $card_no = $result->card_no; $card_issuer = $result->card_issuer; $card_brand = $result->card_brand; $card_issuer_country = $result->card_issuer_country; $card_issuer_country_code = $result->card_issuer_country_code; # API AUTHENTICATION $APIConnect = $result->APIConnect; $validated_on = $result->validated_on; $gw_version = $result->gw_version; # GIVE SERVICE if ($status == "VALID" || $status == "VALIDATED") { if ($merchant_trans_currency == "BDT") { if (trim($merchant_trans_id) == trim($tran_id) && (abs($merchant_trans_amount - $amount) < 1) && trim($merchant_trans_currency) == trim('BDT')) { return true; } else { # DATA TEMPERED $this->error = "Data has been tempered"; return false; } } else { //echo "trim($merchant_trans_id) == trim($tran_id) && ( abs($merchant_trans_amount-$currency_amount) < 1 ) && trim($merchant_trans_currency)==trim($currency_type)"; if (trim($merchant_trans_id) == trim($tran_id) && (abs($merchant_trans_amount - $currency_amount) < 1) && trim($merchant_trans_currency) == trim($currency_type)) { return true; } else { # DATA TEMPERED $this->error = "Data has been tempered"; return false; } } } else { # FAILED TRANSACTION $this->error = "Failed Transaction"; return false; } } else { # Failed to connect with SSLCOMMERZ $this->error = "Faile to connect with SSLCOMMERZ"; return false; } } else { # Hash validation failed $this->error = "Hash validation failed"; return false; } } else { # INVALID DATA $this->error = "Invalid data"; return false; } } # FUNCTION TO CHECK HASH VALUE public function SSLCOMMERZ_hash_varify($store_passwd = "", $post_data) { if (isset($post_data) && isset($post_data['verify_sign']) && isset($post_data['verify_key'])) { # NEW ARRAY DECLARED TO TAKE VALUE OF ALL POST $pre_define_key = explode(',', $post_data['verify_key']); $new_data = array(); if (!empty($pre_define_key)) { foreach ($pre_define_key as $value) { if (isset($post_data[$value])) { $new_data[$value] = ($post_data[$value]); } } } # ADD MD5 OF STORE PASSWORD $new_data['store_passwd'] = md5($store_passwd); # SORT THE KEY AS BEFORE ksort($new_data); $hash_string = ""; foreach ($new_data as $key => $value) { $hash_string .= $key . '=' . ($value) . '&'; } $hash_string = rtrim($hash_string, '&'); if (md5($hash_string) == $post_data['verify_sign']) { return true; } else { $this->error = "Verification signature not matched"; return false; } } else { $this->error = 'Required data mission. ex: verify_key, verify_sign'; return false; } } # FUNCTION TO GET IMAGES FROM WEB public function _get_image($gw = "", $source = array()) { $logo = ""; if (!empty($source) && isset($source['desc'])) { foreach ($source['desc'] as $key => $volume) { if (isset($volume['gw']) && $volume['gw'] == $gw) { if (isset($volume['logo'])) { $logo = str_replace("/gw/", "/gw1/", $volume['logo']); break; } } } return $logo; } else { return ""; } } public function getResultData() { return $this->sslc_data; } }