No_name Опубликовано 5 октября, 2017 · Жалоба 1 час назад, Andrei сказал: Кто готов помочь в интеграции ЛБ с bisys - напишите в личку. От саппорта бисис толку никакого. А что там сложного то? Мы, например, интегрировались с ними по протоколу осмп. Чуть-чуть переделать скрипты и все. Правда, уже не работаем с ними из-за сбера... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 6 октября, 2017 · Жалоба 16 часов назад, Brainiac сказал: Мы, например, интегрировались с ними по протоколу осмп. Чуть-чуть переделать скрипты и все. Вот уже несколько человек так сказало, но конкретно никто ничего не посоветовал. Тоже пытаюсь переделать скрипт ОСМП, но увы. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 6 октября, 2017 · Жалоба Так покажите этот скрипт, тогда можно будет что-то определенное сказать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 6 октября, 2017 · Жалоба 2 часа назад, alibek сказал: Так покажите этот скрипт В прилагаемом файле то, что идет в комплекте с ЛБ Секцию констант конечно привел к тому, что мне надо ############## ! fix me ! ############### my $lbcore_host = 'localhost';<><------> # IP сервера LBcore my $manager_login = 'ckassa';<-><------> # логин менеджера АСР my $manager_pass = 'xxxxxxxxxx';<><------> # пароль менеджера АСР # my $type = TYPE_AGRM_NUM;<---><------> # Тип идентификатора my $type = TYPE_VG_LOGIN;<-----><------> # Тип идентификатора ######################################### В качестве лицевого счета используется введенный пользователем цифробуквенный логин его конкретной учетки, которую он хочет пополнить. Судя по всему, скрипт корректно отрабатывает только если логин полностью цифровой (наверное где-то есть проверка в скрипте). Написано на перле, я с ним не дружу от слова "совсем" :( osmp.cgi Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 6 октября, 2017 · Жалоба Библиотеки LB из /usr/local/billing/payments — это видимо часть ЛанБиллинга? Его бы тоже неплохо было глянуть (файл LB.pm), есть ли там тип TYPE_VG_LOGIN и как он обрабатывается. Скрипт osmp посмотрел. Строка 66: if ( $account !~ /^\d+$/ ) Тут проверка содержимого лицевого счета. Если у вас цифробуквенные логины, то регулярное выражение нужно поправить, например на "/^[0-9a-z]+$/". Правда вначале нужно проверить (просмотреть дамп), в каком виде сам Бисис передает введенный лицевой счет. Возможно он на своей стороне фильтрует ввод (разрешает только цифры). Строка 75: ($r, $balance) = $pay->check( 'number' => $account... Место для потенциального сбоя. Нужно просмотреть код процедуры check из модуля LB.pm, если эта процедура ожидает числовой тип у аргумента number, то при передаче символьного значения могут быть проблемы. Строка 88: if ( $account !~ /^\d+$/ ) То же самое, что со строкой 66, нужно поправить регулярное выражение, разрешив символы. Строка 117: = $pay->payment ( Аналогично предыдущему пункту, нужно проверить, что процедура payment из модуля LB.pm не сбоит при нечисловом аргументе number. Еще из возможных проблем — не вижу в коде процедуры print_response формирования подписи (хеш MD5 для текста ответа). Да и подпись запроса не проверяется. Насколько я помню, в протоколе требуется подписание запросов/ответов. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 6 октября, 2017 · Жалоба Вот мой скрипт платежного шлюза: paygate.zip К архиву еще прилагается пачка SQL-запросов, потому что у меня скрипт работает непосредственно с БД. В случае с ЛанБиллинг нужно использовать его API или модуль LB.pm с методами check и payment. Основные файлы: ./www/bisys.php - точка входа. Делает базовую проверку и инициализирует класс-адаптер. ./lib/classes/Agent/bisys.class.php - класс-адаптер для Бисис. Содержим методы: parse - основной метод, в который из точки входа передаются данные запроса Бисис. process - выполнение запроса (проверка платежа или проведение платежа). У меня используются классы Billing и Payment, в которые "завернута" логика работы через SQL. Для ЛанБиллинг его реализацию нужно переделать под использование модуля LB. registry - сверка проведенных платежей с реестром платежей. Для ЛанБиллинг не требуется. response - формирование ответов на запросы. После подтверждения оплаты в БД обновляется статус платежа (объект Payment), для ЛанБиллинг это не нужно. Вообщем я вырезал из архива все, связанное с особенностями нашего биллинга и конфиденциальностью, поэтому в текущем виде скрипт неработоспособен (нет SQL-запросов и некоторых других компонентов), но для понимания логики работы все есть. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 6 октября, 2017 · Жалоба Огромное спасибо! :) Будем разбираться. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
No_name Опубликовано 6 октября, 2017 · Жалоба 2 часа назад, Andrei сказал: Написано на перле, я с ним не дружу от слова "совсем" :( А с чем дружите, на том и пишите. Если можно, скиньте их протокол взаимодействия, просто интересно, какие у них там требования сейчас. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 6 октября, 2017 · Жалоба Документация Бисис по взаимодействию по протоколу ОСМП прилагается. OSMP_protokol.pdf Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
No_name Опубликовано 6 октября, 2017 · Жалоба Так это старый протокол осмп. Я так помню у бисиса был свой протокол, а так же они делали по новому протокол осмп с md5 или чем-то подобным. Могу и ошибаться, но подпись в протоколе у них была. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 6 октября, 2017 · Жалоба Это то, что прислали из Бисис для интеграции неделю назад. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 11 октября, 2017 · Жалоба В 06.10.2017 в 13:27, alibek сказал: Библиотеки LB из /usr/local/billing/payments — это видимо часть ЛанБиллинга? Его бы тоже неплохо было глянуть (файл LB.pm), есть ли там тип TYPE_VG_LOGIN и как он обрабатывается. Тип есть. Как обрабатывается не понятно. В 06.10.2017 в 13:27, alibek сказал: Правда вначале нужно проверить (просмотреть дамп), в каком виде сам Бисис передает введенный лицевой счет. Возможно он на своей стороне фильтрует ввод (разрешает только цифры). А как их дамп посмотреть? Просто tcpdump и т.п.? LB.pm Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 11 октября, 2017 · Жалоба Да, про это я не подумал, взаимодействие ведь по HTTPS идет, через tcpdump ничего полезного не увидеть. Ну тогда логгирование нужно будет подробное включать. Файл LB.pm просмотрел. И может я что-то пропустил, но помоему он не умеет находить клиента по TYPE_VG_LOGIN (строки 310-316). Используйте TYPE_AGRM_* или TYPE_USER_LOGIN. Если сможете осилить Perl, то можно перед строкой 310 получить дамп переменной $ret, после чего добавить примерно такую строчку: elsif ($fetch_param == TYPE_VG_LOGIN) { $acc = $ret->result->{'vgroup'}->{'account'}; } (конкретное значение зависит от структуры этой переменной) Кроме того, в этом модуле используется SOAP API и вызывается метод ExternPayment, в который передаются параметры платежа (тип идентификатора и идентификатор), нужно убедиться, что это API поддерживает TYPE_VG_LOGIN. Вообщем, если ТП отмалчивается, то безопаснее использовать TYPE_AGRM_* или TYPE_USER_LOGIN. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 11 октября, 2017 · Жалоба TYPE_USER_LOGIN тоже вполне подойдет. В общем покрутил я по-разному и видно, что если логин пользователя полностью цифровой, то тест проходит успешно. Если логин цифро-буквенный, то нет, несмотря на рекомендованные исправления: Цитата if ( $account !~ /^\d+$/ ) Тут проверка содержимого лицевого счета. Если у вас цифробуквенные логины, то регулярное выражение нужно поправить, например на "/^[0-9a-z]+$/". На цифро-буквенный логин скрипт отвечает "4 Неверный формат идентификатора абонента" Саппорт по этому поводу говорит только "таков ответ вашего биллинга, вот и разберитесь почему он таков. Ведь цифровые значения ЛС обрабатываются корректно? С кодировкой не может быть проблем?" С кодировкой вряд ли есть проблемы, т.к. буквы латинские. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 11 октября, 2017 · Жалоба 3 минуты назад, Andrei сказал: несмотря на рекомендованные исправления А регистр букв какой в логине? Можно для теста вообще закомментировать проверку, удалить или закомментировать if с действиями. Если поможет, значит маска регулярного выражения неправильная. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 11 октября, 2017 · Жалоба Регистр - маленькие буквы. Я уж подстраховался и сделал регулярное выражение /^[0-9a-zA-Z]+$/ Закомментировал if с регуляркой - так тесты проходит. Я как-то не пойму как тут отладку-то вставить. Например попробовал if ( $account !~ /^[0-9a-zA-Z]+$/ ). { # Неверное значение № абонента (синтаксис) print "$account"; $result_code = 4; } ... и ничего не выводит. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 11 октября, 2017 · Жалоба Например вставить такой блок: { use Data::Dumper; open(LOG, '>>:utf8', "/tmp/debug.txt"); print LOG Dumper($account); close(LOG); } Вставить этот блок в файл, сделать пополнение счета и проверить файл /tmp/debug.txt. Если с закомментированным блоком if все работает, значит что-то с $account не то. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 11 октября, 2017 · Жалоба В дебаг попало $VAR1 = 'var_test'; (сама учетка - var_test) Если цифровой логин, то "$VAR1 = '1643';" Ну т.е. все верно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
karpa13a Опубликовано 11 октября, 2017 · Жалоба var_test не пройдет по a-zA-Z0-9 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 11 октября, 2017 · Жалоба karpa13a, ну точно! :) "Семен Семеныч..." :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
No_name Опубликовано 11 октября, 2017 · Жалоба 12 минут назад, Andrei сказал: karpa13a, ну точно! :) "Семен Семеныч..." :( Вот потому, мы не стали фигней заниматься с логинами, просто всем прописываем цифровой номер договора абонентам и по нему проводим платежи. И людям легко запомнить 6 цифр, нежели набирать все эти буквоцифры и еще небось со спецзнаками. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 11 октября, 2017 · Жалоба Договора у нас тоже цифро-буквенные - так кто-то придумал давно :) А на счет спецзнаков в логинах - юзер сам себе логин придумывает, так что придумал сложный - ССЗБ. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
YuryD Опубликовано 11 октября, 2017 · Жалоба 2 минуты назад, Andrei сказал: Договора у нас тоже цифро-буквенные - так кто-то придумал давно :) А на счет спецзнаков в логинах - юзер сам себе логин придумывает, так что придумал сложный - ССЗБ. Что да, то - да ! Для платежей у нас есть только номер лицевого, а он - цифровой и автоинкремент в бд. Для каждого клиента, лицевых, бывает у них и насколько - изволь запомнить. ИПшники после трёх итераций сами запоминают, на каком номере их каждая точка. Нетап - увы. У пользователя может быть куча лицевых счетов, с отдельной тарификацией. Но тут мы не при делах - клиент сам всё для себя придумал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 12 октября, 2017 · Жалоба Благодарю всех коллег, помогавших с сабжем. Вроде все заработало. :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 16 октября, 2017 · Жалоба Был неприятно удивлен их комиссиями: в прайсе при заключении договора была указана и так немаленькая комиссия в 3,7%, а в реальности она по некоторым способам превышает 8% Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...