1 час назад, Andrei сказал:

Кто готов помочь в интеграции ЛБ с bisys - напишите в личку. От саппорта бисис толку никакого.

А что там сложного то? Мы, например, интегрировались с ними по протоколу осмп. Чуть-чуть переделать скрипты и все.

Правда, уже не работаем с ними из-за сбера...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
16 часов назад, Brainiac сказал:

Мы, например, интегрировались с ними по протоколу осмп. Чуть-чуть переделать скрипты и все.

Вот уже несколько человек так сказало, но конкретно никто ничего не посоветовал.

Тоже пытаюсь переделать скрипт ОСМП, но увы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так покажите этот скрипт, тогда можно будет что-то определенное сказать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Библиотеки 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 для текста ответа). Да и подпись запроса не проверяется.

Насколько я помню, в протоколе требуется подписание запросов/ответов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот мой скрипт платежного шлюза: 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-запросов и некоторых других компонентов), но для понимания логики работы все есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо! :) Будем разбираться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Andrei сказал:

Написано на перле, я с ним не дружу от слова "совсем" :(

 

А с чем дружите, на том и пишите.

Если можно, скиньте их протокол взаимодействия, просто интересно, какие у них там требования сейчас.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Документация Бисис по взаимодействию по протоколу ОСМП прилагается.

OSMP_protokol.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так это старый протокол осмп. Я так помню у бисиса был свой протокол, а так же они делали по новому протокол осмп с md5 или чем-то подобным.

Могу и ошибаться, но подпись в протоколе у них была.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это то, что прислали из Бисис для интеграции неделю назад.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, про это я не подумал, взаимодействие ведь по 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TYPE_USER_LOGIN тоже вполне подойдет.

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

Если логин цифро-буквенный, то нет, несмотря на рекомендованные исправления:

Цитата

 if ( $account !~ /^\d+$/  )

Тут проверка содержимого лицевого счета.

Если у вас цифробуквенные логины, то регулярное выражение нужно поправить, например на "/^[0-9a-z]+$/".

На цифро-буквенный логин скрипт отвечает "4 Неверный формат идентификатора абонента"

Саппорт по этому поводу говорит только "таков ответ вашего биллинга, вот и разберитесь почему он таков. Ведь цифровые значения ЛС обрабатываются корректно? С кодировкой не может быть проблем?"

С кодировкой вряд ли есть проблемы, т.к. буквы латинские.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, Andrei сказал:

несмотря на рекомендованные исправления

А регистр букв какой в логине?

Можно для теста вообще закомментировать проверку, удалить или закомментировать if с действиями.

Если поможет, значит маска регулярного выражения неправильная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Регистр - маленькие буквы. Я уж подстраховался и сделал регулярное выражение /^[0-9a-zA-Z]+$/

Закомментировал if с регуляркой - так тесты проходит.

 

Я как-то не пойму как тут отладку-то вставить.

Например попробовал

if ( $account !~ /^[0-9a-zA-Z]+$/ ).
{
# Неверное значение № абонента (синтаксис)
print "$account";
$result_code = 4;
}
...

и ничего не выводит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например вставить такой блок:

{
	use Data::Dumper;
	open(LOG, '>>:utf8', "/tmp/debug.txt");
	print LOG Dumper($account);
	close(LOG);
}

Вставить этот блок в файл, сделать пополнение счета и проверить файл /tmp/debug.txt.

 

Если с закомментированным блоком if все работает, значит что-то с $account не то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В дебаг попало

$VAR1 = 'var_test';

(сама учетка - var_test)

Если цифровой логин, то "$VAR1 = '1643';"

Ну т.е. все верно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

var_test не пройдет по a-zA-Z0-9

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, Andrei сказал:

karpa13aну точно! :) "Семен Семеныч..." :(

Вот потому, мы не стали фигней заниматься с логинами, просто всем прописываем цифровой номер договора абонентам и по нему проводим платежи.

И людям легко запомнить 6 цифр, нежели набирать все эти буквоцифры и еще небось со спецзнаками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Договора у нас тоже цифро-буквенные - так кто-то придумал давно :)

А на счет спецзнаков в логинах - юзер сам себе логин придумывает, так что придумал сложный - ССЗБ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, Andrei сказал:

Договора у нас тоже цифро-буквенные - так кто-то придумал давно :)

А на счет спецзнаков в логинах - юзер сам себе логин придумывает, так что придумал сложный - ССЗБ.

 Что да, то - да ! Для платежей у нас есть только номер лицевого, а он - цифровой и автоинкремент в бд. Для каждого клиента, лицевых, бывает у них и насколько - изволь запомнить. ИПшники после трёх итераций сами запоминают, на каком номере их каждая точка. Нетап - увы. У пользователя может быть куча лицевых счетов, с отдельной тарификацией. Но тут мы не при делах - клиент сам всё для себя придумал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю всех коллег, помогавших с сабжем. Вроде все заработало. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Был неприятно удивлен их комиссиями: в прайсе при заключении договора была указана и так немаленькая комиссия в 3,7%, а в реальности она по некоторым способам превышает 8%

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти