LiqPay PHP примеры кода

Как и в статье Платежные системы. Stripe, создаем кастомный платеж.

Мы собрали необходимую информацию о заказе и теперь нам нужно чтобы покупатель произвел оплату.

Необходимые условия:

  • заказчик / хозяин магазина или фирмы которая предоставляет услугу, должен иметь счет в ПриватБанке;
  • в Личном кабинете LiqPay у него есть раздел по интеграции API на свой сайт, а там есть соответственно Публичный ключ, Секретный ключ. — это то что нам нужно, как разработчикам обязательно получить.

Более подробней о приемах электронных платежей здесь.

После получения ключей, можно приступать к созданию платежной формы.

SDK LiqPay

Традиционно качаем SDK PHP LiqPay. Там аж один файл. И как следует его подключим.


include 'LiqPay.php';

Задание не из легких, но мы справились!

Генерация платежной формы

Теперь создадим функцию, или метод ( для тех кто ООП-эшит ) генерации формы на сервере LiqPay.


function getForm($order_id = 0){


 	$public_key = 'iПубличный ключ';
	$private_key= 'fcСекретный ключ';

	$liqpay = new LiqPay($public_key, $private_key);
	$html = $liqpay->cnb_form(array(
	'version'=>'3',
	'action'         => 'pay',
	'amount'         => $order_summary, // сумма заказа
	'currency'       => 'UAH',
	/* перед этим мы ведь внесли заказ в  таблицу, 
	$insert_id = $wpdb->query( 'insert into table_orders' );
	*/
	'description'    => 'Оплата заказа № '.$insert_id, 
	'order_id'       => $insert_id,
	// если пользователь возжелает вернуться на сайт
	'result_url'	=>	'http://mydomain.site/thank_you_page/',
	/*
		если не вернулся, то Webhook LiqPay скинет нам сюда информацию из формы,
		в частонсти все тот же order_id, чтобы заказ
		 можно было обработать как оплаченый
	*/
	'server_url'	=>	'http://mydomain.site/liqpay_status/',
	'language'		=>	'ru' // uk, en
	//'sandbox'=>'1' // и куда же без песочницы,
	// не на реальных же деньгах тестировать
	));
	
        $res_arr = array("status"=>1, 'form'=>$html, 'order_num'=>$insert_id, 'error'=>$error);
	echo json_encode( $res_arr ); // вернем нашу сгенерированную форму для отправки
				//покупателя на LiqPay
	wp_die();

}

Далее нам нужен слушатель( listener ) для получения статуса платежа, если пользователь не вернулся к нам на сайт, по ‘result_url’.
В админ панели создадим страницу liqpay_status и thank_you_page.

Слушатель ( listener ) статуса платежа


// слушатель статуса
add_action('init', function(){

	if(is_page('liqpay_status')){ //проверим чтобы код не срабатывал на всех страницах

		if( isset($_POST['data']) ){

			$result= json_decode( base64_decode($_POST['data']) );
			// данные вернуться в base64 формат JSON

			if( $result->status == 'success' ){
			global $wpdb;
			$sql_up = "UPDATE `table_orders` SET paid=1 WHERE ID=%d";
                        // обновим статус заказа
			$wpdb->query( $wpdb->prepare($sql_up, $result->order_id) );
			}
		}
	}
});

Кнопка отправки платежной формы
На странице Чекаут или любой другой странице, где пользователь подошел к финишу заказа, создадим кнопку оплаты и контейнер для платежной формы.


<button class="send_order">Оплатить</button>

$('.send_order').on('click', function() {
//order - массив данных из формы: №заказа, услуга/продукт, ФИО и т.д.
ajaxData = {
    action: 'addOrder',
    data: JSON.stringify(order)
}
$.ajax({
    data: ajaxData,
    success: function(msg) {
        // декодируем нашу форму из JSON
       var conv = JSON.parse( msg ); 
        if (parseInt( conv.status ) > 0) {
            // и добавим ее в заранее подготовленный контейнер
            $('#lpay_form').empty().html( conv.form );          
            $('#lpay_form form').submit(); 
            // пошлем юзера на LiqPay для оплаты
    }
});

Более подробней о функционале LiqPay, вы сможете ознакомиться на официальном сайте.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *