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
)
Комментарии: 13
Говорит, wrong signature — то есть, неправильная подпись.
Или что-то с паролями не настроено, или у Robokassa что-то поменялось в подписывании.
Или что-то с паролями не настроено, или у Robokassa что-то поменялось в подписывании.
Перепроверил эти пароли joxi.ru/7KfXU_3JTJD1RzwySpk joxi.ru/GKjXU_3JTJB0NN-zpqY опять туже ошибку выдает, вроде больше паролей нету для робокассы
Собрал тестовый сайт — всё работает.
Проверяй — s6285.test.modx.pro/manager/
Товар, корзина, настройки
Проверяй — s6285.test.modx.pro/manager/
Логин s6285 Пароль YGm7Eama2I1q
Товар, корзина, настройки
Не успел понять к сожалению в чем дело, если будет возможность глянь на этом тестовом сайте почему не меняет статус, нет так нет и на том спасибо)
http://s6296.test.modx.pro/manager/
Логин s6296
Пароль FeJNJJ9mXO-j
Столкнулся с такой же проблемой, пока сайт работает в тестовом режиме, меняю пароли первый платеж проходит, второй выдает ошибку, Василий в чем может быть проблема
[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
)
[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
)
У меня возникла похожая проблема, только в тестовом режиме компонент ругался при каждой оплате. Методом тыка выяснил, что сигнатура в компоненте не совпадает с сигнатурой от робокассы, и связано это вроде как с наличием копеек.
Помогло поправить метод receive в классе оплаты Robokassa (core/components/minishop2/custom/payment/robokassa.class.php)
Добавил вычисление сигнатуры без копеек
Помогло поправить метод 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);
}
}
Спасибо!
Добрый день!
В связи с введением новых правил, в чеках теперь должны быть указаны товары. Кто-нибудь решил такую задачу? Можете подсказать решение?
В связи с введением новых правил, в чеках теперь должны быть указаны товары. Кто-нибудь решил такую задачу? Можете подсказать решение?
Привет! В файле core/components/minishop2/custom/payment/robokassa.class.php заменить метод getPaymentLink на следующий код:
Компонент давно не обновляется, нужна была оперативность, поэтому правил исходники компонента. Нужно иметь в виду, что если выйдет апдейт, то эти правки будут затерты. Про расширение классов, думаю, можно немало информации найти, хотя бы здесь.
Делал под конкретный сайта, поэтому передавал только необходимые параметры. Советую почитать тут ( skrinshoter.ru/s/140221/5d2fQ6PK?a ), возможно, нужно передать другую систему налогообложения, налоговую ставку и т.д…
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 ), возможно, нужно передать другую систему налогообложения, налоговую ставку и т.д…
Благодарю! Все получилось и работает, как нужно.
Спасибо!
Подскажите, что нужно указать в системных настройках чтобы передавалась корзина в чек в параметре ms2_payment_rbks_fiskal, поставить 1?
да, работает, нужно еще было подключить Робочеки в ЛК робокассы
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.