This shows you the differences between two versions of the page.
|
market:jandeks.kassa:dlja_programmista:obrabotchik [06.05.15 в 12:38] Артем Куц создано |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | <?php | ||
| - | /** | ||
| - | * Яндекс.Деньги | ||
| - | */ | ||
| - | class Shop_Payment_System_Handler21 extends Shop_Payment_System_Handler | ||
| - | { | ||
| - | |||
| - | /* Способы оплаты */ | ||
| - | protected $ym_method_pc = 1; /* электронная валюта Яндекс.Деньги. 1 - используется, 0 - нет */ | ||
| - | protected $ym_method_ac = 1; /* банковские карты VISA, MasterCard, Maestro. 1 - используется, 0 - нет */ | ||
| - | protected $ym_method_gp = 1; /* Только для юридического лица! Наличными в кассах и терминалах партнеров. 1 - используется, 0 - нет */ | ||
| - | protected $ym_method_mc = 1; /* Только для юридического лица! Оплата со счета мобильного телефона. 1 - используется, 0 - нет */ | ||
| - | protected $ym_method_wm = 1; /* Только для юридического лица! Электронная валюта WebMoney. 1 - используется, 0 - нет */ | ||
| - | protected $ym_method_ab = 1; /* Только для юридического лица! АльфаКлик. 1 - используется, 0 - нет */ | ||
| - | public $_rub_currency_id = 1; | ||
| - | |||
| - | /* режим приема средств */ | ||
| - | protected $ym_org_mode = 1; | ||
| - | |||
| - | /* Идентификатор магазина в системе Яндекс.Деньги. Выдается оператором системы. */ | ||
| - | protected $_ShopID = 22087; | ||
| - | |||
| - | /* Пароль магазина в системе Яндекс.Деньги. Выдается оператором системы. */ | ||
| - | protected $_shopPassword = 'termosecret'; | ||
| - | |||
| - | protected $_yandex_money_uri = 'https://money.yandex.ru/eshop.xml'; | ||
| - | |||
| - | /* Номер витрины магазина в системе Яндекс.Деньги. Выдается оператором системы. */ | ||
| - | protected $_scid = 12055; | ||
| - | |||
| - | /* Код валюты */ | ||
| - | /* | ||
| - | Возможные значения: | ||
| - | 643 — рубль Российской Федерации; | ||
| - | 10643 — тестовая валюта (демо-рублики демо-системы «Яндекс.Деньги») | ||
| - | */ | ||
| - | protected $_orderSumCurrencyPaycash = 643; | ||
| - | |||
| - | /* Вызывается на 4-ом шаге оформления заказа*/ | ||
| - | public function execute() | ||
| - | { | ||
| - | parent::execute(); | ||
| - | |||
| - | $this->printNotification(); | ||
| - | |||
| - | return $this; | ||
| - | } | ||
| - | |||
| - | /* вычисление суммы товаров заказа */ | ||
| - | public function getSumWithCoeff() | ||
| - | { | ||
| - | return Shop_Controller::instance()->round(($this->_rub_currency_id > 0 | ||
| - | && $this->_shopOrder->shop_currency_id > 0 | ||
| - | ? Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency( | ||
| - | $this->_shopOrder->Shop_Currency, | ||
| - | Core_Entity::factory('Shop_Currency', $this->_rub_currency_id) | ||
| - | ) | ||
| - | : 0) * $this->_shopOrder->getAmount() ); | ||
| - | } | ||
| - | |||
| - | protected function _processOrder() | ||
| - | { | ||
| - | parent::_processOrder(); | ||
| - | |||
| - | // Установка XSL-шаблонов в соответствии с настройками в узле структуры | ||
| - | $this->setXSLs(); | ||
| - | |||
| - | // Отправка писем клиенту и пользователю | ||
| - | $this->send(); | ||
| - | |||
| - | return $this; | ||
| - | } | ||
| - | |||
| - | /* обработка ответа от платёжной системы */ | ||
| - | public function paymentProcessing() | ||
| - | { | ||
| - | $this->ProcessResult(); | ||
| - | return TRUE; | ||
| - | } | ||
| - | |||
| - | /* оплачивает заказ */ | ||
| - | function ProcessResult() | ||
| - | { | ||
| - | $invoiceId = Core_Array::getPost('invoiceId'); | ||
| - | |||
| - | if ($this->_shopOrder->system_information == '') | ||
| - | { | ||
| - | $this->_shopOrder->system_information = $invoiceId; | ||
| - | $this->_shopOrder->save(); | ||
| - | } | ||
| - | |||
| - | if ($this->_shopOrder->system_information == $invoiceId) | ||
| - | { | ||
| - | /* проверяем заказ */ | ||
| - | $code = $this->_checkOrder($_POST); | ||
| - | } | ||
| - | else | ||
| - | { | ||
| - | $code = 1000; | ||
| - | } | ||
| - | |||
| - | $response_params = $_POST; | ||
| - | $response['requestDatetime'] = date("c"); | ||
| - | |||
| - | /* генерируем XML ответа */ | ||
| - | $response = $this->_genXMLResponseToYandex($response_params, $code); | ||
| - | |||
| - | if (Core_Array::getPost('action', '') == 'paymentAviso' && $code == 0) | ||
| - | { | ||
| - | $oShop_Order = $this->_shopOrder; | ||
| - | |||
| - | $this->shopOrder($oShop_Order)->shopOrderBeforeAction(clone $oShop_Order); | ||
| - | |||
| - | $oShop_Order->system_information = "Товар оплачен через Яндекс.Деньги.\n"; | ||
| - | $oShop_Order->paid(); | ||
| - | $this->setXSLs(); | ||
| - | $this->send(); | ||
| - | } | ||
| - | |||
| - | /* даем ответ Яндексу */ | ||
| - | echo $response; | ||
| - | die(); | ||
| - | } | ||
| - | |||
| - | /* генерация XML-а подтверждений магазина */ | ||
| - | protected function _genXMLResponseToYandex($response_params, $code = 1000) | ||
| - | { | ||
| - | $action = Core_Array::get($response_params, 'action'); | ||
| - | $code = intval($code); | ||
| - | $current_date_time = Core_Array::get($response_params, 'requestDatetime'); | ||
| - | $invoiceId = Core_Array::get($response_params, 'invoiceId'); | ||
| - | |||
| - | $response = '<?xml version="1.0" encoding="UTF-8"?>'; | ||
| - | $response .= '<' . htmlspecialchars($action) . 'Response performedDatetime="'. htmlspecialchars($current_date_time) .'" code="' . $code . '" invoiceId="' . htmlspecialchars($invoiceId) . '" shopId="' . $this->_ShopID . '"/>'; | ||
| - | |||
| - | return $response; | ||
| - | } | ||
| - | |||
| - | /* печатает форму отправки запроса на сайт платёжной системы */ | ||
| - | public function getNotification() | ||
| - | { | ||
| - | $Sum = $this->getSumWithCoeff(); | ||
| - | |||
| - | $oSiteUser = Core::moduleIsActive('siteuser') | ||
| - | ? Core_Entity::factory('Siteuser')->getCurrent() | ||
| - | : NULL; | ||
| - | |||
| - | ?> | ||
| - | <h2>Оплата через систему Яндекс.Деньги</h2> | ||
| - | |||
| - | <form method="POST" action="<?php echo $this->_yandex_money_uri?>"> | ||
| - | <input class="wide" name="scid" value="<?php echo $this->_scid?>" type="hidden"> | ||
| - | <input type="hidden" name="ShopID" value="<?php echo $this->_ShopID?>"> | ||
| - | <input type="hidden" name="CustomerNumber" value="<?php echo (is_null($oSiteUser) ? 0 : $oSiteUser->id)?>"> | ||
| - | <input type="hidden" name="orderNumber" value="<?php echo $this->_shopOrder->id?>"> | ||
| - | <input type="hidden" name="orderSumCurrencyPaycash" value="<?php echo $this->_orderSumCurrencyPaycash?>"> | ||
| - | |||
| - | <br/> | ||
| - | <div class="price"> | ||
| - | Сумма: | ||
| - | |||
| - | <?php echo $Sum?> руб. </div> | ||
| - | |||
| - | <div class="price">Номер заказа: <?php echo $this->_shopOrder->invoice?></div> | ||
| - | |||
| - | |||
| - | <input type="hidden" name="Sum" value="<?php echo $Sum?>" readonly="readonly"> | ||
| - | <input type="hidden" name="AccountNumber" value="<?php echo $this->_shopOrder->invoice?>" readonly="readonly"> | ||
| - | <div class="price"> | ||
| - | Способ оплаты: | ||
| - | </div> | ||
| - | <select name="paymentType"> | ||
| - | <?php if ($this->ym_method_pc){?> | ||
| - | <option value="PC">электронная валюта Яндекс.Деньги</option> | ||
| - | <?php } ?> | ||
| - | <?php if ($this->ym_method_ac){?> | ||
| - | <option value="AC">банковские карты VISA, MasterCard, Maestro</option> | ||
| - | <?php } ?> | ||
| - | <?php if ($this->ym_method_gp && $this->ym_org_mode){?> | ||
| - | <option value="GP">наличными в кассах и терминалах партнеров</option> | ||
| - | <?php } ?> | ||
| - | <?php if ($this->ym_method_mc && $this->ym_org_mode){?> | ||
| - | <option value="MC">оплата со счета мобильного телефона</option> | ||
| - | <?php } ?> | ||
| - | |||
| - | <?php if ($this->ym_method_wm && $this->ym_org_mode){?> | ||
| - | <option value="WM">электронная валюта WebMoney</option> | ||
| - | <?php } ?> | ||
| - | </select> | ||
| - | <br/><br/> | ||
| - | <input type="hidden" name="BuyButton" value="1" /> | ||
| - | <button type="submit" id="buy" class="btn btn-warning btn-lg">Оплатить</button> | ||
| - | |||
| - | |||
| - | </form> | ||
| - | <?php | ||
| - | } | ||
| - | |||
| - | public function getInvoice() | ||
| - | { | ||
| - | return $this->getNotification(); | ||
| - | } | ||
| - | |||
| - | /* проверяем заказ */ | ||
| - | protected function _checkOrder($order_params) | ||
| - | { | ||
| - | $site_user_id = $this->_shopOrder->siteuser_id; | ||
| - | |||
| - | $Sum = $this->getSumWithCoeff(); | ||
| - | |||
| - | if (isset($order_params['shopId']) && isset($order_params['customerNumber']) | ||
| - | && isset($order_params['orderSumAmount']) && isset($order_params['AccountNumber']) | ||
| - | && isset($order_params['orderSumCurrencyPaycash']) && isset($order_params['action']) | ||
| - | && isset($order_params['orderNumber']) && isset($order_params['orderSumBankPaycash']) | ||
| - | && isset($order_params['invoiceId']) | ||
| - | ) | ||
| - | { | ||
| - | if (Core_Array::get($order_params, 'shopId') == $this->_ShopID | ||
| - | && Core_Array::get($order_params, 'customerNumber') == $site_user_id | ||
| - | && Core_Array::get($order_params, 'orderSumAmount') == $Sum | ||
| - | && Core_Array::get($order_params, 'AccountNumber') == $this->_shopOrder->invoice | ||
| - | && Core_Array::get($order_params, 'orderSumCurrencyPaycash') == $this->_orderSumCurrencyPaycash | ||
| - | ) | ||
| - | { | ||
| - | $in_str = $order_params['action'] . ";" | ||
| - | . sprintf("%.2f", $Sum) . ";" | ||
| - | . $this->_orderSumCurrencyPaycash . ";" | ||
| - | . $order_params['orderSumBankPaycash'] . ";" | ||
| - | . $this->_ShopID . ";" | ||
| - | . $order_params['invoiceId'] . ";" | ||
| - | . $site_user_id . ";" | ||
| - | . $this->_shopPassword; | ||
| - | |||
| - | $hash = strtoupper(md5($in_str)); | ||
| - | |||
| - | return intval($hash != $order_params['md5']); | ||
| - | } | ||
| - | elseif ($order_params['action'] == 'checkOrder') | ||
| - | { | ||
| - | return 100; | ||
| - | } | ||
| - | } | ||
| - | else | ||
| - | { | ||
| - | return 200; | ||
| - | } | ||
| - | |||
| - | return 1000; | ||
| - | } | ||
| - | } | ||