shoman4eg / moy-nalog
lknpd.nalog.ru API的非官方包装客户端
v0.5.0
2024-07-23 22:36 UTC
Requires
- php: >=7.4
- ext-json: *
- ext-mbstring: *
- brick/math: ^0.9
- php-http/client-common: ^2.7
- php-http/discovery: ^1.18
- psr/http-client: ^1.0.1
- webmozart/assert: ^1.6
Requires (Dev)
- guzzlehttp/guzzle: ^7.4.5
- guzzlehttp/psr7: ^2.5
- nyholm/nsa: ^1.3
- php-http/guzzle7-adapter: ^1.0
- phpunit/phpunit: ^9.5
Suggests
- psr/http-client-implementation: Required for using this package
This package is auto-updated.
Last update: 2024-09-23 22:56:45 UTC
README
允许自动发送自雇人士的收入信息,获取已创建的收据信息并删除它们。支持使用INN和密码,以及手机号码进行认证。
安装
使用 composer
$ composer require shoman4eg/moy-nalog
您还需要安装虚拟包的发行版,例如(推荐)
Symfony
$ composer require symfony/http-client
或 Guzzle
$ composer require guzzlehttp/guzzle
使用
设置时区
// Необходимо выставить часовой пояс для корректного формирования дат в чеках // Можно установить с помощью функции date_default_timezone_set date_default_timezone_set('Europe/Kaliningrad'); // или через класс DateTimeImmutable, с нужным часовым поясом, перед созданием чека $operationTime = new \DateTimeImmutable('now', new \DateTimeZone('Europe/Kaliningrad'))
认证
使用createNewAccessToken
(按INN和密码)或createNewAccessTokenByPhone
(按手机号码)进行认证时,除了返回访问令牌(accessToken)外,还返回无限期的更新令牌(refreshToken)。保存这些方法的原始响应,并在authenticate
方法中重复使用。
重复使用
createNewAccessToken
和createNewAccessTokenByPhone
方法时,之前的accessToken将失效。
使用INN和密码
如果您需要恢复“我的税务”服务的密码,只能通过“纳税人个人账户”进行。两个服务上的账户相同。
use Shoman4eg\Nalog\ApiClient; $apiClient = ApiClient::create(); try { // Запрос accessToken $accessToken = $apiClient->createNewAccessToken($username, $password); } catch (\Shoman4eg\Nalog\Exception\Domain\UnauthorizedException $e) { var_dump($e->getMessage()); } // Аутентификация с помощью accessToken $apiClient->authenticate($accessToken);
使用手机号码
通过手机号码进行认证的选项分为两步
- 向手机号码发送带有验证码的短信,并保存返回的challengeToken;
- 交换手机号码、challengeToken和验证码以获取accessToken。
注意:只有在之前的验证码已过期(2分钟)或使用之前的验证码成功认证的情况下,才能请求新的验证码。无法重新发送已发布的验证码,只能同时创建新的。
1. 向手机号码发送带有验证码的短信,并保存返回的 challengeToken
use Shoman4eg\Nalog\ApiClient; $apiClient = ApiClient::create(); try { $phoneChallengeResponse = ApiClient::createPhoneChallenge('79000000000'); /** * $phoneChallengeResponse = [ * 'challengeToken' => '00000000-0000-0000-0000-000000000000', * 'expireDate' => 2022-11-24T00:20:19.135436Z, * 'expireIn' => 120, * ]; */ } catch (\Shoman4eg\Nalog\Exception\Domain\UnauthorizedException $e) { var_dump($e->getMessage()); } // Сохраните $phoneChallengeResponse['challengeToken']. Он потребуется Вам на втором шаге.
2. 交换手机号码、challengeToken和验证码以获取 accessToken
use Shoman4eg\Nalog\ApiClient; $apiClient = ApiClient::create(); try { // Запрос accessToken $accessToken = $apiClient->createNewAccessTokenByPhone( '79000000000', // Номер телефона '00000000-0000-0000-0000-000000000000', // challengeToken '123456' // Код из СМС ); } catch (\Shoman4eg\Nalog\Exception\Domain\UnauthorizedException $e) { var_dump($e->getMessage()); } // Аутентификация с помощью accessToken $apiClient->authenticate($accessToken);
为默认的合同方(自然人)创建收据
$name = 'Предоставление информационных услуг #970/2495'; // Наименование $amount = 1800.30; // Стоимость $quantity = 1; // Количество $operationTime = new DateTimeImmutable('2020-12-31 12:12:00'); // Дата продажи // Создание чека $createdIncome = $apiClient->income()->create( $name, $amount, $quantity, $operationTime ); // UUID чека для операций запроса данных чека или его отмены $receiptUuid = $createdincome->getApprovedReceiptUuid();
创建具有多个项目的收据
$items = [ new \Shoman4eg\Nalog\DTO\IncomeServiceItem( 'Предоставление информационных услуг #970/2495', // Наименование 1800.30, // Стоимость 1 // Количество ), new \Shoman4eg\Nalog\DTO\IncomeServiceItem( 'Предоставление информационных услуг #971/2495', 900, 2 ), // И так далее... ]; // Дата продажи $operationTime = new DateTimeImmutable('2020-12-31 12:12:00'); // Создание чека $createdIncome = $apiClient->income()->createMultipleItems( $items, $operationTime ); // UUID чека для операций запроса данных чека или его отмены $receiptUuid = $createdincome->getApprovedReceiptUuid();
为不同的合同方(自然人、法人或外国组织)创建收据
$name = 'Предоставление информационных услуг #970/2495'; // Наименование $amount = 1800.30; // Стоимость $quantity = 1; // Количество $operationTime = new DateTimeImmutable('2020-12-31 12:12:00'); // Дата продажи // По умолчанию физ. лицо без указания контактных данных (INDIVIDUAL) $client = new \Shoman4eg\Nalog\DTO\IncomeClient(); // Или физ. лицо с указанием контактных данных (INDIVIDUAL) $client = new \Shoman4eg\Nalog\DTO\IncomeClient( '+79009000000', 'Вася Пупкин', \Shoman4eg\Nalog\Enum\IncomeType::INDIVIDUAL, '390000000000' // ИНН физ. лица (12 символов) ); // Или юр. лицо (ИП, ООО и т.п.) (LEGAL_ENTITY) $client = new \Shoman4eg\Nalog\DTO\IncomeClient( null, 'ИП Вася Пупкин Валерьевич', \Shoman4eg\Nalog\Enum\IncomeType::LEGAL_ENTITY, '7700000000' // ИНН юр лица (10 символов) ); // Или иностранная организация (FOREIGN_AGENCY) $client = new \Shoman4eg\Nalog\DTO\IncomeClient( null, 'Facebook Inc.', \Shoman4eg\Nalog\Enum\IncomeType::FOREIGN_AGENCY, '9909000000' // ИНН иностранной организации (10 символов) ); // Создание чека $createdIncome = $apiClient->income()->create( $name, $amount, $quantity, $operationTime, $client ); // UUID чека для операций запроса данных чека или его отмены $receiptUuid = $createdincome->getApprovedReceiptUuid();
获取收据(扫描件)或JSON格式的收据数据
// UUID чека $receiptUuid = "20hykdxbp8"; // Получить ссылку на чек для печати $receipt = $apiClient->receipt()->printUrl($receiptUuid); // Получить данные по чеку в JSON формате $receipt = $apiClient->receipt()->json($receiptUuid);
取消收据
// UUID чека $receiptUuid = "20hykdxbp8"; // Причина отмены: "Чек выдан ошибочно" $comment = \Shoman4eg\Nalog\Enum\CancelCommentType::CANCEL; // Причина отмены: "Возврат денежных средств" $comment = \Shoman4eg\Nalog\Enum\CancelCommentType::REFUND; // Код партнёра (по умолчанию: null) $partnerCode = null; // Дата совершения возврата (по умолчанию: now) $operationTime = new \DateTimeImmutable('now'); // Дата запроса отмены чека (по умолчанию: now) $requestTime = new \DateTimeImmutable('now'); // Отмена чека $incomeInfo = $apiClient->income()->cancel( $receiptUuid, $comment, $operationTime, $requestTime, $partnerCode );
获取当前用户的信息
$apiClient->authenticate($accessToken); $userInfo = $apiClient->user()->get();
获取必要的付款信息
$apiClient->authenticate($accessToken); $userInfo = $apiClient->tax()->get();
获取付款信息
$apiClient->authenticate($accessToken); $userInfo = $apiClient->tax()->payments();
获取过去的付款信息
$apiClient->authenticate($accessToken); $userInfo = $apiClient->tax()->history();
使用的资源
在Habr上的文章:为自雇人士自动化:如何将税收与IT项目集成
JS实现:alexstep/moy-nalog
变更日志
变更日志:完整的变更日志
咖啡时间
如果这个项目帮助您缩短了开发时间,您可以请我喝杯咖啡 :)
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。