Ви працюєте в Інтернеті в Індії? Тоді ви, мабуть, шукаєте платіжний шлюз, за допомогою якого ваш клієнт може здійснювати оплату через Інтернет.
PayKun – це індійський платіжний шлюз, який приймає оплату через Інтернет за допомогою кредитної картки, Net Banking, Wallet та UPI. Вони надають 2 типи планів для продавців – стандарти та підприємства. Ви можете ознайомитися з їх планом на сторінці цін. У цій статті ми вивчаємо, як інтегрувати платіжний шлюз PayKun у Laravel.
Починаємо
Для початку роботи з інтеграцією PayKun у Laravel вам потрібно спочатку створити обліковий запис у PayKun. При створенні облікового запису згенеруйте ключі API у меню Параметри-> Безпека-> Ключ API.
Спочатку ми рекомендуємо спробувати інтеграцію спочатку з пісочницею, і якщо все працює належним чином, перейдіть до виробництва. Ви можете генерувати ключі API пісочниці для середовища пісочниці так само, як виробництво. Щоб увійти в інформаційну панель пісочниці, клацніть піктограму у верхньому правому куті, а потім – «Тестовий режим».
Далі отримайте свій ідентифікатор продавця в розділі «Мої облікові записи-> Профіль».
Базове налаштування в Laravel для прийому платежів за допомогою PayKun
Для обробки платежу за допомогою PayKun потрібні ідентифікатор продавця та ключі API. Тож додайте ці значення у .env
файл.
PAYKUN_ACCESS_TOKEN=PASTE_ACCESS_TOKEN_HERE
PAYKUN_KEY_SECRET=PASTE_API_KEY_SECRET_HERE
PAYKUN_MERCHANT_ID=PASTE_MERCHANT_ID_HERE
Коли ваші користувачі здійснюють платіж, вам потрібно зберегти їх дані транзакції в базі даних для подальшого використання. Отже, давайте створимо міграцію за допомогою команди:
php artisan make:migration create_payments_table
Відкрийте цей файл міграції та додайте код нижче методом up.
<?php
...
...
public function up()
{
Schema::create('payments', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('payment_id');
$table->string('payer_email');
$table->string('payer_mobile');
$table->float('amount', 10, 2);
$table->string('payment_status');
$table->timestamps();
});
}
Запустіть цю міграцію за командою:
php artisan migrate
Ця міграція створить таблицю "платежів" у вашій базі даних. Оскільки нам потрібно зберігати транзакції в цій таблиці, створіть модель "Оплата", яка відповідає таблиці "платежі".
php artisan make:model Payment
Ми всі готові до базового налаштування і можемо продовжувати інтегрувати бібліотеку PayKun у наш проект Laravel.
Інтеграція PayKun Payment Gateway у Laravel
PayKun пропонує SDK для PHP, .NET, Java, Python тощо. Ми збираємось використовувати їхню бібліотеку GitHub, створену для PHP-додатків.
Встановіть бібліотеку PayKun у своєму проекті Laravel, використовуючи таку команду композитора:
composer require paykun/checkout
Якщо ви прочитаєте на їхній сторінці GitHub, ви можете додати стільки полів, як дані про клієнта, рахунки та інформацію про доставку. Але заради підручника ми візьмемо лише поле суми. Користувачі можуть розширити форму відповідно до своїх вимог.
payment.blade.php
<form action="{{ url('charge') }}" method="post">
<input type="text" name="amount" />
{{ csrf_field() }}
<input type="submit" name="submit" value="Pay Now">
</form>
Ми передали URL-адресу дії маршруту "заряд". Вам знадобиться кілька маршрутів, таких як URL-адреса успіху, невдала URL-адреса, плата тощо. Давайте визначимо це наступним чином.
routes / web.php
Route::get('payment', 'PaymentController@index');
Route::post('charge', 'PaymentController@charge');
Route::get('paymentsuccess', 'PaymentController@payment_success');
Route::get('paymenterror', 'PaymentController@payment_error');
Наступне, що потрібно зробити, це створити файл контролера, який буде збирати суму, направляти користувача на веб-сайт PayKun для обробки платежу, а потім остаточно вставити дані про транзакцію в базу даних.
php artisan make:controller PaymentController
Додайте наведений нижче код у цей файл контролера, який буде обробляти всі речі, пов’язані з оплатою.
PaymentController.php
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use PaykunCheckoutPayment;
use AppPayment as PaymentModel;
class PaymentController extends Controller
{
public $gateway;
public function __construct()
{
$this->gateway = new Payment(env('PAYKUN_MERCHANT_ID'), env('PAYKUN_ACCESS_TOKEN'), env('PAYKUN_KEY_SECRET'), false); // here we pass last parameter as false to enable sandbox mode.
}
public function index()
{
return view('payment');
}
public function charge(Request $request)
{
if($request->input('submit'))
{
try {
$this->gateway->setCustomFields(array('udf_1' => 'test')); //remove or comment this line when go live
$this->gateway->initOrder('ORD'.uniqid(), 'My Product Name', $request->input('amount'), url('paymentsuccess'), url('paymenterror'));
// Add Customer
$this->gateway->addCustomer('', '', '');
// Add Shipping address
$this->gateway->addShippingAddress('', '', '', '', '');
// Add Billing Address
$this->gateway->addBillingAddress('', '', '', '', '');
echo $this->gateway->submit();
} catch(Exception $e) {
return $e->getMessage();
}
}
}
public function payment_success(Request $request)
{
if ($request->input('payment-id'))
{
$transactionData = $this->gateway->getTransactionInfo($request->input('payment-id'));
if ($transactionData['status'])
{
$arr_transaction = $transactionData['data']['transaction'];
// Check if payment_id already exists in the database
$isPaymentExist = PaymentModel::where('payment_id', $arr_transaction['payment_id'])->first();
if(!$isPaymentExist)
{
$payment = new PaymentModel;
$payment->payment_id = $arr_transaction['payment_id'];
$payment->payer_email = $arr_transaction['customer']['email_id'];
$payment->payer_mobile = $arr_transaction['customer']['mobile_no'];
$payment->amount = $arr_transaction['order']['gross_amount'];
$payment->payment_status = $arr_transaction['status'];
$payment->save();
}
return "Payment is successful. Your transaction id is: ". $arr_transaction['payment_id'];
}
}
}
public function payment_error(Request $request)
{
return "Something went wrong. Try again later.";
}
}
Якщо ви подивитесь на код конструктора, ми передали останній параметр як ‘false’ (логічне значення). Коли ви виходите в ефір, вам не потрібно передавати цей параметр. Також у виробничому режимі видаліть або прокоментуйте нижченаведений рядок методом "стягнення плати".
$this->gateway->setCustomFields(array('udf_1' => 'test'));
Поки ви тестуєте оплату в пісочниці, вам потрібно ввести фіктивні номери кредитних карток, які ви отримаєте тут.
Це воно! Ми сподіваємось, ви розумієте інтеграцію платіжного шлюзу PayKun у Laravel. Ми хотіли б почути ваші думки в розділі коментарів нижче.