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

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

HIT

08.07.2017

3032

Подключаем к интернет-магазину сервис электронной оплаты 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 минут.