web-kursus2/app/Models/payment_gateway/Sslcommerz.php
2025-10-30 14:17:23 +07:00

137 lines
5.0 KiB
PHP

<?php
namespace App\Models\payment_gateway;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
class Sslcommerz extends Model
{
use HasFactory;
public static function payment_status($identifier, $transaction_keys = [])
{
$payment_gateway = DB::table('payment_gateways')->where('identifier', $identifier)->first();
$keys = json_decode($payment_gateway->keys, true);
$val_id = urlencode($_POST['val_id']);
$store_key = $keys['store_key'];
$store_password = $keys['store_password'];
if ($payment_gateway->test_mode == 1) {
$store_key = $keys['store_key'];
$store_password = $keys['store_password'];
$validation_url = "https://sandbox.sslcommerz.com";
} else {
$store_key = $keys['store_live_key'];
$store_password = $keys['store_live_password'];
$validation_url = "https://securepay.sslcommerz.com";
}
$validation_url .= "/validator/api/validationserverAPI.php?val_id=" . $val_id . "&store_id=" . $store_key . "&store_passwd=" . $store_password . "&v=1&format=json";
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $validation_url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($handle);
$code = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if ($code == 200 && ! (curl_errno($handle))) {
$result = json_decode($result, true);
if ($result['status'] == 'VALIDATED' || $result['status'] == 'VALID') {
return true;
}
}
return false;
}
public static function payment_create($identifier)
{
$payment_details = session('payment_details');
$payment_gateway = DB::table('payment_gateways')->where('identifier', 'sslcommerz')->first();
$user = DB::table('users')->where('id', auth()->user()->id)->first();
$keys = json_decode($payment_gateway->keys, true);
$products_name = '';
foreach ($payment_details['items'] as $key => $value):
if ($key == 0) {
$products_name .= $value['title'];
} else {
$products_name .= ', ' . $value['title'];
}
endforeach;
if ($payment_gateway->test_mode == 1):
$store_key = $keys['store_key'];
$store_password = $keys['store_password'];
$direct_api_url = "https://sandbox.sslcommerz.com/gwprocess/v3/api.php";
else:
$store_key = $keys['store_live_key'];
$store_password = $keys['store_live_password'];
$direct_api_url = "https://securepay.sslcommerz.com/gwprocess/v3/api.php";
endif;
$post_data = array();
$post_data['user_id'] = $user->id;
$post_data['payment_type'] = $identifier;
$post_data['items_id'] = $payment_details['items'][0]['id'];
$post_data['store_id'] = $store_key;
$post_data['store_passwd'] = $store_password;
$post_data['total_amount'] = round($payment_details['payable_amount']);
$post_data['currency'] = "BDT";
$post_data['tran_id'] = "SSLCZ_TXN_" . uniqid();
$post_data['success_url'] = $payment_details['success_url'] . '/' . $payment_gateway->identifier;
$post_data['fail_url'] = $payment_details['cancel_url'];
$post_data['cancel_url'] = $payment_details['cancel_url'];
# CUSTOMER INFORMATION
$post_data['cus_name'] = $user->name;
$post_data['cus_email'] = $user->email;
$post_data['cus_add1'] = $user->address;
$post_data['cus_city'] = "";
$post_data['cus_state'] = "";
$post_data['cus_postcode'] = "";
$post_data['cus_country'] = "";
$post_data['cus_phone'] = $user->phone;
$post_data['cus_fax'] = "";
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $direct_api_url);
curl_setopt($handle, CURLOPT_TIMEOUT, 30);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($handle, CURLOPT_POST, 1);
curl_setopt($handle, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); # KEEP IT FALSE IF YOU RUN FROM LOCAL PC
$content = curl_exec($handle);
$code = curl_getinfo($handle, CURLINFO_HTTP_CODE);
$ssl_commerz_response = "";
if ($code == 200 && ! (curl_errno($handle))) {
curl_close($handle);
$ssl_commerz_response = json_decode($content, true);
} else {
curl_close($handle);
exit;
}
return $ssl_commerz_response['GatewayPageURL'];
}
}