Minishop2 + robokassa

Добрый день, стоит minishop2, купил дополнение для робокассы, подключил, настроил, оплата проходит, деньги на робокассу зачисляются, а вот статус в админке не меняется, в логах вот что
[2014-07-29 17:03:10] (ERROR @ /assets/components/minishop2/payment/robokassa.php) [miniShop2:Robokassa] Err: wrong signature., request: Array
(
    [out_summ] => 1.000000
    [OutSum] => 1.000000
    [inv_id] => 48
    [InvId] => 48
    [crc] => EEE311FFEF0FD924AB152AA534503C43
    [SignatureValue] => EEE311FFEF0FD924AB152AA534503C43
    [PaymentMethod] => OceanBank
    [IncSum] => 1.000000
    [IncCurrLabel] => BANKOCEAN2R
)
Алексей Курохтин
29 июля 2014, 13:41
modx.pro
1
3 250
0

Комментарии: 13

Василий Наумкин
29 июля 2014, 17:47
0
Говорит, wrong signature — то есть, неправильная подпись.

Или что-то с паролями не настроено, или у Robokassa что-то поменялось в подписывании.
Алексей Курохтин
30 июля 2014, 11:41
0
Не успел понять к сожалению в чем дело, если будет возможность глянь на этом тестовом сайте почему не меняет статус, нет так нет и на том спасибо)
http://s6296.test.modx.pro/manager/
Логин	s6296
Пароль	FeJNJJ9mXO-j
    Алексей
    14 января 2020, 12:52
    0
    Столкнулся с такой же проблемой, пока сайт работает в тестовом режиме, меняю пароли первый платеж проходит, второй выдает ошибку, Василий в чем может быть проблема
    [2020-01-14 12:48:39] (ERROR @ /var/www/u0531668/data/www/new.elitagro.ru/core/components/minishop2/custom/payment/robokassa.class.php: 121) [miniShop2:Robokassa] Err: wrong signature., request: Array
    (
    [out_summ] => 16
    [OutSum] => 16
    [inv_id] => 160
    [InvId] => 160
    [crc] => A4D424074E9323BD8ED6F8FC5227B0EF
    [SignatureValue] => A4D424074E9323BD8ED6F8FC5227B0EF
    [PaymentMethod] => BankCard
    [IncSum] => 16
    [IncCurrLabel] => BankCardPSR
    [IsTest] => 1
    [EMail] =>
    [Fee] => 0.0
    )
      Dmitry P.
      04 августа 2020, 10:39
      2
      0
      У меня возникла похожая проблема, только в тестовом режиме компонент ругался при каждой оплате. Методом тыка выяснил, что сигнатура в компоненте не совпадает с сигнатурой от робокассы, и связано это вроде как с наличием копеек.
      Помогло поправить метод receive в классе оплаты Robokassa (core/components/minishop2/custom/payment/robokassa.class.php)
      Добавил вычисление сигнатуры без копеек
      $sum3 = number_format($order->get('cost'), 0, '.', '');
      $crc3 = strtoupper(md5($sum3 . ':' . $id . ':' . $this->config['pass2']));
      И в последующем ифе проверку
      if ($crc == $crc1 || $crc == $crc2 || $crc == $crc3) {...}
      Полный код метода:
      public function receive(msOrder $order, $params = array())
          {
              $id = $order->get('id');
              $crc = strtoupper($_REQUEST['SignatureValue']);
              // Production
              $sum1 = number_format($order->get('cost'), 6, '.', '');
              $crc1 = strtoupper(md5($sum1 . ':' . $id . ':' . $this->config['pass2']));
              // Test
              $sum2 = number_format($order->get('cost'), 2, '.', '');
              $crc2 = strtoupper(md5($sum2 . ':' . $id . ':' . $this->config['pass2']));
              
              /** вот эти две строки добавил*/
              $sum3 = number_format($order->get('cost'), 0, '.', '');
              $crc3 = strtoupper(md5($sum3 . ':' . $id . ':' . $this->config['pass2']));
      
              if ($crc == $crc1 || $crc == $crc2 || $crc == $crc3) { //и здесь одно условие
                  /** @var miniShop2 $miniShop2 */
                  $miniShop2 = $this->modx->getService('miniShop2');
                  @$this->modx->context->key = 'mgr';
                  $miniShop2->changeOrderStatus($order->get('id'), 2);
                  exit('OK');
              } else {
                  $this->paymentError('Err: wrong signature.', $params);
              }
          }
    Евгений Мельников
    14 февраля 2021, 20:41
    0
    Добрый день!
    В связи с введением новых правил, в чеках теперь должны быть указаны товары. Кто-нибудь решил такую задачу? Можете подсказать решение?
      Alexey
      14 февраля 2021, 22:31
      1
      +2
      Привет! В файле core/components/minishop2/custom/payment/robokassa.class.php заменить метод getPaymentLink на следующий код:

      public function getPaymentLink(msOrder $order)
          {
              $id = $order->get('id');
              $sum = number_format($order->get('cost'), 2, '.', '');
      	//список товаров в заказе
      	$order_goods = $this->modx->getCollection('msOrderProduct', ['order_id' => $id]);
      	$tmp = [];
      	foreach($order_goods as $key => $good) {
      	    $tmp[$key]['name'] = $good->name;
      	    $tmp[$key]['quantity'] = $good->count;
      	    $tmp[$key]['sum'] = $good->cost;
      	    $tmp[$key]['tax'] = 'none';
      	}
      		
              //номенклатура заказа
              $receipt = ['items' => array_values($tmp)];
      	$receipt_json = json_encode($receipt, JSON_UNESCAPED_UNICODE);
      	$SignatureValue = md5($this->config['login'] . ':' . $sum . ':' . $id. ':' . $receipt_json . ':' . $this->config['pass1']);
              $request = array(
                  'url' => $this->config['checkoutUrl'],
                  'MrchLogin' => $this->config['login'],
                  'OutSum' => $sum,
                  'InvId' => $id,
                  'Desc' => 'Payment #' . $id,
                  'IncCurrLabel' => $this->config['currency'],
                  'Culture' => $this->config['culture'],
                  'Receipt' => $receipt_json,
                  'SignatureValue' => $SignatureValue,
              );
              
              if (!empty($this->config['test_mode'])) {
                  $request['isTest'] = 1;
              }
              $link = $this->config['checkoutUrl'] . '?' . http_build_query($request);
              return $link;
          }

      Компонент давно не обновляется, нужна была оперативность, поэтому правил исходники компонента. Нужно иметь в виду, что если выйдет апдейт, то эти правки будут затерты. Про расширение классов, думаю, можно немало информации найти, хотя бы здесь.

      Делал под конкретный сайта, поэтому передавал только необходимые параметры. Советую почитать тут ( skrinshoter.ru/s/140221/5d2fQ6PK?a ), возможно, нужно передать другую систему налогообложения, налоговую ставку и т.д…
      Виталий
      08 июня 2021, 12:49
      0
      Подскажите, что нужно указать в системных настройках чтобы передавалась корзина в чек в параметре ms2_payment_rbks_fiskal, поставить 1?
        Виталий
        08 июня 2021, 12:59
        0
        да, работает, нужно еще было подключить Робочеки в ЛК робокассы
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        13