ablota/laravel-threema-notification-channel

Laravel 用于发送 Threema 通知的扩展包。

v1.1.1 2024-01-13 22:00 UTC

This package is not auto-updated.

Last update: 2024-09-25 02:43:29 UTC


README

Laravel 用于发送 Threema 通知的扩展包。

先决条件

  1. 将以下存储库添加到您的 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"
				}
			}
		}
	]
}
  1. 使用 Composer 安装该包
composer require ablota/laravel-threema-notification-channel
  1. 请求一个 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_EMAILReceiver::TYPE_PHONE,您可以使用自动 ID 查找。

异常

该包只抛出以下异常

ThreemaChannelException

在发生致命错误时抛出。例如,如果某些类型不受支持或配置不正确。

ThreemaChannelResultException

由于 Laravel 在发送通知时不会返回结果,因此会抛出此异常。例如,向一个未知的 Threema ID 发送消息会导致此异常。它应该被捕获,并且应该处理它包含的结果。

use Illuminate\Notifications\Exceptions\ThreemaChannelResultException;

try {
	$notifiable->notify(new TwoFactorVerificationCode());
} catch(ThreemaChannelResultException $exception) {
	$exception->getResult();
}