lss/threema-gateway

使用 Threema Gateway 向 Threema 用户发送端到端加密的消息。

2.2.4 2018-09-24 00:24 UTC

This package is auto-updated.

Last update: 2024-09-26 02:46:52 UTC


README

这是 Threema Gateway API 的非官方包装器。

您还有四个其他选择

为什么要构建另一个版本?

  • PHP7.2 集成了 libsodium。如果我们以 7.2 作为最低版本,官方版本中的大量复杂代码就不再需要。我们可以删除旧的 PECL sodium 驱动程序和驱动程序选择代码。Salt git 子模块不再需要。
  • Composer 意味着我们可以在命令行运行器、删除大量文件并执行静态初始化的自动加载器(即使在 Threema 不被使用的情况下)
  • 修复一些由上述内容引起的问题,以及一些损坏的类型提示(针对 phpStorm),并将(少量)单元测试拆分到单独的 /tests 目录,以避免污染权威类映射
  • 添加缺少的 批量查找 功能(通过子类化替代方案难以添加)
  • 添加对其他未记录的消息类型(例如位置)的支持。
  • 总的来说,尽量遵循现代 php 包约定,以便在其他项目中使用时更舒适。
  • 修复一些架构问题,使其更容易测试,并允许依赖注入。
  • 使 API 更一致:例如,很难知道何时传递二进制值或十六进制编码的值。
  • 简化 API:删除或包装辅助类以减少复杂性

总之,有什么新功能

  • 仅限 PHP7.2+(libsodium)
  • 遵循现代约定的简单包
  • Composer 支持:干净的自动加载器
  • 依赖注入
  • Symfony 控制台命令,便于使用并便于在大型应用程序中集成
  • 支持批量查找 API 调用
  • 支持接收位置消息类型(未公开记录)

版本控制

官方 .zip 版本为 1.1.7,截至撰写本文时(2018 年 8 月)。Rugk 版本为 1.2.0(2018 年 8 月)。此存储库是 1.2.0 主干的克隆。为了减少混淆,此存储库命名为 threema-gateway 而不是 threema-msgapi-sdk。由于破坏性更改,它从 2.0.0 开始。有关详细信息,请参阅 CHANGELOG.md

此存储库的贡献者与 Threema 或 Threema GmbH 无关。

安装

composer install lss/threema-gateway

如果您想检查您的服务器是否符合要求并且一切配置是否正确,请在控制台运行 vendor/bin/threema-gateway 不带任何参数。如果它正在运行,它应该会显示命令列表;如果不,则会显示错误信息。

SDK 使用方法

  • 按照以下文档创建新的密钥对。请妥善保存它们并保密。不要通过网络使它们可访问。
  • 访问 https://gateway.threema.ch/ 并创建一个账户。
  • 您将选择您的 Threema ID,它以 * 开头,总共有 8 个字符长,例如 *MYKEY12。
  • 上传您的公钥。
  • 您的 API 密钥显示为您的账户名称:一个 16 位的字母数字字符串。

创建连接

$connectionFactory = new ConnectionFactory();
$connection = $connectionFactory->getConnection('*MYKEY12', 'MYAPISECRET');

目前只有一个加密方法和一个 HttpDriver(目前)可用。如果您想更改连接设置或提供替代驱动程序或模拟进行测试,请将它们传递给 ConnectionFactory 构造函数

向 Threema ID 发送文本消息(简单模式)

消息在 Threema 网关服务器上加密。

$result = $connection->sendToThreemaID('TEST1234', "This is a Test Message");
if ($result->isSuccess()) {
    echo 'new id created '.$result->getMessageId();
}
else {
    echo 'error '.$result->getErrorMessage();
}

向 Threema ID 发送文本消息(端到端模式)

消息在发送到 Threema 网关之前在本地加密。

$result = $connection->sendTextMessage($myPrivateKeyHex, "TEST1234", "thePublicKeyAsHex", "This is an end-to-end encrypted message");

if ($result->isSuccess()) {
    echo 'Message ID: '.$result->getMessageId() . "\n";
}
else {
    echo 'Error: '.$result->getErrorMessage() . "\n";
}

向 Threema ID 发送文件消息(端到端模式)

$result = $connection->sendFileMessage($myPrivateKeyHex, "TEST1234", "thePublicKeyAsHex", "/path/to/my/file.pdf");

if ($result->isSuccess()) {
    echo 'File Message ID: '.$result->getMessageId() . "\n";
}
else {
    echo 'Error: '.$result->getErrorMessage() . "\n";
}

技术说明

与 Threema 网关服务器的通信大部分是二进制的。但并非全部。有时你会得到二进制值的十六进制版本。PHP 包装器试图隐藏所有这些:将所有值作为十六进制编码的二进制字符串传递给 $connection(使用 $encryptor->bin2hex())。所有返回的值都是十六进制编码的二进制字符串。

$encryptor 主要需要和返回二进制字符串作为参数,但在使用 API 的正常情况下,您不需要加密器,因此不需要担心它。如果不确定,请参阅控制台命令示例。大多数参数现在都有 phpDoc 注释,告诉您它们是二进制字符串还是十六进制字符串。

tl;dr:预计将看到并使用十六进制

控制台客户端使用方法

运行

vendor/bin/threema-gateway

以获取命令及其选项的列表。

将您的 API 密钥、公钥和私钥存储在当前工作目录中名为 default.key 的文件中。有关模板,请参阅 default.key.sample。这将节省您大量的输入并使您的秘密不在命令行上。请 不要 将 default.key 文件提交到版本控制。

要生成新的密钥对,

vendor/bin/threema-gateway key:create-pair

它将打印密钥到控制台。将它们复制并粘贴到您的 default.key 文件中。您还需要这些信息在 Threema 网关上注册您的 ID。

一个好的测试来查看一切是否正常工作的是

vendor/bin/threema-gateway credits

它应该显示您账户中剩余的积分或失败时的错误信息。

贡献

您的拉取请求在这里受到欢迎。请遵循已经存在的非正式编码风格(它试图保持接近 Threema 的原始风格)。有关注意事项,请参阅本说明书的顶部:这是一个非官方分支的非官方分支。这个分支的目标与其他分支非常不同,因此也许您可以考虑您的贡献在哪里最有用。

原始代码没有附带很多测试。所有新的代码都应该由 phpUnit 测试覆盖。要运行测试,

composer test

vendor/bin/phpunit

使用 phpstan 进行检查,它必须在最大级别上为绿色(没有错误)。

composer phpstan

待办事项

  • ReceiveMessageResult 假设您想要将文件附件存储在本地文件系统中。这可能并不正确,例如如果使用 Amazon 基础设施。重构以允许 FileAcceptors(?) 可以被重载以使用 Flysystem、本地文件系统或忽略文件的空对象模式
  • Url 类可能不需要
  • 等待PSR-18获得批准,然后迁移HttpDriver使用它(然后我们可以停止自己直接使用cUrl,并依赖第三方做得更好)

其他平台(Java和Python)

GitHub上的所有仓库现在不再由Threema GmbH维护。然而,社区已经分支了所有平台的仓库,现在它们是非官方维护的。

Java仓库可以在simmac/threema-msgapi-sdk-java找到
和Python仓库可以在lgrahl/threema-msgapi-sdk-python找到。