herald-si/verificac19-sdk-php

PHP 数字绿色证书 SDK


README

索引

上下文

注意,此存储库是从 ministero-salute/it-dgc-verificac19-sdk-android 的规范中派生出来的!

可用的库列表请参见此 列表。页面还包含有关接受和从列表中删除策略的信息。在将库用于生产环境之前,请参阅此页面。

此存储库包含一个软件开发工具包(SDK),该工具包允许通过读取二维码将 COVID-19 绿色证书的验证功能集成到系统中。

个人数据处理

从本 SDK 开发的应用程序解决方案中处理个人数据时,必须仅限于与验证 COVID-19 绿色证书的有效性直接相关的信息,以及严格必要的操作。此外,明确禁止保存待验证的 COVID-19 绿色证书的二维码,以及提取、查询、记录或以其他任何方式处理除验证 COVID-19 绿色证书或从二维码读取和检查中获取的信息之外的目的,如 2021 年 10 月 12 日 DPCM 所述。

要求

  • PHP >= 7.3
  • COSE-lib 需要 GMP 或 bcmath 扩展 查看问题 #31
  • SQLite 用于管理 DCC 撤销列表

变更日志

变更日志可在 此处 查看。

安装

需要以以下方式克隆此项目

your_project_folder
|___sdk_repo_folder

此时,在 sdk_repo_folder 文件夹内运行以下命令

composer install --no-dev

assets 文件夹的权限

需要将 sdk_repo_folder\assets 文件夹的权限设置为,以便 web 服务器可以读取、创建和编辑其中的文件。

如果无法更改文件夹的权限,从版本 1.0.5 开始,可以修改文件保存路径,请参阅 缓存文件夹

使用

验证应用程序需要导入 SDK 的 vendor 文件夹。

require __DIR__ . '/sdk_repo_folder/vendor/autoload.php';

此时可以使用任何选择的 QR Code 扫描库,在读取 EU DCC 的 QR Code 后,将提取的字符串传递给验证器 Herald\GreenPass\Utils\CertificateValidator

示例

...
require __DIR__ . '/sdk_repo_folder/vendor/autoload.php';
use Herald\GreenPass\Utils\CertificateValidator;

$gp_string = 'HC1:6BF.......';
$gp_reader = new CertificateValidator($gp_string);
$gp_info = $gp_reader->getCertificateSimple();

// Mostro la struttura dell'esito validazione
echo "<pre>" . print_r($gp_info, true) . "</pre>";
...

查看方法的响应,返回一个包含验证结果的 Herald\GreenPass\Model\CertificateSimple 对象。数据模型包含个人数据、出生日期、验证时间戳和验证状态。

根据这些数据可以绘制 UI,并将 DCC 的验证状态提供给操作员。

缓存文件夹

从版本 1.0.5 开始,可以通过使用 FileUtils 类的 overrideCacheFilePath 方法来修改文件保存路径。

Herald\GreenPass\Utils\FileUtils::overrideCacheFilePath("/absolute/path/to/cache/folder");

或者在 Windows 上

Herald\GreenPass\Utils\FileUtils::overrideCacheFilePath("c:\path\to\cache\folder");

从版本 1.2.0 开始,可以使用 UpdateService 类的 update*() 方法来更新缓存中的文件

//aggiorna lo status dei certificati
Herald\GreenPass\Utils\UpdateService::updateCertificatesStatus();
//aggiorna la lista dei certificati
Herald\GreenPass\Utils\UpdateService::updateCertificateList();
//aggiorna le regole di validazione
Herald\GreenPass\Utils\UpdateService::updateValidationRules();
//aggiorna le liste di revoca
Herald\GreenPass\Utils\UpdateService::updateRevokeList();

或者更新所有列表

Herald\GreenPass\Utils\UpdateService::updateAll();

无论如何,这些列表只有在上次更新后已过24小时才会更新,不会强制更新。

因此,在应用程序中使用此 SDK 时,可以创建一个定期调用的 cron job(每小时/每6小时/每日)来下载规则。

这样,在验证 GreenPass 字符串时,很可能这些规则已经更新,从而减少了验证时间。

代理

(感谢 @darpins

从版本 1.2.3 开始,可以使用代理来调用下载规则/证书列表的端点,通过使用 EndpointService 类的 setProxy 方法。

Herald\GreenPass\Utils\EndpointService::setProxy("https://username:password@192.168.0.1:8000");

扫描模式

遗留功能。

要选择类型,可以将 Herald\GreenPass\Validation\Covid19\ValidationScanMode 类型的参数传递给验证器的构造函数。

如果没有选择,则默认设置为 BASE 类型。

从版本 1.6.0 开始,只能使用 BASE 类型。

// set scan mode to BASE
$scanMode = ValidationScanMode::CLASSIC_DGP;

$gp_reader = new CertificateValidator($gp_string, $scanMode);

调试模式

为了帮助实现此 SDK,引入了调试功能。可以使用 EnvConfig 类的 enableDebugMode 方法来启用调试模式,并使用 disableDebugMode 方法来禁用。

Herald\GreenPass\Utils\EnvConfig::enableDebugMode();
... do some test ...
Herald\GreenPass\Utils\EnvConfig::disableDebugMode();

强制更新缓存

只有当调试模式处于活动状态时,才可以通过将可选参数 force_update 设置为 true 来强制更新缓存中的文件。示例操作

//non viene forzato l'aggiornamento, manca debug mode
Herald\GreenPass\Utils\UpdateService::updateCertificatesStatus(true);
---
//non viene forzato l'aggiornamento, parametro force update a false
Herald\GreenPass\Utils\EnvConfig::enableDebugMode();
Herald\GreenPass\Utils\UpdateService::updateCertificatesStatus();
---
//viene forzato l'aggiornamento, non usare in produzione!
Herald\GreenPass\Utils\EnvConfig::enableDebugMode();
Herald\GreenPass\Utils\UpdateService::updateCertificatesStatus(true);

显示扫描错误

启用调试模式

  • 在所有情况下,如果扫描的响应会产生一个 NOT_EU_DCC 的结果,则会显示导致该结果错误堆栈。
  • 在其他所有情况下,会显示验证结果,但将返回字符串 DISABLE-DEBUG-MODE-IN-PRODUCTION 而不是绿色通行证中的姓名和姓氏(以防止在生产中保持启用调试模式)。

许可证

许可证详情

此存储库的许可证是 Apache License 2.0。具体信息请参阅 LICENSE 文件。

贡献者

这里有一份贡献者列表。感谢大家每天为项目的改进做出的贡献!