Касса от Яндекс.Денег

Модератор
#
Re: Касса от Яндекс.Денег
Причина в использовании HostCMS 6 обработчика платежной системы, содержащего ошибку. Наиболее частной причиной являются два варианта:
1. В самом начале обработчика платежной системы неверно указан идентификатор платежной системы. Обратите на внимание на красную надпись сверху, при редактировании обработчика.
2. Система была обновлена с HostCMS 5 и остались старые коды обработчиков для API-5 в режиме совместимости. Для исправления необходимо обновить обработчики платежных систем с дистрибутива HostCMS 6 и внести в них персональные данные платежных систем.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Касса от Яндекс.Денег
Да, спасибо,так и было, в начале не указал номер платёжной системы. Написал на форуме и начал проверять всё по второму разу и соответственно нашёл ошибку, после чего удалил сообщение, не видел вашего ответа когда удалял.
#
Re: Re: Касса от Яндекс.Денег
Маяковский писал(а):
а обработчик для этой монета.ру?


Я так понимаю payanyway и монета.ру - это одно и то же.
В стандартном наборе есть обработчик.
#
Re: Касса от Яндекс.Денег
Теперь вот нарисовалась ещё одна проблема, после выполнения платежа, яндекс формирует ссылку "вернуться в магазин" ссылка выглядит таким вот образом


http://art-vincent.ru/shop/cart/?order_id=120&payment=success&paymentDatetime=2015-04-16T09%3A43%3A58.852%2B03%3A00&cps_theme=default&merchant_order_id=120_160415094320_00000_36096&customerNumber=0&shopFailURL=http%3A%2F%2Fart-vincent.ru%2Fshop%2Fcart%2F%3Forder_id%3D120%26payment%3Dfail&sumCurrency=10643&wbp_Version=2&cps_user_country_code=RU&shopSumCurrencyPaycash=10643&ErrorTemplate=ym2xmlerror&orderSumAmount=5234.40&cms_name=hostcms&page=%2Fselect-wallet.xml&shopId=36096&action=PaymentSuccess&cps_changeSum=false&cps_eplDisable=true&cps_rebillingAllowed=false&orderCreatedDatetime=2015-04-16T09%3A43%3A36.046%2B03%3A00&rebillingOn=false&wbp_InactivityPeriod=2&BuyButton=%CE%EF%EB%E0%F2%E8%F2%FC&SuccessTemplate=ym2xmlsuccess&WAShopID=1936803660&targetcurrency=643&wbp_ShopKeyID=2350484147&shopSumBankPaycash=1003&isOUTshop=true&requestDatetime=2015-04-16T09%3A43%3A59.332%2B03%3A00&wbp_shoperrorinfo=Shop+error&shopSumAmount=5077.37&eventType=PAYMENT&wbp_ShopEncryptionKey=hAAAEicBAI%2FgWZ7nPmvPCEf6CyNZrDT%2FM5dqhxF0IQeB%2Bpv7vetU1a35irDRuShgwsyUjxsUxHiwFgoOO51QqednVreeWZO16APsHZhWFQGw4cZhSzOlC5470PgGSGt%2FMZTqxetuSYe9ZbnaOMXqy3grEkzB%2FZ1iim40KHtTyewiIiXJhAKJ&storeRequest=true&cps_user_ip=89.31.37.181&successURL=&orderSumCurrencyPaycash=10643&localAttr1=PAYMENT&payment-name=%C8%CF+%CA%E0%F2%E0%E5%E2+%D1%E5%F0%E3%E5%E9+%CB%E5%EE%ED%E8%E4%EE%E2%E8%F7&orderSumBankPaycash=1003&wbp_ShopAddress=77.75.157.167%3A9128&invoiceId=2000000453185&paymentType=PC&wbp_CorrespondentID=F55EFDE2D16BA0456B2DDBE468A6C0F8B1D0D105&paymentPayerCode=4100322344779&wbp_ShopAdditionalAddress=77.75.157.167%3A9138&isViaWeb=true&orderNumber=120&md5=E550418678FFAFA3E1901514638A83CE&cps_region_id=53&cps-source=default&nst_unilabel=1cc16dc7-0001-5000-8000-000000044df6&shopSuccessURL=http%3A%2F%2Fart-vincent.ru%2Fshop%2Fcart%2F%3Forder_id%3D120%26payment%3Dsuccess&wbp_messagetype=MoneyInvitationRequest&scid=61063


Замечание: Undefined offset: 2 в файле /var/www/u0071016/data/www/art-vincent.ru/hostcmsfiles/lib/lib_7/lib_7.php (строка 15)
Fatal error: Call to undefined method Shop_Payment_System_Handler1::paymentProcessing() in /var/www/u0071016/data/www/art-vincent.ru/hostcmsfiles/lib/lib_7/lib_7.php on line 24

Я так понимаю, что обратный УРЛ формируется яндексом в произвольном формате. successURL и failURL стоят динамические.
#
Re: Касса от Яндекс.Денег
В стандартных обработчиках для например безналичного расчёта и для оплаты по ПД-4 есть вызов xsl

вида
   $this->xsl(Core_Entity::factory('Xsl'->getByName('ОплатаПоФормеПД4'

находится он в функции getnotification, попробовал так же вставить в эту функцию, но что-то не работает... хочется формировать итоговую таблицу заказа как в оплатах по квитанциям.


<?php

/**
* Яндекс.Деньги
*/
class Shop_Payment_System_Handler33 extends Shop_Payment_System_Handler
{      
   /* Тестовый или полный режим функциональности. */
   protected $ym_test_mode = 1; // 1 - тестовый, 0 - полный

   /* режим приема средств */
   protected $ym_org_mode = 1; // 1 - На расчетный счет организации с заключением договора с Яндекс.Деньгами (юр.лицо), 0 - На счет физического лица в электронной валюте Яндекс.Денег'

   /* Только для физического лица! Идентификатор магазина в системе Яндекс.Деньги. Выдается оператором системы. */
   protected $ym_account = 'xxxxxx';

   /* Пароль магазина в системе Яндекс.Деньги. Выдается оператором системы. */
   protected $ym_password = 'xxxxx';

   /* Способы оплаты */
   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 - нет */
   protected $ym_method_sb = 1; /* Только для юридического лица! Сбербанк Онлайн. 1 - используется, 0 - нет */

   /* Только для юридического лица! Идентификатор вашего магазина в Яндекс.Деньгах (ShopID) */
   protected $ym_shopid = 0000;

   /* Только для юридического лица! Идентификатор витрины вашего магазина в Яндекс.Деньгах (scid) */
   protected $ym_scid = 0000;

   // id валюты, в которой будет производиться рассчет суммы
   protected $ym_currency_id = 1; // 1 - рубли (RUR), 2 - евро (EUR), 3 - доллары (USD)

   /* Код валюты, в которой будет производиться оплата в Яндекс-Деньги  */
   protected $ym_orderSumCurrencyPaycash = 10643; /* Возможные значения: 643 — рубль Российской Федерации; 10643 — тестовая валюта (демо-рублики демо-системы «Яндекс.Деньги») */

   /* Вызывается на 4-ом шаге оформления заказа*/
   public function execute()
   {
      parent::execute();

      $this->printNotification();

      return $this;
   }

   /* вычисление суммы товаров заказа */
   public function getSumWithCoeff()
   {
      return Shop_Controller::instance()->round(($this->ym_currency_id > 0
            && $this->_shopOrder->shop_currency_id > 0
         ? Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
            $this->_shopOrder->Shop_Currency,
            Core_Entity::factory('Shop_Currency', $this->ym_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;
   }

   public function checkSign($callbackParams){
      $string = $callbackParams['action'].';'.$callbackParams['orderSumAmount'].';'.$callbackParams['orderSumCurrencyPaycash'].';'.$callbackParams['orderSumBankPaycash'].';'.$callbackParams['shopId'].';'.$callbackParams['invoiceId'].';'.$callbackParams['customerNumber'].';'.$this->ym_password;
      $md5 = strtoupper(md5($string));
      //var_dump($string, $md5, $callbackParams);
      return ($callbackParams['md5']==$md5);
   }

   public function sendAviso($callbackParams, $code){
      header("Content-type: text/xml; charset=utf-8");
      $xml = '<?xml version="1.0" encoding="UTF-8"?>
         <paymentAvisoResponse performedDatetime="'.date("c").'" code="'.$code.'" invoiceId="'.$callbackParams['invoiceId'].'" shopId="'.$this->ym_shopid.'"/>';
      echo $xml;
   }

   public function sendCode($callbackParams, $code){
      header("Content-type: text/xml; charset=utf-8");
      $xml = '<?xml version="1.0" encoding="UTF-8"?>
         <checkOrderResponse performedDatetime="'.date("c").'" code="'.$code.'" invoiceId="'.$callbackParams['invoiceId'].'" shopId="'.$this->ym_shopid.'"/>';
      echo $xml;
   }

   public function checkOrder($callbackParams, $sendCode=FALSE, $aviso=FALSE){
      
      if ($this->checkSign($callbackParams)){
         $code = 0;
      }else{
         $code = 1;
      }
      if ($sendCode){
         if ($aviso){
            $this->sendAviso($callbackParams, $code);
         }else{
            $this->sendCode($callbackParams, $code);
         }
         exit;
      }else{
         return $code;
      }
   }

   public function individualCheck($callbackParams){
      $string = $callbackParams['notification_type'].'&'.$callbackParams['operation_id'].'&'.$callbackParams['amount'].'&'.$callbackParams['currency'].'&'.$callbackParams['datetime'].'&'.$callbackParams['sender'].'&'.$callbackParams['codepro'].'&'.$this->ym_password.'&'.$callbackParams['label'];
      $check = (sha1($string) == $callbackParams['sha1_hash']);
      if (!$check){
         header('HTTP/1.0 401 Unauthorized');
         return false;
      }
      return true;
   
   }

   /* оплачивает заказ */
   function ProcessResult()
   {
      $callbackParams = $_POST;
      $order_id = false;
      
      if ($this->ym_org_mode){
         if ($callbackParams['action'] == 'checkOrder'){
            $code = $this->checkOrder($callbackParams);
            $this->sendCode($callbackParams, $code);
            $order_id = (int)$callbackParams["orderNumber"];
         }
         if ($callbackParams['action'] == 'paymentAviso'){
            $this->checkOrder($callbackParams, TRUE, TRUE);
         }
      }else{
         $check = $this->individualCheck($callbackParams);
         if (!$check){
            exit;
         }else{
            $order_id = (int)$callbackParams["label"];
         }
      }
      
      if ($order_id > 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();
      }
      die();
   }

   /* печатает форму отправки запроса на сайт платёжной системы */
   public function getNotification()
   {

      $Sum = $this->getSumWithCoeff();

      $oSiteUser = Core::moduleIsActive('siteuser')
         ? Core_Entity::factory('Siteuser')->getCurrent()
         : NULL;
      
      $oSite_Alias = $this->_shopOrder->Shop->Site->getCurrentAlias();
      $site_alias = !is_null($oSite_Alias) ? $oSite_Alias->name : '';
      $shop_path = $this->_shopOrder->Shop->Structure->getPath();
      $handler_url = 'http://'.$site_alias.$shop_path . "cart/?order_id={$this->_shopOrder->id}";

      $successUrl = $handler_url . "&payment=success";
      $failUrl = $handler_url . "&payment=fail";

      
      
      
      
      ?>
      <h2>Оплата через систему Яндекс.Деньги</h2>
      
      <form method="POST" action="<?php echo $this->getFormUrl()?>">
         <?php if ($this->ym_org_mode){?>
            <input class="wide" name="scid" value="<?php echo $this->ym_scid?>" type="hidden">
            <input type="hidden" name="ShopID" value="<?php echo $this->ym_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="shopSuccessURL" value="<?php echo $successUrl?>">
            <input type="hidden" name="shopFailURL" value="<?php echo $failUrl?>">
            <input type="hidden" name="cms_name" value="hostcms">
         <?php }else {?>
               <input type="hidden" name="receiver" value="<?php echo $this->ym_account; ?>">
               <input type="hidden" name="formcomment" value="<?php echo $site_alias;?>">
               <input type="hidden" name="short-dest" value="<?php echo $site_alias;?>">
               <input type="hidden" name="writable-targets" value="false">
               <input type="hidden" name="comment-needed" value="true">
               <input type="hidden" name="label" value="<?php echo $this->_shopOrder->id?>">
               <input type="hidden" name="quickpay-form" value="shop">

               <input type="hidden" name="targets" value="Заказ <?php echo $this->_shopOrder->id?>">
               <input type="hidden" name="sum" value="<?php echo $Sum;?>" data-type="number" >
               <input type="hidden" name="comment" value="<?php echo $this->_shopOrder->description?>" >
               <input type="hidden" name="need-fio" value="true">
               <input type="hidden" name="need-email" value="true" >
               <input type="hidden" name="need-phone" value="false">
               <input type="hidden" name="need-address" value="false">
     
         <?php } ?>
            <style>
               .ym_table tr td{
                  padding: 10px;
               }
               .ym_table td{
                  padding: 10px;
               }
            </style>
            <table class="ym_table" border = "1" cellspacing = "20" width = "80%" bgcolor = "#FFFFFF" align = "center" bordercolor = "#000000">
               <tr>
                  <td>Сумма, руб.</td>
                  <td> <input type="text" name="Sum" value="<?php echo $Sum?>" readonly="readonly"> </td>
               </tr>
               
   
                     <input type="hidden" name="paymentType" value="SB">
   <!--                   <?php if ($this->ym_org_mode){?>
                        <select name="paymentType">
                     <?php }else {?>
                        <select name="payment-type">
                     <?php } ?>
                        <?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_ab && $this->ym_org_mode){?>
                           <option value="AB"> Альфа-Клик</option>
                        <?php } ?>
                        <?php if ($this->ym_method_sb && $this->ym_org_mode){?>
                           <option value="SB"> Сбербанк Онлайн</option>
                        <?php } ?>
                        <?php if ($this->ym_method_wm && $this->ym_org_mode){?>
                           <option value="WM">электронная валюта WebMoney</option>
                        <?php } ?>
                     </select> -->
         
            </table>

            <table border="0" cellspacing="1" align="center"  width = "80%" bgcolor="#CCCCCC" >
               <tr bgcolor="#FFFFFF">
                  <td width="490"></td>
                  <td width="48"><input type="submit" name = "BuyButton" value = "Оплатить"></td>
               </tr>
            </table>
      </form>
   <?php

      
      
   }

   public function getInvoice()
   {
      return $this->getNotification();
   }



   public function getFormUrl(){
      if (!$this->ym_org_mode){
         return $this->individualGetFormUrl();
      }else{
         return $this->orgGetFormUrl();
      }
   }

   public function individualGetFormUrl(){
      if ($this->ym_test_mode){
         return 'https://demomoney.yandex.ru/quickpay/confirm.xml';
      }else{
         return 'https://money.yandex.ru/quickpay/confirm.xml';
      }
   }

   public function orgGetFormUrl(){
      if ($this->ym_test_mode){
            return 'https://demomoney.yandex.ru/eshop.xml';
        } else {
            return 'https://money.yandex.ru/eshop.xml';
        }
   }

}
#
Re: Касса от Яндекс.Денег
Пытаемся подключиться  к этой ***ной кассе

После ввода выданных данных платежной карты

Цитата:
[Подождите, пожалуйста. Мы ожидаем ответа от сервиса.
Не пытайтесь повторить платеж, пока сервис не предложит вам сделать это или не сообщит об ошибке./quote]

Цитата:
У нас возникли технические проблемы. Пожалуйста, попробуйте заплатить еще раз: всё должно получиться. Если ошибка повторяется,


В техподдержке яндекса говорят, что проблема с hostcms.

Кто-нибудь подключал ее и работал с ней?
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Касса от Яндекс.Денег
EugenyP писал(а):
В техподдержке яндекса говорят, что проблема с hostcms.

а они в любом вопросе говорят что проблема не у них, я когда подключал это г****но с ними на тел. провисел часов 20 в общей сложности.
EugenyP писал(а):
Кто-нибудь подключал ее и работал с ней?

я подключал,  работать с ними не стал, условия быстро поменяли, я потом в моента.ру ушел, там все проще, легче и дешевле.
У меня яндекс.касса заработала сама собой, после того как срок акции прошел (акция была на подключение по тарифу 2% по моему, или что то вроде того), прям на след. день все заработало без ошибок, только тариф стал другой....
#
Re: Касса от Яндекс.Денег
EugenyP, напишите мне в личку, пожалуйста, со ссылочкой на ваш сайт, откуда можно сделать платеж, чтобы воспроизвести ошибку.
Заказов не беру. Консультирую редко.
#
Re: Касса от Яндекс.Денег
Kotoff,
написал на почту
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация