Компонент для оплаты онлайн через КазКом банк для Yii2.
Перед использованием рекоммендуется ознакомится с работой и циклом оплаты в документации банка
Если нашли ошибки или устаревший код то кидайте в issues.
Рекоммендуемый способ установки через composer.
$ composer require naffiq/yii2-kkb
Добавьте следующие строки в ваш конфигурационный файл (app\config\main.php
).
Данные настройки были из документации и по ним можно тестировать оплату на
тестовых серверах ККБ
<?php
return [
// your config goes here
'components' => [
// ...
'kkbPayment' => [
'class' => 'naffiq\kkb\KKBPayment',
// Расположение публичного ключа
'publicKeyPath' => '@vendor/naffiq/yii2-kkb/payment-keys/kkbca.pem',
// Расположение приватного ключа
'privateKeyPath' => '@vendor/naffiq/yii2-kkb/payment-keys/test_prv.pem',
// Ключевая фраза к приватному ключу
'privateKeyPassword' => 'nissan',
// ID онлайн-магазина в системе kkb
'merchantId' => '92061101',
// ID сертификата онлайн-магазина в системе kkb
'merchantCertificateId' => '00C182B189',
// Название магазина
'merchantName' => 'Test shop',
],
]
// ...
];
Для каждого
merchantId
должны генерироваться уникальныеORDER_ID
. Так как тестовыйmerchantId
для всех один, то возможно потребуется придумать уникальный числовой префикс к вашемуORDER_ID
Для того чтобы отправить запрос на оплату в epay, необходимо сформировать форму со следующими полями:
<?php
/**
* @var $kkbPayment \naffiq\kkb\KKBPayment
*/
$kkbPayment = \Yii::$app->get('kkbPayment');
// В случае ошибки в этом методе могут выбрасываться исключения.
// В этом случае нужно курить доку и смотреть конфиги
try {
$kkbPaymentBase64 = $kkbPayment->processRequest(ORDER_ID, ORDER_PRICE);
} catch (\yii\base\Exception $e) {
$kkbPaymentBase64 = "";
// TODO: Обработка ошибки
}
// Выставляем адрес сервера платежей в зависимости от окружения
if (YII_ENV_DEV) {
$paymentUrl = 'https://testpay.kkb.kz/jsp/process/logon.jsp';
} else {
$paymentUrl = 'https://epay.kkb.kz/jsp/process/logon.jsp';
}
?>
<form action="<?= $paymentUrl ?>" id="kkb-payment-form" style="display: none">
<input type="text" name="Signed_Order_B64" size="100" value="<?= $kkbPaymentBase64 ?>">
<input type="text" id="em" name="email" size="50" maxlength="50" value="<?= CLINET_EMAIL ?>">
<input type="text" name="Language" size="50" maxlength="3" value="rus">
<input type="text" name="BackLink" size="50" maxlength="50" value="<?= RETURN_URL ?>">
<input type="text" name="PostLink" size="50" maxlength="50" value="<?= PROCESS_RESULT_URL ?>">
</form>
Для обработки результата создайте новый экшн в контроллере (URL на него должно быть указано в поле PostLink).
После этого вызовите метод \naffiq\kkb\KKBPayment::processResponse($response)
, где $response
- это ответ ККБ.
Пример базовой реализации:
<?php
class PaymentController extends \yii\web\Controller {
//Controller code
/**
*
*/
public function actionProcessResult()
{
/**
* @var $kkb \naffiq\kkb\KKBPayment
*/
$kkb = \Yii::$app->get('kkbPayment');
$response = \Yii::$app->request->post('response');
$paymentResponse = $kkb->processResponse($response);
// Обработка $paymentResponse
}
}
?>
В результате исполнения обработки будет возвращен объект класса naffiq\kkb\KKBPaymentResult
, который содержит
все данные об оплате.