BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 апр 2024, 21:28

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 21 янв 2014, 16:08 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Код:
Запрос проверки:
<?xml version="1.0" encoding="UTF-8"?><request><params> <act>1</act><account>10000000000001</account><pay_amount>5000</pay_amount> </params><sign>89EEF9BCF47002D3BF5622F4FF07063E</sign></request>
-----------------------
ответ:
<?xml version="1.0" encoding="UTF-8"?><response><params><err_code>13</err_code><err_text>Неверная цифровая подпись</err_text></params></response>


Конфиг
Код:
mps.6.mode=1
mps.6.title=Sberbank
mps.6.protocol=bisys
mps.6.protocol.ext=noBaseAuth
mps.6.secret=test1234
mps.6.search.mode=contract
mps.6.numberPattern=^(\d{14}|\d{9})$
mps.6.search.allow.contract.groups=1,3,10
mps.6.timeoffset=300


Пробую на PHP: md5(" <act>1</act><account>10000000000001</account><pay_amount>5000</pay_amount> test1234")
(тут двойные пробелы по концам, если что) - результат подписи совпадает с запросом - 89eef9bcf47002d3bf5622f4ff07063e

Где затык ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 21 янв 2014, 16:15 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
А почему в самом запросе по одному пробелу с каждой стороны?

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 21 янв 2014, 18:07 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
это я из письма скопировал кусок. вот, чтобы убедить вас что всё честно - скопировал кусок из лог-файла сервера биллинга

Код:
01-21/19:05:20 DEBUG ["http-bio-/0.0.0.0-443"-exec-3] mps - System: Sberbank
Request:
/5/6/Pay
params=<?xml version="1.0" encoding="UTF-8"?><request><params>  <act>1</act><account>10000000000001</account><pay_amount>5000</pay_amount>  </params><sign>89EEF9BCF47002D3BF5622F4FF07063E</sign></request>&


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

Вот еще были запросы без пробелов - тоже такая же ошибка. хотя md5 сам считаю - сходится, а биллинг ругается.
Код:
01-21/20:44:37 DEBUG ["http-bio-/0.0.0.0-443"-exec-2] mps - System: Sberbank
Request:
/5/6/Pay
params=<?xml version="1.0" encoding="UTF-8"?><request><params><act>1</act><account>10000000000001</account><pay_amount>1000</pay_amount></params><sign>2ab46938c6f439ff734bbbcd2cdca839</sign></request>&


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 21 янв 2014, 18:09 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Я сам в свое время намучился с этой проверкой подписи, но все проходило нормально в конечном итоге. Придется, похоже, еще этим заняться и все проверить.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 22 янв 2014, 13:24 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
На новой сборке все работает. На рабочем стоит еще ноябрьская - там не работает. Будем обновляться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 09:40 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Вот и у меня также было... вы посматривайте периодически за протоколом, если что отписывайтесь.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 12:25 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
есть небольшое замечание

Запрос (без подписи)
Код:
<?xml version="1.0" encoding="UTF-8"?><request><params><act>1</act><account>10000000000001</account><pay_amount>5000</pay_amount></params></request>


Ответ
Код:
<?xml version="1.0" encoding="UTF-8"?><response><params><err_code>99</err_code><err_text/></params></response>


Корявый, однако, ответ получается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 14:01 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
В чем корявость ответа? В отсутствии текста?

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 14:08 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Запросы на проведение платежа таки не проходят. Проверка проходит, а платеж - нет.

Код:
01-23/17:06:04 DEBUG ["http-bio-/0.0.0.0-443"-exec-8] mps - System: Sberbank
Request:
/5/6
params=<?xml version="1.0" encoding="UTF-8"?><request><params>  <act>2</act><pay_date>2013-12-17T10:15:38</pay_date><pay_id>201000100</pay_id><account>10000000000001</account><pay_amount>100</pay_amount>  </params><sign>FE524DBFDDE15689533D89EBFD7E73D4</sign></request>&
Response:
<?xml version="1.0" encoding="UTF-8"?><response><params><err_code>99</err_code><err_text/></params></response>


При этом в server.errror.log

Код:
server 01-23/17:06:04 ERROR ["http-bio-/0.0.0.0-443"-exec-8] BiSysPaymentManager - Произошла ошибка: null
java.lang.NullPointerException
        at ru.bitel.bgbilling.modules.mps.server.bean.BiSysPaymentManager.parseRequest(BiSysPaymentManager.java:168)
        at ru.bitel.bgbilling.modules.mps.server.bean.BiSysPaymentManager.processRequest(BiSysPaymentManager.java:68)
        at ru.bitel.bgbilling.modules.mps.server.bean.MPSPaymentManager.processRequest(MPSPaymentManager.java:429)
        at ru.bitel.bgbilling.modules.mps.server.MPSExecuter.doPost(MPSExecuter.java:104)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:48)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:662)




И еще, зачем-то при логировании ответ коверкается, хотя оно UTF-8. При этом OSMP логи нормально кирилицу отображают (там тоже UTF-8)
Код:
Response:
<?xml version="1.0" encoding="UTF-8"?><response><params><err_code>0</err_code><err_text>Договор найден - опла
та возможна</err_text><account>10000000000001</account><balance>1414.38</balance></params><sign>BE3413585C6F6FAD5869
4EE1BB28FEB6</sign></response>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 14:26 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Artur писал(а):
В чем корявость ответа? В отсутствии текста?

Не только. По идее здесь должен быть ответ
Код:
11      Указаны не все необходимые параметры

т.к. отсутствует подпись. Как в общем и в случае ошибки проведения платежа. Я там нашел, что в описании протокола <agent_date>, а в запросе прилетает <pay_date>, поэтому <agent_date> отсутствует, но ловим непонятную ошибку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 14:36 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Хотя соврал

Цитата:
5. Проведение платежей

При проведении платежа все параметры запроса проверяются так же как при запросе проверки. Наличие лицевого счета и т. п. Таким образом, процедура обработки запросов у Оператора м. б. одна, и запрос проверки использует только начальную часть этой процедуры, в которой проверяются параметры.
Агент может не использовать предварительный запрос проверки.

Элементы запроса проведения платежа.

В запросе на проведение платежа используются все элементы запроса проверки и добавлены элементы:

pay_id – уникальный номер платежа. Тип: строка (могут быть буквы!). Максимальная длина 50 символов.
pay_date – дата платежа. Дата принятия платежа у клиента по часовому поясу в месте принятия платежа. Формат: “YYYY-MM-DDTHH24:MI:SS” Тип: строка.
pay_type – вид платежа. Необязательный. Используется, например, когда платежи надо делить на наличные и безналичные. Тип: строка.



Цитата:
agent_date – дата для сверки платежей. Используется дата получения платежа Агентом по часовому поясу Агента. Необязательный в запросе проверки. Формат: “YYYY-MM-DDTHH24:MI:SS” Тип: строка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 14:43 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
В общем суть в том, что без <agent_date> ловим ошибку, хотя он необязательный, но биллинг его берет за время ПС, а должен использоваться <pay_date>. Ну и надо бы делать проверку на наличие обязательных параметров и выдавать правильную ошибку.

Я видел пример реального запроса на проведение платежа, sintezwh1te поделился - там оба параметра есть <pay_date> и <agent_date>, поэтому в реальности вроде всё работает, но не корректно. А тут сам владелец протокола (Биллинговые системы) тестирование проводит и указывает на ошибку.

Приложил в аттач файл с описанием протокола, который они нам присылали.


Вложения:
Протокол Оператора 3-5-7.doc [111 КБ]
Скачиваний: 453
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 15:35 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Этот протокол есть у меня. Я с ними лично общался по этому поводу, когда писал протокол. Именно они и сказали использовать не pay_date, а agent_date в качестве даты платежа. Очень странно получается. Но подправить не сложно, конечно же. Также добавлю доп. проверки.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 15:45 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Тогда погодите, давайте с ними тоже разберемся. В протоколе пишут одно, на деле говорят другое, при тестах - вообще третье. И еще походу - может сделать опционально выдачу параметра <client_name> при ответе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 16:09 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
barguzin2 писал(а):
Тогда погодите, давайте с ними тоже разберемся. В протоколе пишут одно, на деле говорят другое, при тестах - вообще третье. И еще походу - может сделать опционально выдачу параметра <client_name> при ответе?


Согласен с вами, потому и говорю, что я помучался с ними в свое время. Но, как вижу, опять не все учел.
Добавить client_name можно без проблем, конечно же, если у вас есть договоренность с сервисом. Правда, встает вопрос, откуда брать имя клиента. У кого то оно в комменте договора, у кого то в параметре договора....

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 18:43 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Artur писал(а):
Правда, встает вопрос, откуда брать имя клиента. У кого то оно в комменте договора, у кого то в параметре договора....

Код:
В комментарии ответа (если такой поддерживатся протоколом) можно передать номер, комментарий, параметр и/или баланс договора
mps.1.comment=$contract_title ($contract_comment) [$contract_param(4)] $contract_balance

Опционально :)

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 19:00 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Действительно. Совсем забыл про коментарий.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 23 янв 2014, 19:26 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Вот что ответили БиСис
Цитата:
Так, переговорил с коллегой, действительно, приходят всегда оба, и можно принимать только agent_date, ошибкой это не является, так что прошу прощения.
Добавил тег, платежи начали проходить. Ошибок нет, разве что возвращаемая дата и время платежа <reg_date>26.11.2013 10:15:38</reg_date>, хотя по протоколу
должно быть формат “YYYY-MM-DDTHH24:MI:SS”. Поправьте, пожалуйста.

Ну и жду, когда поправят тексты ошибок.

Далее, для полного счастья добавить опционально в ответ <client_name>, при наличии в конфиге mps.1.comment.
И еще хотелось бы в логе видеть нормальные сообщения, а не краказябры типа
Код:
<err_text>Платеж зачислен на договор</err_text>

Такие же краказябры логируются и при платежах Comepay, а вот OSMP - нормально, хотя все эти системы работают в кодировке UTF-8. Это тоже поправьте, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 24 янв 2014, 10:20 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Обновление выкладывается. Посмотрите, отпишитесь.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 24 янв 2014, 19:33 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Проверил. Есть 2 замечания.

1) Теперь <client_info> добавляется в любом случае, независимо от наличия параметра mps.mpsId.comment (он влияет только на формат параметра). В общем то это не критично, но если совсем опционально, может сделать тогда добавление <client_info> через расширение: mps.mpsId.protocol.ext=addClientInfo - если есть таковое - добавлять, а нет - значит нет.

2) <reg_date> в ответе выдает time - время платежной системы, пришедшей в запросе, а нужно local_time - время регистрации платежа локально на сервере биллинга, т.е. наше местное время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 27 янв 2014, 10:36 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Исправления будут доступны после обновления. Опция для добавления клиентской информации - needClientInfo в mps.<mpsId>.protocol.ext
Документация также будет обновлена.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 27 янв 2014, 18:17 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Код:
01-27/20:05:33 DEBUG ["http-bio-/0.0.0.0-443"-exec-4] mps - System: Sberbank
Request:
/5/6/Pay
params=<?xml version="1.0" encoding="UTF-8"?><request><params>  <act>2</act><agent_date>2013-11-26T10:14:38</agent_date><pay_date>2014-01-17T10:15:38</pay_date><pay_id>201004066984028714911197990000301</pay_id><account>10000000000001</account><pay_amount>11</pay_amount><client_name>Иванов</client_name>  </params><sign>2B5F46589CFAEABB56FBCEF7A682007D</sign></request>&
Response:
<?xml version="1.0" encoding="UTF-8"?><response><params><err_code>0</err_code><err_text>Платеж зачислен на договор</err_text><account>10000000000001</account><reg_id>40351</reg_id><reg_date>2014-01-27T08:05:33</reg_date></params><sign>1EDE05848744D4294AC3EB2E3B5B7C54</sign></response>


Странно, запрос пришел 20:05:33, а в ответе время отдает 08:05:33 - восемь вечера типа. В договоре платеж стоит как надо 20:05:33, в MPS - тоже. Может ошибка форматирования ?

Код:
mysql>  select id,trans_id,local_time from mps_payment_5_201311 where id='40351';
+-------+-----------------------------------+---------------------+
| id    | trans_id                          | local_time          |
+-------+-----------------------------------+---------------------+
| 40351 | 201004066984028714911197990000301 | 2014-01-27 20:05:33 |
+-------+-----------------------------------+---------------------+


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 28 янв 2014, 19:45 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Что-нибудь выяснилось ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 31 янв 2014, 13:21 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Обновление выкладывается.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 08 апр 2014, 20:49 
Не в сети
Клиент

Зарегистрирован: 26 сен 2008, 11:51
Сообщения: 85
Карма: 0
Подниму тему, так как мне непонятен алгоритм, по которому bgbilling формирует подпись ответа Оператора.
Имеем:
Сервер: вер. 6.0 сборка 1721 от 04.04.2014 19:41:47
mps вер. 6.0 сборка 211 от 04.04.2014 19:42:16

Запрос:
<?xml version="1.0" encoding="UTF-8"?><request><params><act>1</act><account>1</account><pay_amount>1</pay_amount></params><sign>0eeb55514c95e110bc19ba21620f52b9</sign></request>

Пароль запроса: test1234

Ответ:
<?xml version="1.0" encoding="UTF-8"?><response><params><err_code>20</err_code><err_text>Указанный номер счета отсутствует</err_text></params><sign>697996A73BF1A2660E7E7A48033C1E44</sign></response>

MD5 от строки "<err_code>20</err_code><err_text>Указанный номер счета отсутствует</err_text>0eeb55514c95e110bc19ba21620f52b9test1234" у меня получается cee1377d43856bf5ff3deec773096ae6 , а биллинг формирует совсем другой: 697996A73BF1A2660E7E7A48033C1E44

Читаем пункт 6 файла "Протокол Оператора 3-5-7.doc" :

"Формирование подписи в ответах Оператора.

К сформированному содержимому тэга params конкатенируются подпись полученного ранее запроса и пароль. Подпись полученного ранее запроса должна быть в том регистре, в котором получена от Агента. Для полученной строки генерируется подпись, которая передается в параметре sign.
Получив ответ, Агент извлекает из него подстроку между тэгами params, генерирует для нее подпись и сверяет ее с подписью в ответе."

Так как все-таки формируется подпись ответа модулем bisys?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 09 апр 2014, 09:13 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Здравствуйте!
Опять появились проблемы с проверкой подписи? Все из за того, что в запросы между тегами они вставляют проблемы.
Подпись для проверки запроса формируется так, как описано в протоколе:
Код:
Element signElement = XMLUtils.selectElement( doc, "//sign" );
...
String incomingSign = signElement.getTextContent();
/*такой костыль связан с тем, что сервис вместо обычных текстовых параметров использует xml в виде текста, в которой могут быть пробелы между тегами, которые, в свою очередь, участвуют в формировании подписи. именно поэтому здесь приходится работать как с обычным текстом, игнорируя всякое доступное XML API, иначе подпись будет не совпадать.*/
String serializedXml = params.substring( params.indexOf( "<params>" ), params.indexOf( "</params>" ) ).replaceAll( "<params>|</params>", "" );
String strToSign = serializedXml + system.secret;
String sign = null;
try
{
   MessageDigest md = MessageDigest.getInstance( "MD5" );
   md.update( strToSign.getBytes() );
   sign = new String( Utils.bytesToHexString( md.digest() ) );
}


Подпись ответа осуществляется также в соответствии с протоколом:
Код:
//вычисляем хеш для ответа: md5(содержимое тега params без самого params в виде строки + подпись из запроса сервиса+пароль)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLUtils.serialize( paramsElement, baos, "UTF-8" );
String serializedXml = baos.toString();
serializedXml = serializedXml.substring( serializedXml.indexOf( "<params>" ), serializedXml.indexOf( "</params>" ) ).replaceAll( "<params>|</params>", "" );
String strToSign = serializedXml + response.parameters.get( "sign" ).toString() + system.secret;
String sign = null;
try
{
   MessageDigest md = MessageDigest.getInstance( "MD5" );
   md.update( strToSign.getBytes( ) );
   sign = new String( Utils.bytesToHexString( md.digest() ) );
}

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 09 апр 2014, 09:32 
Не в сети
Клиент

Зарегистрирован: 26 сен 2008, 11:51
Сообщения: 85
Карма: 0
Artur писал(а):
Здравствуйте!
Опять появились проблемы с проверкой подписи? Все из за того, что в запросы между тегами они вставляют проблемы.
Подпись для проверки запроса формируется так, как описано в протоколе:
Код:
Element signElement = XMLUtils.selectElement( doc, "//sign" );
...
String incomingSign = signElement.getTextContent();
/*такой костыль связан с тем, что сервис вместо обычных текстовых параметров использует xml в виде текста, в которой могут быть пробелы между тегами, которые, в свою очередь, участвуют в формировании подписи. именно поэтому здесь приходится работать как с обычным текстом, игнорируя всякое доступное XML API, иначе подпись будет не совпадать.*/
String serializedXml = params.substring( params.indexOf( "<params>" ), params.indexOf( "</params>" ) ).replaceAll( "<params>|</params>", "" );
String strToSign = serializedXml + system.secret;
String sign = null;
try
{
   MessageDigest md = MessageDigest.getInstance( "MD5" );
   md.update( strToSign.getBytes() );
   sign = new String( Utils.bytesToHexString( md.digest() ) );
}


Подпись ответа осуществляется также в соответствии с протоколом:
Код:
//вычисляем хеш для ответа: md5(содержимое тега params без самого params в виде строки + подпись из запроса сервиса+пароль)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLUtils.serialize( paramsElement, baos, "UTF-8" );
String serializedXml = baos.toString();
serializedXml = serializedXml.substring( serializedXml.indexOf( "<params>" ), serializedXml.indexOf( "</params>" ) ).replaceAll( "<params>|</params>", "" );
String strToSign = serializedXml + response.parameters.get( "sign" ).toString() + system.secret;
String sign = null;
try
{
   MessageDigest md = MessageDigest.getInstance( "MD5" );
   md.update( strToSign.getBytes( ) );
   sign = new String( Utils.bytesToHexString( md.digest() ) );
}


Я пока ничего не понял из вашего ответа.
Давайте разберем конкретную ситуацию.
Тестовая строка:
Код:
<err_code>20</err_code><err_text>Указанный номер счета отсутствует</err_text>0eeb55514c95e110bc19ba21620f52b9test1234

Ее MD5 хэш:
Код:
cee1377d43856bf5ff3deec773096ae6


Вопрос: почему модуль bisys выдает такой хэш?:
Код:
697996A73BF1A2660E7E7A48033C1E44


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 09 апр 2014, 13:13 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Сейчас разберемся в чем дело.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 09 апр 2014, 13:41 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
fruggin Проверил у себя ваш запрос - получил именно ту подпись, которая вами и была задекларирована как верная, т.е. cee1377d43856bf5ff3deec773096ae6. Единственное, что в другом регистре. Я это не учел, спасибо за наводку! Будем исправлять.
Рекомендую вам в первую очередь изменить на сервере OpenJDK 64-Bit Server VM, v.1.7.0_51 на java 1.6 последней сборки от oracle.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BiSys - Неверная цифровая подпись
СообщениеДобавлено: 09 апр 2014, 13:54 
Не в сети
Клиент

Зарегистрирован: 26 сен 2008, 11:51
Сообщения: 85
Карма: 0
Artur писал(а):
fruggin Проверил у себя ваш запрос - получил именно ту подпись, которая вами и была задекларирована как верная, т.е. cee1377d43856bf5ff3deec773096ae6. Единственное, что в другом регистре. Я это не учел, спасибо за наводку! Будем исправлять.
Рекомендую вам в первую очередь изменить на сервере OpenJDK 64-Bit Server VM, v.1.7.0_51 на java 1.6 последней сборки от oracle.


Я правильно понял, что все это из-за JDK 1.7 ?
Не хотелось бы откатываться на 1.6, но если вы рекомендуете, то попробую.
А если обновить биллинг до версии 6.1, в которой задекларирована поддержка JDK 1.7, то будет работать?
Или для нормальной работы вычисления подписи модуля bisys нужна именно "православная" версия JDK 1.6 от Oracle, которая в данный момент уже не обновляется?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.100s | 79 Queries | GZIP : On ]