Codeigniter 4: руководство по интеграции платежного шлюза Razorpay
В этом руководстве вы узнаете, как интегрировать платежный шлюз razorpay в приложение codeignitor 4. Это руководство поможет вам шаг за шагом интегрировать платежный шлюз razorpay в приложение CodeIgniter 4.
Интеграция платежного шлюза Razorpay в PHP Codeigniter 4
Следуйте приведенным ниже инструкциям и интегрируйте платежный шлюз razorpay в приложение php codeigniter 4:
- Шаг 1 - Загрузите последнюю версию Codeigniter 4.
- Шаг 2 - Основные конфигурации
- Шаг 3 - Настройка учетных данных базы данных
- Шаг 4 - Создайте контроллер
- Шаг 5 - Создание представлений
- Шаг 6 - Запустите сервер разработки
Шаг 1 - Загрузите последнюю версию Codeigniter 4
На этом этапе, загрузите последнюю версию Codeigniter 4, перейдите по этой ссылке https://codeigniter.com/download
Шаг 2 - Основные конфигурации
Затем, установите базовую конфигурацию в файле app/Config/App.php. Давайте откроем этот файл в текстовом редакторе и установим базовый URL-адрес следующим образом
public $baseURL = 'http://localhost:8080'; Заменить на public $baseURL = 'http://localhost/demo/';
Шаг 3 - Настройка учетных данных базы данных
На этом этапе вам нужно подключить проект к базе данных. Вам нужно зайти в app/Config/ и открыть файл Database.php в текстовом редакторе. После открытия файла в текстовом редакторе вам необходимо настроить учетные данные базы данных в этом файле, как показано ниже.
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root', // Логин (пользователь) базы данных
'password' => ' ', // Пароль от базы данных
'database' => 'demo', // Название базы данных
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
Шаг 4 - Создайте контроллер
На этом этапе вам нужно создать контроллер с именем Payment.php. И добавьте в него следующий код:
<?php
namespace App\Controllers;
class Razorpay extends BaseController
{
public function __construct()
{
$this->session = \Config\Services::session();
}
public function index()
{
$data = [];
$data['title'] = 'Checkout payment | MakeCodes.ru';
$data['callback_url'] = base_url() . '/razorpay/callback';
$data['surl'] = base_url() . '/razorpay/success';
$data['furl'] = base_url() . '/razorpay/failed';
$data['currency_code'] = 'INR';
echo view("checkout", $data);
}
// initialized cURL Request
private function curl_handler($payment_id, $amount)
{
$url = 'https://api.razorpay.com/v1/payments/' . $payment_id . '/capture';
$key_id = "YOUR_KEY_ID";
$key_secret = "YOUR_SECRET";
$fields_string = "amount=$amount";
//cURL Request
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $key_id . ':' . $key_secret);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
return $ch;
}
// callback method
public function callback()
{
if (!empty($this->request->getPost('razorpay_payment_id')) && !empty($this->request->getPost('merchant_order_id'))) {
$razorpay_payment_id = $this->request->getPost('razorpay_payment_id');
$merchant_order_id = $this->request->getPost('merchant_order_id');
$this->session->set('razorpay_payment_id', $this->request->getPost('razorpay_payment_id'));
$this->session->set('merchant_order_id', $this->request->getPost('merchant_order_id'));
$currency_code = 'INR';
$amount = $this->request->getPost('merchant_total');
$success = false;
$error = '';
try {
$ch = $this->curl_handler($razorpay_payment_id, $amount);
//execute post
$result = curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($result === false) {
$success = false;
$error = 'Curl error: ' . curl_error($ch);
} else {
$response_array = json_decode($result, true);
//Check success response
if ($http_status === 200 and isset($response_array['error']) === false) {
$success = true;
} else {
$success = false;
if (!empty($response_array['error']['code'])) {
$error = $response_array['error']['code'] . ':' . $response_array['error']['description'];
} else {
$error = 'RAZORPAY_ERROR:Invalid Response <br/>' . $result;
}
}
}
//close curl connection
curl_close($ch);
} catch (Exception $e) {
$success = false;
$error = 'Request to Razorpay Failed';
}
if ($success === true) {
if (!empty($this->session->get('ci_subscription_keys'))) {
$this->session->unset('ci_subscription_keys');
}
if (!$order_info['order_status_id']) {
return redirect()->to($this->request->getPost('merchant_surl_id'));
} else {
return redirect()->to($this->request->getPost('merchant_surl_id'));
}
} else {
return redirect()->to($this->request->getPost('merchant_furl_id'));
}
} else {
echo 'An error occured. Contact site administrator, please!';
}
}
public function success()
{
$data['title'] = 'Razorpay Success | MakeCodes.ru';
echo "<h4>Your transaction is successful</h4>";
echo "<br/>";
echo "Transaction ID: " . $this->session->get('razorpay_payment_id');
echo "<br/>";
echo "Order ID: " . $this->session->get('merchant_order_id');
}
public function failed()
{
$data['title'] = 'Razorpay Failed | MakeCodes.ru';
echo "<h4>Your transaction got Failed</h4>";
echo "<br/>";
echo "Transaction ID: " . $this->session->get('razorpay_payment_id');
echo "<br/>";
echo "Order ID: " . $this->session->get('merchant_order_id');
}
}
Шаг 5 - Создание представлений (Views)
Теперь вам нужно создать файл вида checkout.php. Посетите папку app/Views/ и создайте файл checkout.php. Добавьте в него следующий код:
<!DOCTYPE html>
<html>
<head>
<title>Codeigniter 4 Razorpay Payment Gateway - MakeCodes.ru</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<?php
$description = "Product Description";
$txnid = date("YmdHis");
$key_id = "YOUR_KEY_ID";
$currency_code = $currency_code;
$total = (1 * 100);
$amount = 1;
$merchant_order_id = "ABC-" . date("YmdHis");
$card_holder_name = 'David Chase';
$email = 'example@gmail.com';
$phone = '9158876092';
$name = "RazorPay Infovistar";
?>
<div class="container">
<div class="page-header">
<h1>Pay with Razorpay</h1>
</div>
<div class="page-body">
<form name="razorpay-form" id="razorpay-form" action="<?php echo $callback_url; ?>" method="POST">
<input type="hidden" name="razorpay_payment_id" id="razorpay_payment_id" />
<input type="hidden" name="merchant_order_id" id="merchant_order_id" value="<?php echo $merchant_order_id; ?>" />
<input type="hidden" name="merchant_trans_id" id="merchant_trans_id" value="<?php echo $txnid; ?>" />
<input type="hidden" name="merchant_product_info_id" id="merchant_product_info_id" value="<?php echo $description; ?>" />
<input type="hidden" name="merchant_surl_id" id="merchant_surl_id" value="<?php echo $surl; ?>" />
<input type="hidden" name="merchant_furl_id" id="merchant_furl_id" value="<?php echo $furl; ?>" />
<input type="hidden" name="card_holder_name_id" id="card_holder_name_id" value="<?php echo $card_holder_name; ?>" />
<input type="hidden" name="merchant_total" id="merchant_total" value="<?php echo $total; ?>" />
<input type="hidden" name="merchant_amount" id="merchant_amount" value="<?php echo $amount; ?>" />
</form>
<table width="100%">
<tr>
<th>No.</th>
<th>Product Name</th>
<th class="text-right">Cost</th>
</tr>
<tr>
<td>1</td>
<td>HeadPhones</td>
<td class="text-right">$ 1.00</td>
</tr>
</table>
<div class="mt-2 text-right">
<input id="pay-btn" type="submit" onclick="razorpaySubmit(this);" value="Buy Now" class="btn btn-primary" />
</div>
</div>
</div>
<script src="https://checkout.razorpay.com/v1/checkout.js"></script>
<script>
var options = {
key: "<?php echo $key_id; ?>",
amount: "<?php echo $total; ?>",
name: "<?php echo $name; ?>",
description: "Order # <?php echo $merchant_order_id; ?>",
netbanking: true,
currency: "<?php echo $currency_code; ?>",
prefill: {
name: "<?php echo $card_holder_name; ?>",
email: "<?php echo $email; ?>",
contact: "<?php echo $phone; ?>"
},
notes: {
soolegal_order_id: "<?php echo $merchant_order_id; ?>",
},
handler: function(transaction) {
document.getElementById('razorpay_payment_id').value = transaction.razorpay_payment_id;
document.getElementById('razorpay-form').submit();
},
"modal": {
"ondismiss": function() {
location.reload()
}
}
};
var razorpay_pay_btn, instance;
function razorpaySubmit(el) {
if (typeof Razorpay == 'undefined') {
setTimeout(razorpaySubmit, 200);
if (!razorpay_pay_btn && el) {
razorpay_pay_btn = el;
el.disabled = true;
el.value = 'Please wait...';
}
} else {
if (!instance) {
instance = new Razorpay(options);
if (razorpay_pay_btn) {
razorpay_pay_btn.disabled = false;
razorpay_pay_btn.value = "Pay Now";
}
}
instance.open();
}
}
</script>
</body>
</html>
Шаг 6 - Запустите сервер разработки
На этом шаге откройте свой терминал и выполните следующую команду, чтобы запустить сервер разработки:
php spark serve
В этом руководстве вы успешно реализовали интеграцию платежного шлюза Razorpay в Codeigniter 4.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.