leon-mbs/ppolib

Библиотека цифровой подписи для РРО (Украина)

1.4.1 2024-03-14 09:54 UTC

README

Библиотека для цифровой подписи документов, отправляемых в налоговую (Украина)

Большинство кода портировано с https://github.com/dstucrypt/jkurwa

Установка

composer require leon-mbs/ppolib

Как использовать

Распаковка ключа и сертификата

$cert = \PPOLib\Cert::load($certdata) ;

$key = \PPOLib\KeyStore::load($keydata,$password,$cert ) ;

Где $certdata - содержимое файла сертификата $keydata - содержимое файла ключа $password - пароль к ключу

Поскольку распаковка происходит довольно медленно, обьекты $cert и $key следует положить в сессию или сериализовать и спрятать в надежном хранилище для дальнейшего использования

Загрузка jks файла (ПриватБанк) list($key,$cert) = \PPOLib\KeyStore::loadjks($jks,$password) ;

В случае неверной работы jks ключа на PHP x64 ключ можно сконвертировать в key-6.dat (или получить в налоговой) или воспользоватся сервером подписи https://github.com/leon-mbs/internal-digital-signature-service

Подпись документа или команды
$signeddata= \PPOLib\PPO::sign('{"Command":"Objects"}'',$key,$cert);

Открепленная подпись (без данных)
$signeddata= \PPOLib\PPO::sign('{"Command":"Objects"}'',$key,$cert,true);

Подпись с TSP отметкой
$signeddata= \PPOLib\PPO::sign('{"Command":"Objects"}'',$key,$cert,false,true);

Отправка запроса в налоговую

$answer = \PPOLib\PPO::send($signeddata,'cmd') ;

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

$data = \PPOLib\PPO::decrypt($answer,true) ;

Если предполагать что ответ с налоговой будет подписан верно то второй параметр (проверка подписи) можно не указывать это ускорит обработку.