/ Плагины / Платежная система PayKeeper

Платежная система PayKeeper

HIT

08.07.2017

3040

Подключаем к интернет-магазину сервис электронной оплаты PayKeeper. У данного сервиса есть специальный модуль для Woocommerce — WooCommerce PayKeeper Plugin. Сам модуль и инструкция по подключению есть на официальном сайте. В данной статье приведу тезисно порядок подключения и проблемы с которыми пришлось столкнуться.

Интеграция PayKeeper

Изначально при заключении Договора получаем доступ (данные) к личному кабинету PayKeeper. Далее заводим выделенный сервер (либо на FastVPS, либо на REG.ru, либо на хостинге PayKeeper), сообщаем необходимые данные менеджеру сервиса.

Установка и настройка плагина

После этого устанавливаем плагин на сайт. Настройки PayKeeper находятся в разделе Платежи.

Прописываем в первом поле
https://site.server.paykeeper.ru/order/inline/ — !site прописываем без зоны

Во втором поле — придумываем и пишем секретное слово (лучше латиницей). Далее оно нам пригодиться.

Следующие 3 поля Наименование, Описание, Icon заполнены автоматически — это то что выводиться на странице оформления заказа.

Следующая группа полей также заполнена по умолчанию. В первых двух полях Адрес уведомления и Успешный переход — одинаковое значение: https://site.ru/?wc-api=wc_pk_gateway
В следующем Переход при ошибке: https://site.ru/?wc-api=wc_pk_gateway&failed

После внесения изменений не забываем сохранить настройки.

Синхронизация

Далее идем в личный кабинет PayKeeper, и в разделе Получение информации о платежах выбираем Способ получения уведомления о платежах» — POST-оповещения.

В поле Секретное слово вставляем слово которое мы придумывали настраивая плагин. А в поле URL, на который будут отправляться POST-запросы вставляем значение из плагина: https://site.ru/?wc-api=wc_pk_gateway

Идем в раздел Адреса перенаправления клиент и заполняем 2 поля, скопировав значения из плагина:
https://site.ru/?wc-api=wc_pk_gateway
https://site.ru/?wc-api=wc_pk_gateway&failed

Собственно ВСЕ! Модуль должен работать. Но у меня не заработал.

Ошибки

Выбирая оплату картами Visa/MasterCard онлайн (PayKeeper) после нажатия кнопки Оформить заказ мы попадаем на экран успешного завершения заказа, а должны попасть на сервис для оплаты. Более того возвращаясь к заказу в личном кабинете и попытавшись оплатить, снова попадаем на экран успешного завершения заказа — но заказ по прежнему не оплачен.

Проблему удалось решить следующим образом:

1. Создал А-запись на домене pay.site.ru A 888.888.88.888
2. Операторы установили на этот поддомен сертификат
3. Заменил адрес Платежной формы PayKeeper на https://pay.site.ru/form/inline

И все заработало! Только немного странно, что форма оплаты появляется фактически после создания заказа.

Не обновляется статус заказа

При внесении платежа статус заказа онлайн не обновлялся. Это происходило из-за плагина Bad Behavior. После отключения плагина, все стало работать как надо.

Автозаполнение полей формы PayKeeper

При выборе способа оплаты через PayKeeper система перебрасывает на страницу в формой оплаты PayKeeper и пользователю приходиться заново вводить некоторые данные. Облегчим жизнь посетителю — заполнил некоторые поля за него, тем более, если например неправильно заполнить поле сумма (вместо точки например поставить запятую в разряде), то заказ вовсе может не пройти.

Скрипт заполнения формы PayKeeper:

$(document).ready(function() { 
	if($("body").is(".woocommerce-order-pay")) {
		var orderNumber = $(".order_details .order strong").text();
		$("#tmg_payment_credits #orderid").val(orderNumber);
		
		var orderTotal = $(".order_details .total .woocommerce-Price-amount").text();
		var orderTotal2 = orderTotal.substring(0, orderTotal.length - 3);
		orderTotal2 = orderTotal2.replace(/\s+/g,''); //убираем пробелы если они есть (например после тысяч)
		$("#tmg_payment_credits #sum").val(orderTotal2);
	}
});

orderTotal.substring(0, orderTotal.length — 3); — обрезание последних символов строки.

Есть еще один способ избавления от ненужных символов: orderTotal.replace(/[^1-9.]/g, «»); Но в данном случае он не подойдет, т.к. изначальный формат суммы 35.45 р.. Т.е. после данной операции будет оставаться лишняя точка 35.45.

Также можно вывести а впоследствии автозаполнить поля имя, e-mail, phone.

Для начала выведем необходимые данные, где нибудь в footer (причем чтобы их не было видно #user-data {display: none;})

Если выводить через функцию WordPress, то мы получим только часть данных:

<?php $current_user = wp_get_current_user();
echo '<div id="user-email">'.$current_user->user_email.'</div>';
echo '<div id="user-name">'.$current_user->user_firstname.'</div>'; ?>

Чтобы получить поля Woocommerce, нужно делать так:

<?php $current_user_id = get_current_user_id();
$billing_first_name = get_user_meta($current_user_id,'billing_first_name',true);
echo '<div id="user-name">'.$billing_first_name.'</div>'; 
$billing_phone = get_user_meta($current_user_id,'billing_phone',true);
echo '<div id="user-phone">'.$billing_phone.'</div>'; ?>

Чтобы узнать название полей нужно пойти в форму заказа и посмотреть id соответствующих input.

Итак готовый вывод необходимых данных:

<div id="user-data">
	<?php $current_user_id = get_current_user_id();

	$billing_first_name = get_user_meta($current_user_id,'billing_first_name',true);
	echo '<div id="user-name">'.$billing_first_name.'</div>'; 

	$billing_phone = get_user_meta($current_user_id,'billing_phone',true);
	echo '<div id="user-phone">'.$billing_phone.'</div>';

	$billing_email = get_user_meta($current_user_id,'billing_email',true);
	echo '<div id="user-email">'.$billing_email.'</div>'; ?>
</div>

А в скрипт добавим автоподстановку полей

var orderemail = $("#user-data #user-email").text();
$("#tmg_payment_credits #client_email").val(orderemail);
		
var ordername = $("#user-data #user-name").text();
$("#tmg_payment_credits #clientid").val(ordername);

Загвоздка будет только с полем телефон, т.к. в форме PayKeeper у этого поля установлена маска, и есть вероятность подставить не правильно, поэтому это поле я не трогаю.

Возможность оплаты не сразу

Если специфика интернет-магазина такова, что мы должны сначала принять заказ, проверить наличие товара и после этого принимать оплату.

Дорабатываем функцию process_payment в файле woocommerce-paykeeper/paykeeper-gateway-class.php (строка 135):

public function process_payment($order_id) {
   
	$order = new WC_Order($order_id);
	
	global $woocommerce;
	$endpoint = $woocommerce->query->get_current_endpoint();

	if ($endpoint == 'order-pay') {

		return array(
			'result' => 'success',
			'redirect' => add_query_arg('order', $order->id, add_query_arg('key', $order->order_key, $order->get_checkout_payment_url(true)))
		);			  

	} else {

		$order->update_status('on-hold'); //изначально присваиваем статус На удержании

		return array(
			'result' => 'success',
			'redirect' => $order->get_checkout_order_received_url()
		);			  

	}
	
}

Добавляем проверку на endpoint, т.е. откуда идет запрос в данный момент.

$order->update_status(‘on-hold’); — обновление статуса заказа

Теперь новый заказ (при выборе оплаты Paykeeper’ом) будет создаваться со статусом «На удержании», при этом отправляются письма и клиенту и администратору. При создании заказа клиент переводится в шаблон успешного заказа. Оплатить заказ он не может и из личного кабинета (При статусе «На удержании» нет кнопки Оплатить). Если с заказом все в порядке, администратор меняет статус заказа на «В ожидании оплаты» и теперь клиент может оплатить его из личного кабинета. После поступления оплаты, если с Paykeeper все настроено как надо, статус заказа меняется на «Выполнен».

То же самое (отложенная оплата) можно делать и в других плагинах оплаты. В плагине Альфабанка данный код находится в файле woocommerce-rbspayment-ab/wc-rbspayment-ab.php. В плагине Кредит Тинькофф, данный код находится в фале woodev-vkredit/woodev/payment-gateway/class-payment-gateway-hosted.php

Отправка ссылки для оплаты на почту

Я хотел еще доработать таким образом, чтобы при изменении статуса заказа на «В ожидании оплаты» приходило письмо с ссылкой для оплаты. Но сделать этого не удалось, т.к. хука

woocommerce_order_status_on-hold_to_pending_notification

в системе WC не существует.

Нашел способ как это сделать, описано в этой статье.

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

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

Пока нет комментариев. Будь первым!

Платежная система PayKeeper Платежная система PayKeeper Платежная система PayKeeper Платежная система PayKeeper
Мультирегиональность сайта
Рекомендации для васМультирегиональность сайтаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.