Skip to content

Компонент оплаты онлайн через КазКом банк для Yii2

Notifications You must be signed in to change notification settings

naffiq/yii2-kkb

Repository files navigation

yii2-kkb

Build Status Test Coverage Code Climate Issue Count

Компонент для оплаты онлайн через КазКом банк для 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, который содержит все данные об оплате.