User Tools

Site Tools


market:jandeks.kassa:dlja_programmista:obrabotchik

This is an old revision of the document!


<?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/>

						Сумма:
						
						<?php echo $Sum?> руб. </div>

Номер заказа: <?php echo $this→_shopOrder→invoice?>

<input type="hidden" name="Sum" value="<?php echo $Sum?>" readonly="readonly"> <input type="hidden" name="AccountNumber" value="<?php echo $this→_shopOrder→invoice?>" readonly="readonly">

Способ оплаты:

							<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;
}

}

market/jandeks.kassa/dlja_programmista/obrabotchik.1430905083.txt.gz · Last modified: 26.06.15 в 15:07 (external edit)