












- /media/zoo/applications/jbuniversal/framework/controllers/payment.php
- /media/zoo/applications/jbuniversal/templates/catalog/renderer/payment_ikassa/_default.php
- /media/zoo/applications/jbuniversal/config/basket.xml
- <!-- IKassa -->
- <param name="@spacer-ikassa" type="jbspacer" default="JBZOO_IKASSA_CONFIG_TITLE"/>
- <param name="ikassa-enabled" type="jbbool" default="0" label="JBZOO_IKASSA_ENABLED"
- description="JBZOO_IKASSA_ENABLED_DESC"/>
- <param name="ikassa-shopid" type="text" default="" label="JBZOO_IKASSA_SHOPID"
- description="JBZOO_IKASSA_SHOPID_DESC"/>
- <param name="ikassa-key" type="text" default="" label="JBZOO_IKASSA_KEY" description="JBZOO_IKASSA_KEY_DESC"/>
- <!-- IKassa -->
- <param name="@spacer-ikassa" type="jbspacer" default="JBZOO_IKASSA_CONFIG_TITLE"/>
- <param name="ikassa-enabled" type="jbbool" default="0" label="JBZOO_IKASSA_ENABLED"
- description="JBZOO_IKASSA_ENABLED_DESC"/>
- <param name="ikassa-debug" type="jbbool" default="0" label="JBZOO_IKASSA_DEBUG"
- description="JBZOO_IKASSA_DEBUG_DESC"/>
- <param name="ikassa-shopid" type="text" default="" label="JBZOO_IKASSA_SHOPID"
- description="JBZOO_IKASSA_SHOPID_DESC"/>
- <param name="ikassa-key" type="text" default="" label="JBZOO_IKASSA_KEY" description="JBZOO_IKASSA_KEY_DESC"/>
- <param name="ikassa-key-test" type="text" default="" label="JBZOO_IKASSA_KEY_TEST" description="JBZOO_IKASSA_KEY_TEST_DESC"/>
- <form name="payment" action="https://sci.interkassa.com/"" method="post" accept-charset="UTF-8">
- <input type="hidden" name="ik_co_id"" value="<?php echo $data->get('shopid'); ?>">
- <input type="hidden" name="ik_am" value="<?php echo $data->get('summ'); ?>">
- <input type="hidden" name="ik_pm_no" value="<?php echo $data->get('orderId'); ?>">
- <input type="hidden" name="ik_desc""
- value="Order #<?php echo $data->get('orderId'); ?> form <?php echo JUri::getInstance()->getHost(); ?>">
- <input type="hidden" name="ik_sign" value="<?php echo $data->get('secretKey'); ?>">
- <input type="submit" style="display:inline-block;" class="add-to-cart"
- value="<?php echo JText::_('JBZOO_PAYMENT_BUTTON'); ?>"/>
- </form>
- <?php
- /**
- * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
- *
- * @package jbzoo
- * @version 2.x Pro
- * @author JBZoo App http://jbzoo.com
- * @copyright Copyright (C) JBZoo.com, All rights reserved.
- * @license http://jbzoo.com/license-pro.php JBZoo Licence
- * @coder Denis Smetannikov <denis@jbzoo.com>
- */
- // no direct access
- defined('_JEXEC') or die('Restricted access');
- /**
- * Class paymentJBUniversalController
- */
- class paymentJBUniversalController extends JBUniversalController
- {
- const TYPE_ROBOX = 'Robokassa.ru';
- const TYPE_IKASSA = 'Interkassa.com';
- const TYPE_MANUAL = 'Manual';
- /**
- * @var Int
- */
- public $appId = null;
- /**
- * @var Item
- */
- public $order = null;
- /**
- * @var Int
- */
- public $orderId = null;
- /**
- * @var Int
- */
- public $itemId = null;
- /**
- * @var ElementJBBasketItems
- */
- public $orderDetails = null;
- /**
- * @var AppTemplate
- */
- public $template = null;
- /**
- * @var ParameterData
- */
- public $appParams = null;
- /**
- * @var JBUniversalApplication
- */
- public $application = null;
- /**
- * @var JBModelOrder
- */
- public $orderModel = null;
- /**
- * @var BasketRenderer
- */
- public $renderer = null;
- /**
- * @var String
- */
- public $systemType = null;
- /**
- * Init controller
- * @throws AppException
- */
- protected function _init()
- {
- $this->orderId = (int)$this->_jbrequest->get('order_id');
- $this->appId = (int)$this->_jbrequest->get('app_id');
- $this->appParams = $this->application->getParams();
- if ($invId = (int)$this->_jbrequest->get('InvId')) {
- $this->systemType = self::TYPE_ROBOX;
- $this->orderId = $invId;
- } else if ($ikPaymentId = (int)$this->_jbrequest->get('ik_pm_no')) {
- $this->systemType = self::TYPE_IKASSA;
- $this->orderId = $ikPaymentId;
- } else if ($orderId = (int)$this->_jbrequest->get('order_id')) {
- $this->systemType = self::TYPE_MANUAL;
- $this->orderId = $orderId;
- }
- if (!$this->appId) {
- throw new AppException('Applciation id is no set');
- }
- if (!$this->template = $this->application->getTemplate()) {
- throw new AppException('No template selected');
- }
- if ((int)$this->appParams->get('global.jbzoo_cart_config.enable', 0) == 0) {
- throw new AppException('Application is not a basket');
- }
- if ((int)$this->appParams->get('global.jbzoo_cart_config.payment-enabled') == 0) {
- throw new AppException('Payment is not enabled');
- }
- if ($this->orderId) {
- $this->orderModel = JBModelOrder::model();
- if (!$this->order = $this->orderModel->getById($this->orderId)) {
- throw new AppException('Order #' . $this->orderId . ' no exists');
- }
- if (!$this->orderDetails = $this->orderModel->getDetails($this->order)) {
- throw new AppException('This type don\'t have JBPrice element');
- }
- }
- if (!$this->orderDetails) {
- throw new AppException('Order not found');
- die;
- }
- // set renderer
- $this->renderer = $this->app->renderer->create('basket')->addPath(array(
- $this->app->path->path('component.site:'),
- $this->template->getPath()
- ));
- }
- /**
- * Index action
- */
- function index()
- {
- if ((int)JFactory::getConfig()->get('debug') == 0) {
- //error_reporting(0);
- }
- $this->_init();
- $totalSumm = $this->orderDetails->getTotalPrice();
- $totalSummFormated = $this->orderDetails->getTotalPrice(true);
- $appParams = $this->app->data->create($this->appParams->get('global.jbzoo_cart_config.', array()));
- $this->payments = array();
- if ($this->orderDetails->getOrderStatus() == ElementJBBasketItems::ORDER_STATUS_PAID) {
- throw new AppException('Order has already been paid');
- }
- if ($totalSumm == 0) {
- throw new AppException('To pay for the cost should be greater than zero');
- }
- // robox
- if ((int)$appParams->get('robox-enabled', 0)) {
- $params = new stdClass();
- $params->login = JString::trim($appParams->get('robox-login'));
- $params->password1 = JString::trim($appParams->get('robox-password1'));
- $params->hash = md5(implode(':', array($params->login, $totalSumm, $this->orderId, $params->password1)));
- $params->summ = $totalSumm;
- $params->orderId = $this->orderId;
- $params->summFormated = $totalSummFormated;
- $params->debug = (int)$appParams->get('robox-debug', 0);
- $this->payments['robox'] = $this->app->data->create($params);
- }
- // ikassa
- if ((int)$appParams->get('ikassa-enabled', 0)) {
- $params = new stdClass();
- $params->shopid = JString::trim($appParams->get('ikassa-shopid'));
- $params->summ = $totalSumm;
- $params->orderId = $this->orderId;
- $params->summFormated = $totalSummFormated;
- $this->payments['ikassa'] = $this->app->data->create($params);
- $params->secretKey = $this->getSecretKey($appParams, $params->summ);
- }
- // manual
- if ((int)$appParams->get('manual-enabled', 0)) {
- $params = new stdClass();
- $params->title = $appParams->get('manual-title');
- $params->text = $appParams->get('manual-text');
- $params->message = $appParams->get('manual-message');
- $this->payments['manual'] = $this->app->data->create($params);
- }
- // display
- $this->getview('payment')->addTemplatePath($this->template->getPath())->setLayout('payment')->display();
- }
- /**
- * @throws AppException
- */
- public function paymentCallback()
- {
- $this->_init();
- if ($this->orderDetails->getOrderStatus() == ElementJBBasketItems::ORDER_STATUS_PAID) {
- throw new AppException('Order has already been paid');
- }
- $totalsumm = $this->orderDetails->getTotalPrice();
- if ($this->systemType == self::TYPE_ROBOX) {
- if ((float)$totalsumm != (float)$_REQUEST['OutSum']) {
- throw new AppException('No valid summ');
- }
- $password2 = JString::trim($this->appParams->get('global.jbzoo_cart_config.robox-password2'));
- $crc = strtoupper($_REQUEST["SignatureValue"]);
- $myCrc = strtoupper(md5(implode(':', array($_REQUEST['OutSum'], $this->orderId, $password2))));
- if ($crc === $myCrc) {
- // get request vars
- $args = array(
- 'date' => $this->app->date->create()->toSQL(),
- 'system' => $this->systemType,
- 'additionalState' => null
- );
- // execute callback method
- $this->orderDetails->callback('paymentCallback', $args);
- jexit('OK' . $this->orderId);
- } else {
- throw new AppException('No valid hash');
- }
- } else if ($this->systemType == self::TYPE_IKASSA) {
- if($this->appParams->get('global.jbzoo_cart_config.ikassa-debug',0 || $this->_jbrequest->get('ik_pw_via', '') === 'test_interkassa_test_xts')){
- $key = JString::trim($this->appParams->get('global.jbzoo_cart_config.ikassa-key-test',0));
- }else{
- $key = JString::trim($this->appParams->get('global.jbzoo_cart_config.ikassa-key',0));
- }
- $myCrcData = array(
- 'ik_co_id' => $this->_jbrequest->get('ik_co_id', ''),
- 'ik_am' => $this->_jbrequest->get('ik_am', ''),
- 'ik_co_prs_id' => $this->_jbrequest->get('ik_co_prs_id', ''),
- 'ik_inv_id' => $this->_jbrequest->get('ik_inv_id', ''),
- 'ik_inv_st' => $this->_jbrequest->get('ik_inv_st', ''),
- 'ik_inv_crt' => $this->_jbrequest->get('ik_inv_crt', ''),
- 'ik_inv_prc' => $this->_jbrequest->get('ik_inv_prc', ''),
- 'ik_trn_id' => $this->_jbrequest->get('ik_trn_id', ''),
- 'ik_pm_no' => $this->_jbrequest->get('ik_pm_no', ''),
- 'ik_desc' => $this->_jbrequest->get('ik_desc', ''),
- 'ik_pw_via' => $this->_jbrequest->get('ik_pw_via', ''),
- 'ik_cur' => $this->_jbrequest->get('ik_cur', ''),
- 'ik_co_rfn' => $this->_jbrequest->get('ik_co_rfn', ''),
- 'ik_ps_price' => $this->_jbrequest->get('ik_ps_price', '')
- );
- ksort($myCrcData, SORT_STRING);
- array_push($myCrcData, $key);
- $sgnString = implode(':', $myCrcData);
- $myCrc = base64_encode(md5($sgnString, true));
- $crc = $this->_jbrequest->get('ik_sign');
- $shopid = $this->appParams->get('global.jbzoo_cart_config.ikassa-shopid');
- $requestShopid = $this->_jbrequest->get('ik_co_id');
- $totalSumm = (float)$this->orderDetails->getTotalPrice();
- $requestAmount = (float)$this->_jbrequest->get('ik_am');
- if ($crc === $myCrc &&
- $totalSumm == $requestAmount &&
- $requestShopid === $shopid
- ) {
- // get request vars
- $args = array(
- 'date' => $this->app->date->create()->toSQL(),
- 'system' => $this->systemType,
- 'additionalState' => $this->_jbrequest->get('ik_payment_state')
- );
- // execute callback method
- $this->orderDetails->callback('paymentCallback', $args);
- jexit('OK' . $this->orderId);
- } else {
- throw new AppException('No valid hash');
- }
- } else {
- throw new AppException('Unknown system');
- }
- }
- /**
- * Payment success page
- */
- public function paymentSuccess()
- {
- $this->_init();
- // display
- $this->getview('payment_success')->addtemplatepath($this->template->getpath())->setlayout('payment_success')->display();
- }
- /**
- * Payment success page (manual)
- */
- public function paymentManual()
- {
- $this->_init();
- $appParams = $this->app->data->create($this->appParams->get('global.jbzoo_cart_config.', array()));
- if ((int)$appParams->get('manual-enabled', 0)) {
- $this->manual = $this->app->data->create(array(
- 'title' => $appParams->get('manual-title'),
- 'text' => $appParams->get('manual-text'),
- 'message' => $appParams->get('manual-message'),
- ));
- $this->orderDetails->callback('paymentCallback', array(
- 'date' => $this->app->date->create()->toSQL(),
- 'system' => self::TYPE_MANUAL,
- ));
- if ($appParams->get('manual-message')) {
- $this->app->jbnotify->notice($appParams->get('manual-message'));
- }
- } else {
- $this->app->jbnotify->error('Manual paymant is disabled');
- }
- // display
- $this->getview('payment_success')->addTemplatepath($this->template->getpath())->setlayout('payment_success')->display();
- }
- /**
- * Payment fail page
- */
- public function paymentFail()
- {
- $this->_init();
- $this->app->document->setTitle(JText::_('JBZOO_PAYMENT_FAIL_PAGE_TITLE'));
- // display
- $this->getview('payment_fail')->addtemplatepath($this->template->getpath())->setlayout('payment_fail')->display();
- }
- /**
- * Action for success order page without payment
- */
- public function paymentNotPaid()
- {
- $this->_init();
- $appParams = $this->app->data->create($this->appParams->get('global.jbzoo_cart_config.', array()));
- // check custom success page
- $successPage = JString::trim($appParams->get('payment-page-success'));
- if (!empty($successPage)) {
- $successPage = $this->app->jbrouter->addParamsToUrl($successPage, array('order_id' => $this->order->id));
- $this->setRedirect($successPage);
- return;
- }
- $this->getview('payment_success')->addtemplatepath($this->template->getpath())->setlayout('payment_success')->display();
- }
- /**
- * @param $appParams
- * @param $summ
- * @return string
- */
- public function getSecretKey($appParams, $summ)
- {
- $arrProp = array(
- 'ik_co_id' => JString::trim($appParams->get('ikassa-shopid')),
- 'ik_am' => $summ,
- 'ik_pm_no' => $this->orderId,
- 'ik_desc' => 'Order #' . $this->orderId . ' form ' . JUri::getInstance()->getHost()
- );
- if($appParams->get('ikassa-debug',0)){
- $key = $appParams->get('ikassa-key-test',0);
- }else{
- $key = $appParams->get('ikassa-key',0);
- }
- ksort($arrProp, SORT_STRING);
- array_push($arrProp, $key);
- $signString = implode(':', $arrProp);
- $sign = base64_encode(md5($signString, true));
- return $sign;
- }
- }

Сообщение отредактировал SmetDenis: 07 June 2014 - 13:36