Код:
08-11/15:59:20 DEBUG [http-bio-0.0.0.0-8443-exec-8] BiSysTransactionManager - Полученные параметры из xml:
08-11/15:59:20 DEBUG [http-bio-0.0.0.0-8443-exec-8] BiSysTransactionManager - Строка, из которой вычисляется хэш для проверки пришедшей подписи: <act>1</act><agent_date>2017-08-11T17:59:19</agent_date><account>000000395</account><pay_amount>1500000</pay_amount>ojoj3qosaii5409jtoj5dfdfs
08-11/15:59:20 DEBUG [http-bio-0.0.0.0-8443-exec-8] BiSysTransactionManager - Ответная xml сервису: <?xml version="1.0" encoding="UTF-8"?><response><params><err_code>13</err_code><err_text>Неверная цифровая подпись</err_text></params></response>
Там целая история формирования этой подписи.
Цитата:
Предварительно Агент и Оператор обмениваются паролем. Используется один (одинаковый) пароль для Агента и Оператора. В качестве подписи используется MD5-хэш в виде последовательности из 32 шестнадцатеричных цифр. Регистр букв значения не имеет.
Формирование подписи в запросах Агента.
К сформированному содержимому тэга params конкатенируется пароль. (Содержимое тэга params берется как есть, вместе с вложенными тэгами, переносами строк.). Для полученной строки генерируется подпись, которая передается в параметре sign.
Получив запрос, Оператор извлекает из него подстроку между тэгами params, генерирует для нее подпись и сверяет ее с подписью в запросе. Оператор должен обрабатывать подпись запроса в любом регистре, поэтому перед сравнением надо приводить подписи к одному регистру.
Например, для запроса
<?xml version="1.0" encoding="windows-1251"?><request><params><act>1</act><account>758</account></params>
<sign>724870FC6BC385D7A29F4A259B6E9A6B</sign></request>
нужно делать хэш для строки “<act>1</act><account>758</account>пароль”.
Формирование подписи в ответах Оператора.
К сформированному содержимому тэга params конкатенируются подпись полученного ранее запроса и пароль. Подпись полученного ранее запроса должна быть в том регистре, в котором получена от Агента. Для полученной строки генерируется подпись, которая передается в параметре sign.
Получив ответ, Агент извлекает из него подстроку между тэгами params, генерирует для нее подпись и сверяет ее с подписью в ответе.
Внимание! Если в запросе подписи не было, или подпись неверная, то подпись в ответе с ошибкой не передавать. (Имеется ввиду, что при этом будет только ошибка “Указаны не все необходимые параметры” или “Неверная цифровая подпись”.)