private:koding:hostcms:modules:shop:cart:payment_systems:custom_payment

Оплата клиентом с передачей логина

Решение позволяет реализовать упрощенный механизм оплаты заказа, при котором пользователь самостоятельно оплачивает заказ или переводит средства по указанному счету, а затем через специальную форму сообщает интернет-магазину логин, с которого была проведена оплата.

Решение подойдет при интеграции платежных систем, для которых невозможно сделать платежный обработчик.

Описание работы

Пользователь выбирает способ оплаты, который подразумевает оплату с передачей логина, на следующем шаге появляется форма с инструкцией по оплате и формой ввода логина. Пользователь оплачивает заказ согласно инструкции, указывает логин, с которого выполнялась оплата, и нажимает кнопку «Оплатил».

Администратору интернет-магазина отправляется письмо о том, что заказ оплачен, флаг оплаты при этом не сохраняется, а логин оплаты сохраняется в поле «Информация о заказе».

Интеграция решения

  1. В разделе «Интернет-магазин → Формы оплаты» скопировать шаблон ОплатаПриПолучении, переименовать в ОплатаСтороннимСервисом, добавить в него инструкцию оплаты и следующию форму:
    <form class="payment" method="POST" action=".">
    	<h2 class="payment__title">Оплата</h2>
     
    	<div class="payment__list">
    		<p>
    			<xsl:value-of disable-output-escaping="yes" select="substring-before(shop_payment_system/description, '{SUM}')" />
    			<strong><xsl:value-of select="/shop/shop_order/shop_currency/name"/><xsl:value-of select="format-number(total_amount,'#####0.00', 'my')"/></strong>
    			<xsl:value-of disable-output-escaping="yes" select="substring-after(shop_payment_system/description, '{SUM}')" />
    		</p>
     
    		<p class="payment-list__item">
    			<div class="payment-list__input">
    				<input type="text" style="width:150px;" name="payment_login" />
    			</div>
    		</p>
     
    		<p>3. Нажмите кнопку «Оплатил»</p>
    	</div>
     
    	<div class="payment__button">
    		<button type="submit" name="payed" value="1" class="btn-green btn-lg">Оплатил</button>
    	</div>
    </form>
  2. Скопировать платежную систему «Оплата наличными» и заменить вней название XSL-шаблона на ОплатаСтороннимСервисом.
  3. В разделе «Интернет-магазин → Формы оплаты» создать XSL-шаблон с названием ОплатаСтороннимСервисомПодтверждение для подтверждения оплаты сторонним сервисом или можно использовать стандартный шаблон ОплатаПриПолучении, в таком случае новый шаблон не понадобится.
  4. К ТДС Интернет-магазин корзина добавить два параметра:
    • externalPaymentXsl — XSL шаблон подтверждения оплаты сторонним сервисом
    • externalPaymentEmailXsl — XSL шаблон письма подтверждения оплаты сторонним сервисом
  5. В ТДС Интернет-магазин корзина изменить код шага default:
    <?php
    // Сохранение оплаты сторонним сервисом
    if (Core_Array::getPost('payed'))
    {
    	$oShopOrder = Core_Entity::factory('Shop_Order')
    		->getById(Core_Array::get($_SESSION, 'last_order_id'));
     
    	if ($oShopOrder)
    	{
    		$paymentLogin = trim(strval(Core_Array::getPost('payment_login')));
     
    		// Если логин указан, то выводим подтверждение
    		if ($paymentLogin)
    		{
    			$oShopPaymentSystemHandler = Shop_Payment_System_Handler::factory(
    					Core_Entity::factory('Shop_Payment_System', $oShopOrder->shop_payment_system_id)
    				);
    			$oShopOrder->system_information = 'Оплата была проведена с помощью ника «' . $paymentLogin . '»';
    			$oShopOrder->save();
     
    			// Оплату заказа не сохраняем, ее подтверждает модератор
    			// здесь изменение флага требуется для отправки письма
    			$oShopOrder->paid = 1;
    			$date = Core_Date::sql2datetime($oShopOrder->datetime);
    			$subject = Core::_('Shop_Order.confirm_admin_subject', $oShopOrder->invoice, $oShopOrder->Shop->name, $date);
     
    			// Отправляем подтверждение администратору на почту
    			$oShopPaymentSystemHandler
    				->shopOrder($oShopOrder)
    				->adminMailSubject($subject)
    				->setXSLs()
    				->sendAdminEmail(
    					$oShopPaymentSystemHandler->getAdminEmail()
    				);
     
    			// Выводим подтверждение
    			$oConfirmationXsl = Core_Entity::factory('Xsl')
    				->getByName(
    					Core_Array::get(Core_Page::instance()->libParams, 'externalPaymentXsl')
    				);
     
    			$Shop_Cart_Controller_Show
    				->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'))
    				->xsl(
    					   $oConfirmationXsl
    				)
    				->show();
    		}
    		// Если логин не указан, то выводим ошибку
    		else
    		{
    			?>
    				<p id="error">Укажите логин, с которого была произведена оплата.</p>
    			<?
     
    			$oShopPaymentSystemHandler = Shop_Payment_System_Handler::factory(
    					Core_Entity::factory('Shop_Payment_System', $oShopOrder->shop_payment_system_id)
    				)
    				->orderParams($_SESSION['hostcmsOrder'])
    				->execute();
    		}
    	}
    	else
    	{
    		header('Location: ' . Core_Page::instance()->structure->getPath());
    		exit();
    	}
    }
    else
    {
    	$xslName = Core_Array::get(Core_Page::instance()->libParams, 'cartXsl');
     
    	$Shop_Cart_Controller_Show
    		->couponText(
    			Core_Str::stripTags(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'))
    		)
    		->xsl(
    			Core_Entity::factory('Xsl')->getByName($xslName)
    		)
    		->show();
    }

Страницу создал Максим Засорин 13.10.16 в 10:45

private/koding/hostcms/modules/shop/cart/payment_systems/custom_payment.txt · Last modified: 27.06.17 в 15:17 by maximzasorin_gmail.com