vostokfree VIP
Total posts: 59
15 Jun 2014 18:56

Не могу настроить плагтн оплаты Интеркасса. В настройках пишет что необходимо указать Status URL скопировав ссылку из парамтера Ссылка Уведомления (2) и остальные урлы как Success URL и Fail URL скопировав параметере Ссылка Возврата (1). А этих ссылок нигде нет. 111

Last Modified: 15 Nov 2017


telopa
Total posts: 11
15 Jul 2015 11:58

Обновил интеграцию с интеркасса, но проблема осталась: после оплаты не открывается автоматически доступ к купленному тренингу. Вот информация из лог:

Accept started ---:Array
(
    [id] => 86
    [user_id] => 367
    [plan_id] => 5
    [invoice_id] => 0
    [published] => 0
    [ctime] => 0000-00-00 00:00:00
    [extime] => 0000-00-00 00:00:00
    [created] => 2015-07-15 14:35:06
    [purchased] => 0000-00-00 00:00:00
    [lastsent] => 0000-00-00 00:00:00
    [price] => 10.00
    [access_count] => 0
    [access_count_mode] => 0
    [access_limit] => 0
    [gateway] => interkassa
    [gateway_id] => 
    [parent] => 0
    [track_active] => 0
    [track_disactive] => 0
    [activated] => 0
    [checked_out] => 0
    [checked_out_time] => 0000-00-00 00:00:00
    [note] => 
    [invoice_num] => 0
    [fields] => 
    [discount] => 0.00
    [discount_type] => 
)

IK: Verification failed:Array
(
    [ik_co_id] => 558.........569
    [ik_co_prs_id] => 30..........27
    [ik_inv_id] => 38.....90
    [ik_inv_st] => success
    [ik_inv_crt] => 2015-07-15 14:37:13
    [ik_inv_prc] => 2015-07-15 14:38:31
    [ik_trn_id] => 6957218
    [ik_pm_no] => 86
    [ik_pw_via] => privat24_w1_merchant2_uah
    [ik_am] => 10.00
    [ik_co_rfn] => 9.6000
    [ik_ps_price] => 10.00
    [ik_cur] => UAH
    [ik_desc] => Тест - про расстановки [Тест - про расстановки]
    [ik_sign] => IYyKLUgFQD4NJ8wRxRVMVg==
)

Accept started ---:Array
(
    [id] => 86
    [user_id] => 367
    [plan_id] => 5
    [invoice_id] => 0
    [published] => 0
    [ctime] => 0000-00-00 00:00:00
    [extime] => 0000-00-00 00:00:00
    [created] => 2015-07-15 14:35:06
    [purchased] => 0000-00-00 00:00:00
    [lastsent] => 0000-00-00 00:00:00
    [price] => 10.00
    [access_count] => 0
    [access_count_mode] => 0
    [access_limit] => 0
    [gateway] => interkassa
    [gateway_id] => 
    [parent] => 0
    [track_active] => 0
    [track_disactive] => 0
    [activated] => 0
    [checked_out] => 0
    [checked_out_time] => 0000-00-00 00:00:00
    [note] => 
    [invoice_num] => 0
    [fields] => 
    [discount] => 0.00
    [discount_type] => 
)

IK: Verification failed:Array
(
    [ik_co_id] => 558..............569
    [ik_co_prs_id] => 30.........27
    [ik_inv_id] => 38...........90
    [ik_inv_st] => success
    [ik_inv_crt] => 2015-07-15 14:37:13
    [ik_inv_prc] => 2015-07-15 14:38:31
    [ik_trn_id] => 69.......18
    [ik_pm_no] => 86
    [ik_pw_via] => privat24_w1_merchant2_uah
    [ik_am] => 10.00
    [ik_co_rfn] => 9.6000
    [ik_ps_price] => 10.00
    [ik_cur] => UAH
    [ik_desc] => Тест - про расстановки [Тест - про расстановки]
    [ik_sign] => IYyKLUgFQD4NJ8wRxRVMVg==
)

Sergey
Total posts: 13,748
20 Jul 2015 06:48

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


Guest
22 Jul 2015 15:53

Столкнулся с той же самой проблемой! В логах тоже самое,что у всех. Поставил "Проверять подпись в настроках запроса платежа" и стала вылетать ошибка что ik_sign неверный.

Поменял формирование в коде на офф с их сайта + вставил внутри фукнции свой ключ. https://www.interkassa.com/files/docs/IK2.SCI.Protocol.v0.9.9.ru.pdf

private function _getHash($dataSet)
    {
        $key="****";
        unset($dataSet['ik_sign']); //удаляем из данных строку подписи
        ksort($dataSet, SORT_STRING); // сортируем по ключам в алфавитном порядке элементы массива
        array_push($dataSet, $key); // добавляем в конец массива "секретный ключ"
        $signString = implode(':', $dataSet); // конкатенируем значения через символ ":"
        $sign = base64_encode(md5($signString, true)); // берем MD5 хэш в бинарном виде по сформированной строке и кодируем в BASE64
        return $sign; // возвращаем результат
    }

Не помогло, решил выключит необязаетльные параметры в ik_sign Выключил

$param['ik_usr']   = JFactory::getUser()->get('email');

И ошибка пропала, платеж прошел. Но от сервера ответ 500, как и раньше(до Включения "Проверять подпись в настроках запроса платежа")

Hешил разобраться в url Интеркасса выдаёт о платеже, который успешно прошел: Результат: Incorrect responce Сообщение: Http code doesn't match: need: 200, received: 500

Запросил у них данные, что они передают, но как я понял берётся только 1: "ik_inv_st"

Добрый день!

В своем уведомлении, которое отправляем на УРЛ взаимодействия мы передаем вот такой набор данных

{
"ik_co_id":"*****",
"ik_co_prs_id":"***928444",
"ik_inv_id":"****67932",
"ik_inv_st":"success",
"ik_inv_crt":"2015-07-08 18:06:48",
"ik_inv_prc":"2015-07-08 18:07:35",
"ik_trn_id":"6836302",
"ik_pm_no":"34",
"ik_pw_via":"beeline_instapay_merchant_rub",
"ik_am":"10.00",
"ik_co_rfn":"10.0000",
"ik_ps_price":"10.62",
"ik_cur":"RUB",
"ik_desc":"*********",
"ik_sign":"*****"}

"Получив это сообщение вы должны проверить подпись, чтоб убедиться, что данные не поддельные, и вернуть нам ответ 200 (как указано в настройках кассы в разделе Интерфейсы Дополнительно).

На сейчас мы в ответ получаем 500 ошибку. Устраните у себя проблему"

Решил попробовать ссылки успешной оплаты и т.д index.php?option=com_emerald&Itemid=1&task=payment.back&processor=interkassa и вот этот index.php?option=com_emerald&Itemid=1&task=plans.create&processor=interkassa для взаимодействия. Но они выдают какраз 500 ошибку p.s ID пробовал менять на id подписки, которая не активирвоалась в системе

По моему ошибка в формировании URL обработки и ответа


Sergey
Total posts: 13,748
23 Jul 2015 13:31

Ссылки взаимодействи выдют ошибки потому что в них нету айди подписки. Она втсатвляется туда когда формируется платеж и перезаписывается к каждому платежу. Там есть еще один параметр &em_id=23 где 23 это айди подписки о которой пришло уведомление.

Конечно это не обязательный параметер и айди подписки может и из ik_pm_no взяться как это и делается в методе get_subscrption_id в файле терминала.

Ошибка 500 это значит что, что то не так. По идее там должно быть и сообщение ошибки.

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


Guest
24 Jul 2015 11:48

Я не прохожу верификацию.

function accept(&$subscription, $plan)
    {
        $post = JFactory::getApplication()->input;

        if($this->_getHash($_POST) != $post->get('ik_sign'))
        {
            $this->setError(JText::_('EMR_CANNOT_VERYFY'));
            $this->log('IK: Verification failed', $_POST);

            return FALSE;

Решил я увеличить лог, что бы увидеть все используемые данные и добавил 2 строчки:



$this->log('IK: HASH', $this->_getHash($_POST)); $this->log('IK: IK_SIGN', $post->get('ik_sign'));

IK: HASH:X*****39/Y****rg== IK: IK_SIGN:X*****39Y****Brg Отличия в слеше(/) и в знаках равно в конце(==)

Добавил проверку

        $str = preg_replace('%[^A-Za-z0-9]%', '', $this->_getHash($_POST)); 
        if($str != $post->get('ik_sign'))

Проблема решена! Я так понял это интеркасса посылает без спец.символов.

Надеюсь это поможет остальным в решение схожей или такой-же проблемы. Было бы здорово получить свежую версию компонента или подписку за решение проблемы ^^


telopa
Total posts: 11
26 Jul 2015 12:49

Я не программист, поэтому ничего не понял, что нужно сделать, чтобы после оплаты начал открывать автоматически доступ.

Напишите, пожалуйста, какой код и куда именно его вставить.


Guest
27 Jul 2015 18:26

Всё очень просто. Надо отредактировать файл, который находится: Корень сайта/components/com_emerald/library/gateways/interkassa/interkassa.php Далее находит в начале файла вот такой код:

 if($this->_getHash($_POST) != $post->get('ik_sign'))
        {
            $this->setError(JText::_('EMR_CANNOT_VERYFY'));
            $this->log('IK: Verification failed', $_POST);

Если не ошибаюсь, то это проверка кода который вернули интеркасса с тем, что отправлял вас сервер(сайт) Дописываем перед условием (if ....) 1)Новую строку: $str 2)Подставляем её в неш условие см код ниже.

$str = preg_replace('%[^A-Za-z0-9]%', '', $this->_getHash($_POST)); //Создаём переменню
 if($str != $post->get('ik_sign')) // Меняем условие с учётом нашем новой перменной

Так же я ранее закомментировал в это же файле вот эту строку:

// $param['ik_usr']   = JFactory::getUser()->get('email');

И ранее включил в настройках кассы на сайте интеркассы - "Проверять подпись в настроках запроса платежа"

Но мне кажется разработчки в скором времени исправят этот недочёт.


telopa
Total posts: 11
03 Aug 2015 13:00

Спасибо за помощь, но у меня проблема не решена.

Что я сделал:

  1. в файл Корень сайта/components/com_emerald/library/gateways/interkassa/interkassa.php добавил 2 новые строки, получилось: $str = preg_replace('%[^A-Za-z0-9]%', '', $this->getHash($_POST)); if($str != $post->get('ik_sign')) if(strtoupper(base64_decode($this->_getHash($_POST))) != strtoupper(base64_decode(urldecode($post->get('ik_sign'))))) { $this->setError(JText::('EMR_CANNOT_VERYFY')); $this->log('IK: Verification failed', $_POST); return FALSE; }
  2. Закомментировал: // $param['ik_usr'] = JFactory::getUser()->get('email');
  3. включил в настройках кассы на сайте интеркассы - "Проверять подпись в настроках запроса платежа". РЕЗУЛЬТАТ: при нажатии на кнопку "Купить" меня перенаправляют на сайт https://sci.interkassa.com/... , где такая надпись: "Ошибка приложения! Подпись запроса "ik_sign" не верна"

Также я сделал все тоже самое, но кроме третьего пункта (не включил "Проверять подпись") РЕЗУЛЬТАТ: оплата прошла, но доступ автоматически не открылся.

Я что-то не так делаю или что-то еще нужно сделать, чтобы наконец-то плагин начал работать?


Sergey
Total posts: 13,748
03 Aug 2015 16:48

telopa Я что-то не так делаю или что-то еще нужно сделать, чтобы наконец-то плагин начал работать?

Не партесь. Я сделал изменения и закачал новую версию плагина 9.26. Просто обновитесь.


telopa
Total posts: 11
04 Aug 2015 07:40

Я просто обновился. Результат не поменялся - после оплаты автоматический доступ не открылся.

Какие данные вам прислать, чтобы вы поняли в чем может быть проблема?


Sergey
Total posts: 13,748
04 Aug 2015 10:42

Лог включили? Что пишет в лог? Он находится в logs/interkassa.txt. Нужно убедтся что интекасса вам вообще отпраляет запросы. Какая верстия интеркассы? 2 или 1?


telopa
Total posts: 11
04 Aug 2015 15:10
  • Какая верстия интеркассы? 2 или 1? Как это узнать?

Вот какие были данные в логе:

Accept started ---:Array
(
    [id] => 102
    [user_id] => 367
    [plan_id] => 5
    [invoice_id] => 0
    [published] => 0
    [ctime] => 0000-00-00 00:00:00
    [extime] => 0000-00-00 00:00:00
    [created] => 2015-08-04 17:50:24
    [purchased] => 0000-00-00 00:00:00
    [lastsent] => 0000-00-00 00:00:00
    [price] => 10.00
    [access_count] => 0
    [access_count_mode] => 0
    [access_limit] => 0
    [gateway] => interkassa
    [gateway_id] => 
    [parent] => 0
    [track_active] => 0
    [track_disactive] => 0
    [activated] => 0
    [checked_out] => 0
    [checked_out_time] => 0000-00-00 00:00:00
    [note] => 
    [invoice_num] => 0
    [fields] => 
    [discount] => 0.00
    [discount_type] => 
)

IK: Verification failed:Array
(
    [ik_co_id] => 558.....569
    [ik_co_prs_id] => 300.....827
    [ik_inv_id] => 38.....75
    [ik_inv_st] => success
    [ik_inv_crt] => 2015-08-04 17:52:47
    [ik_inv_prc] => 2015-08-04 17:53:36
    [ik_trn_id] => 7291760
    [ik_pm_no] => 102
    [ik_pw_via] => privat24_w1_merchant2_uah
    [ik_am] => 10.00
    [ik_co_rfn] => 9.6000
    [ik_ps_price] => 10.00
    [ik_cur] => UAH
    [ik_desc] => Тест - про  [Тест - про ]
    [ik_sign] => C1kn.....8A==
)

Accept started ---:Array
(
    [id] => 102
    [user_id] => 367
    [plan_id] => 5
    [invoice_id] => 0
    [published] => 0
    [ctime] => 0000-00-00 00:00:00
    [extime] => 0000-00-00 00:00:00
    [created] => 2015-08-04 17:50:24
    [purchased] => 0000-00-00 00:00:00
    [lastsent] => 0000-00-00 00:00:00
    [price] => 10.00
    [access_count] => 0
    [access_count_mode] => 0
    [access_limit] => 0
    [gateway] => interkassa
    [gateway_id] => 
    [parent] => 0
    [track_active] => 0
    [track_disactive] => 0
    [activated] => 0
    [checked_out] => 0
    [checked_out_time] => 0000-00-00 00:00:00
    [note] => 
    [invoice_num] => 0
    [fields] => 
    [discount] => 0.00
    [discount_type] => 
)

IK: Verification failed:Array
(
    [ik_co_id] => 5586.....569
    [ik_co_prs_id] => 300.....827
    [ik_inv_id] => 38.....075
    [ik_inv_st] => success
    [ik_inv_crt] => 2015-08-04 17:52:47
    [ik_inv_prc] => 2015-08-04 17:53:36
    [ik_trn_id] => 729.....60
    [ik_pm_no] => 102
    [ik_pw_via] => privat24_w1_merchant2_uah
    [ik_am] => 10.00
    [ik_co_rfn] => 9.6000
    [ik_ps_price] => 10.00
    [ik_cur] => UAH
    [ik_desc] => Тест - про [Тест - про]
    [ik_sign] => C1k.....v8A==
)

Sergey
Total posts: 13,748
05 Aug 2015 10:11

Отредактируйте файл components/com_emerald/library/gateways/interkassa/interkassa.php и сразу после строки 22

$this->log('IK: Verification failed', $_POST);

Добавте 2 строки

$this->log('IK: post', $this->_clean($this->_getHash($_POST)));
$this->log('IK: or', $this->_clean($post->get('ik_sign')));

Очистите лог, и попробуйте еще раз. И скажите что будет в логе теперь. Вы обновились на последнюю версию?


telopa
Total posts: 11
05 Aug 2015 12:42

Да, у меня установлена Interkassa 9.26

Сделал, как вы и просили. Вот что в логах:

Accept started ---:Array
(
    [id] => 103
    [user_id] => 367
    [plan_id] => 5
    [invoice_id] => 0
    [published] => 0
    [ctime] => 0000-00-00 00:00:00
    [extime] => 0000-00-00 00:00:00
    [created] => 2015-08-05 15:23:18
    [purchased] => 0000-00-00 00:00:00
    [lastsent] => 0000-00-00 00:00:00
    [price] => 10.00
    [access_count] => 0
    [access_count_mode] => 0
    [access_limit] => 0
    [gateway] => interkassa
    [gateway_id] => 
    [parent] => 0
    [track_active] => 0
    [track_disactive] => 0
    [activated] => 0
    [checked_out] => 0
    [checked_out_time] => 0000-00-00 00:00:00
    [note] => 
    [invoice_num] => 0
    [fields] => 
    [discount] => 0.00
    [discount_type] => 
)

IK: Verification failed:Array
(
    [ik_co_id] => 558........569
    [ik_co_prs_id] => 300......827
    [ik_inv_id] => 38.....03
    [ik_inv_st] => success
    [ik_inv_crt] => 2015-08-05 15:25:44
    [ik_inv_prc] => 2015-08-05 15:26:44
    [ik_trn_id] => 7307062
    [ik_pm_no] => 103
    [ik_pw_via] => privat24_w1_merchant2_uah
    [ik_am] => 10.00
    [ik_co_rfn] => 9.6000
    [ik_ps_price] => 10.00
    [ik_cur] => UAH
    [ik_desc] => Тест - про  [Тест - про ]
    [ik_sign] => r9i5H...............AkU9g==
)

IK: post:ERO7Y.......3OJUJQ
IK: or:R9I5HA...........NLAKU9G

Sergey
Total posts: 13,748
06 Aug 2015 07:16

Вы в тестовм режиме проверяете или это реальная транзакция?

Я ни знаю почему не проходит верификацию. Проверте что в поле где вписано секретное слово нет пробелов, что все четко заполнено как в интеркассе так и в плане.


Guest
07 Aug 2015 08:00

Если не помгло, что выше писал, попробуйте отклбчить все необязательные параметры при передаче данных, можете спросить у разработчика. Интеркасса, насколько я вижу посылает "успех операции" и единственное в чём может быть проблема это в сверке подписей колторый генерирует сайт и который приходит от интеркассы. Можно попробовать его заменить на офф с сайта интеркассы, в том же файле, внизу(старый просто закомментируйте при помощи // или /текст/)

private function _getHash($dataSet)
    {
        $key="****"; //Ваш код магазина
        unset($dataSet['ik_sign']); //удаляем из данных строку подписи
        ksort($dataSet, SORT_STRING); // сортируем по ключам в алфавитном порядке элементы массива
        array_push($dataSet, $key); // добавляем в конец массива "секретный ключ"
        $signString = implode(':', $dataSet); // конкатенируем значения через символ ":"
        $sign = base64_encode(md5($signString, true)); // берем MD5 хэш в бинарном виде по сформированной строке и кодируем в BASE64
        return $sign; // возвращаем результат
    }

Так же я не совсем понял зачем чистка записей. котоыые попоадут в лог, т.к если не совпадают можно не замтеить в логе этого.


telopa
Total posts: 11
03 Sep 2015 06:05

- Вы в тестовм режиме проверяете или это реальная транзакция? Это реальная транзакция.

- Проверте что в поле где вписано секретное слово нет пробелов Проверил, пробелов нет.

- все четко заполнено как в интеркассе так и в плане Да, все заполнено правильно. В этой переписке (01 Jul 2015 20:09) я представил скриншоты всех настроек.

- Можно попробовать его заменить на офф с сайта интеркассы, в том же файле, внизу Спасибо за совет, но не помогло.


Sergey
Total posts: 13,748
08 Sep 2015 14:48

Ну все что я могу предложить если вы дадите мне в приватном комментрии доступ как к сайту, так интеркассе. Я попробую проверить.


Guest
21 Oct 2016 07:35

Так что, друзья ?! Вопрос решили ? Та же проблема. Не активируется автоматически. Версия Интеркасса 9.27 Также , после успешной оплаты не происходит редирект на указанный в плане в поле "Ссылка успешной оплаты" url. Перекидывает на историю подписок. Платеж делаю ТЕСТОВЫЙ. В Интеркассе разрешено все поля переопределять в запросе.


Guest
21 Oct 2016 10:43

Добавлю. В кабинете Интеркассы в подробном описании платежа выдает следующее: Ответ сервера: Результат: Incorrect responce Сообщение: Http code doesn't match: need: 200, received: 500

Powered by Cobalt