ablota / laravel-threema-notification-channel
Laravel 用于发送 Threema 通知的扩展包。
v1.1.1
2024-01-13 22:00 UTC
Requires
- php: ^8.0
- illuminate/notifications: ^9.0
- illuminate/support: ^9.0
- php-ffmpeg/php-ffmpeg: ^1.0
- threema/msgapi-sdk: ^1.5
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Laravel 用于发送 Threema 通知的扩展包。
先决条件
- 将以下存储库添加到您的
composer.json
{
"repositories": [
{
"type": "package",
"package": {
"name": "threema/msgapi-sdk",
"version": "1.5.6",
"dist": {
"url": "https://gateway.threema.ch/sdk/threema-msgapi-sdk-php-1.5.6.zip",
"type": "zip"
}
}
}
]
}
- 使用 Composer 安装该包
composer require ablota/laravel-threema-notification-channel
- 请求一个 Threema Gateway ID。注册以立即获得一个基本 ID 进行测试。如果您对端到端 ID 感兴趣,请联系 Threema,他们通常会为您提供用于测试的 ID。
配置
该包包括一个 配置文件。但是,您不需要将此配置文件导出到您自己的应用程序中。您只需使用以下环境变量即可
// Required
THREEMA_GATEWAY_ID=
THREEMA_GATEWAY_SECRET=
// Optional
THREEMA_GATEWAY_PRIVATE_KEY=
THREEMA_MSGAPI_HOST=
THREEMA_TLS_FORCE_HTTPS=true|false
THREEMA_TLS_CIPHER=...
THREEMA_TLS_VERSION=1.0|1.1|1.2
所需变量显示在 Threema Gateway 网站上。如果您使用端到端模式,则需要以十六进制形式提供 THREEMA_GATEWAY_PRIVATE_KEY
。
格式化通知
如果通知支持作为 Threema 消息发送,您应该在通知类上定义一个 toThreema
方法。此方法将接收一个 $notifiable
实体,并应返回一个 Illuminate\Notifications\Messages\ThreemaMessage
实例。让我们看看一个基本的 toThreema
示例
use Illuminate\Notifications\Messages\ThreemaMessage;
use Illuminate\Notifications\Messages\ThreemaTextMessage;
public function toThreema(mixed $notifiable): ThreemaMessage
{
return new ThreemaTextMessage('Hello World!');
}
目前仅支持 1:1 聊天消息(文本、图片、位置、音频、视频、文件)。群组消息类型即将推出。
路由通知
要路由 Threema 通知到正确的 Threema ID,请在您的可通知实体上定义一个 routeNotificationForThreema
方法
use Threema\MsgApi\Receiver;
public function routeNotificationForThreema(mixed $notification): Receiver
{
return new Receiver($this->threema_id, Receiver::TYPE_ID);
}
通过使用 Receiver::TYPE_EMAIL
或 Receiver::TYPE_PHONE
,您可以使用自动 ID 查找。
异常
该包只抛出以下异常
ThreemaChannelException
在发生致命错误时抛出。例如,如果某些类型不受支持或配置不正确。
ThreemaChannelResultException
由于 Laravel 在发送通知时不会返回结果,因此会抛出此异常。例如,向一个未知的 Threema ID 发送消息会导致此异常。它应该被捕获,并且应该处理它包含的结果。
use Illuminate\Notifications\Exceptions\ThreemaChannelResultException;
try {
$notifiable->notify(new TwoFactorVerificationCode());
} catch(ThreemaChannelResultException $exception) {
$exception->getResult();
}