Решение позволяет реализовать упрощенный механизм оплаты заказа, при котором пользователь самостоятельно оплачивает заказ или переводит средства по указанному счету, а затем через специальную форму сообщает интернет-магазину логин, с которого была проведена оплата.
Решение подойдет при интеграции платежных систем, для которых невозможно сделать платежный обработчик.
Пользователь выбирает способ оплаты, который подразумевает оплату с передачей логина, на следующем шаге появляется форма с инструкцией по оплате и формой ввода логина. Пользователь оплачивает заказ согласно инструкции, указывает логин, с которого выполнялась оплата, и нажимает кнопку «Оплатил».
Администратору интернет-магазина отправляется письмо о том, что заказ оплачен, флаг оплаты при этом не сохраняется, а логин оплаты сохраняется в поле «Информация о заказе».
ОплатаПриПолучении
, переименовать в ОплатаСтороннимСервисом
, добавить в него инструкцию оплаты и следующию форму:<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>
ОплатаСтороннимСервисом
.ОплатаСтороннимСервисомПодтверждение
для подтверждения оплаты сторонним сервисом или можно использовать стандартный шаблон ОплатаПриПолучении
, в таком случае новый шаблон не понадобится.Интернет-магазин корзина
добавить два параметра:externalPaymentXsl
— XSL шаблон подтверждения оплаты сторонним сервисом externalPaymentEmailXsl
— XSL шаблон письма подтверждения оплаты сторонним сервисомИнтернет-магазин корзина
изменить код шага 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