Symfony 6.3 中的新功能:Webhook 与 Mailer 和 Notifier 的集成【转载】 CJayhe Symfony博客 411 views 在Symfony 6.3中,[我们引入了](https://symfony.com/blog/new-in-symfony-6-3-webhook-and-remoteevent-components)两个新的组件,称为Webhook和RemoteEvent。 webhook 是从系统(例如支付处理器)到另一个系统的通知 系统(例如您的应用程序)的某些状态更改(例如某些订单已支付)。 许多第三方邮件服务提供 Webhook 支持来通知您 与电子邮件相关的不同事件(已发送、打开、退回等)与 SMS等通知服务,提供网络钩子来通知事件,例如 消息已发送、发送失败等。 大多数网络钩子使用标准的HTTP和JSON来发送它们的信息。然而,他们 未标准化:安全性依赖于提供程序,有效负载是自由格式的。 这就是为什么**在Symfony 6.3中,我们正在标准化最常见的Webhook。 邮件/通知服务**,因此您的应用程序不必处理这些 内部细节。 本文的其余部分显示了一个专注于 Mailer 集成的示例,但是 这 同样适用于通告程序集成。想象一下,您需要在以下情况下记录 您的电子邮件“退回”(它们尚未到达目的地)以及当人们 取消订阅您的电子邮件。 如果您使用例如 Mailgun,则首先在该服务中配置 Webhook 指向您网站中的某个网址(例如 )。 然后,在Symfony项目中添加以下配置:`https://example.com/webhook/emails` ```yaml framework: webhook: routing: emails: service: '...' secret: '%env(MAILGUN_WEBHOOK_SECRET)%' ``` 最后,创建此 webhook 的使用者: ```php use Symfony\Component\RemoteEvent\Attribute\AsRemoteEventConsumer; // ... #[AsRemoteEventConsumer(name: 'emails')] class MailerEventConsumer implements ConsumerInterface { public function consume(Event $event): void { $email = $event->getRecipientEmail(); error_log(match ($event->getName()) { MailerDeliveryEvent::BOUNCE => sprintf('Email to %s bounced (%s)', $email, $event->getReason()), MailerEngagementEvent::UNSUBSCRIBE => sprintf('Unsubscribe from %s', $email), default => sprintf('Receive unhandled email event %s', $event->getName()), }); } } ``` 仅此而已。如果您更改了邮件提供程序(在此项目或其他项目中) 您可以为消费者重用完全相同的代码;您只需要更新 配置。这是可能的,因为Symfony执行以下操作: 1\. 它运行一些“请求解析器”,检查传入的有效负载是否不是 格式不正确,包含所有需要的数据,验证签名等。 2\. 它运行一些“有效载荷转换器”,因此映射每个服务的有效载荷 转换为标准有效负载格式。 这里的关键是**标准化**。Symfony映射传入的有效载荷和 事件到可在应用程序中用于抽象的通用结构中 从提供商详细信息。 例如,无论每个提供程序如何命名其事件。使用时 功能,您只需要处理以下常见事件名称: ```php namespace Symfony\Component\RemoteEvent\Event\Mailer; final class MailerDeliveryEvent extends AbstractMailerEvent { public const RECEIVED = 'received'; public const DROPPED = 'dropped'; public const DELIVERED = 'delivered'; public const DEFERRED = 'deferred'; public const BOUNCE = 'bounce'; } final class MailerEngagementEvent extends AbstractMailerEvent { public const OPEN = 'open'; public const CLICK = 'click'; public const SPAM = 'spam'; public const UNSUBSCRIBE = 'unsubscribe'; } ``` Symfony 6.3为Mailgun,Postmark和 提供了开箱即用的Webhook支持 特威利奥。现在我们需要你,Symfony社区,帮助我们提供集成。 用于其余的邮件/通知服务。另外,考虑与您的 公司关于赞助Symfony组件和赞助Symfony第三方集成。 原文链接 https://symfony.com/blog/new-in-symfony-6-3-webhook-integration-with-mailer-and-notifier 帮助PHPZlc项目! 与任何开源项目一样, 贡献代码 或 文档 是最常见的帮助方式, 但我们也有广泛的 赞助机会。 0 赞赏 加入技术群 评论 去登录