Symfony Notifier AllMySms Bridge 实战指南:通过 DSN 与 AllMySmsOptions 集成法国短信服务
后端Web框架【免费下载链接】symfonyThe Symfony PHP framework项目地址https://gitcode.com/GitHub_Trending/sy/symfony点击查看免费下载本指南以 Symfony 官方仓库中 AllMySms Notifier Bridge 的 README 为核心完整讲解如何在 Symfony Notifier 中接入法国短信服务商 AllMySms从 DSN 配置、消息发送到使用AllMySmsOptions注入发送时间、模拟模式、唯一标识符等高级选项。读完本文你将掌握allmysms://传输通道的完整配置方式并能结合源码理解其底层 HTTP 调用与响应处理细节。一、AllMySms Bridge 是什么AllMySms 是法国的一家短信批量发送服务商官网地址见 README。本仓库中的symfony/all-my-sms-notifier桥接包为 Symfony Notifier 组件提供 AllMySms 集成能力使开发者可以像使用其他通道如 Twilio、Vonage一样通过统一的消息 API 向 AllMySms 发送短信。该桥接包位于仓库的 src/Symfony/Component/Notifier/Bridge/AllMySms 目录由四个核心文件构成AllMySmsTransport.php实际执行 HTTP 请求的传输器AllMySmsTransportFactory.php负责解析 DSN、创建传输器AllMySmsOptions.php承载发送可选参数的消息选项类三个测试文件Tests/AllMySmsTransportTest.php、Tests/AllMySmsTransportFactoryTest.php、Tests/AllMySmsOptionsTest.php用于验证各组件行为。二、DSN 配置一行搞定账号与默认发送号码README 给出的 DSN 格式如下ALLMYSMS_DSNallmysms://LOGIN:APIKEYdefault?fromFROM其中各字段含义DSN 片段含义说明LOGIN你的用户 ID必填对应 AllMySms 账号的用户标识APIKEY你的 AllMySms API 密钥必填用于 HTTP Basic 认证FROM发送方号码可选默认值为36180在 Symfony 应用中通常将该 DSN 写入.env文件然后通过symfony/notifier的Texter服务服务 id 为texter直接发送短信无需手写传输器。从源码看DSN 的解析发生在 AllMySmsTransportFactory::create()$this-getUser($dsn)取出 DSN 中的LOGIN$this-getPassword($dsn)取出APIKEY$dsn-getOption(from)读取from选项当 host 为default时host 保持为null最终由传输器内部的HOST常量api.allmysms.com决定实际端点。因此allmysms://LOGIN:APIKEYdefault?fromFROM中的default只是一个占位符实际请求会发往api.allmysms.com。2.1 需要重点注意的 DSN 校验规则测试文件 AllMySmsTransportFactoryTest.php 还揭示了几条容易被忽略的约束缺少APIKEY如allmysms://logindefault或缺少LOGIN如allmysms://:apiKeydefault都会被判定为不完整 DSNincomplete DSN无法创建传输器只有allmysms://scheme 才被支持见supportsProvider与unsupportedSchemeProvider其他 scheme 会抛出UnsupportedSchemeExceptionfrom是可选项DSN 中可省略如allmysms://login:apiKeyhost.test也可显式指定如allmysms://login:apiKeyhost.test?fromTEST。2.2ssl选项按需关闭 HTTPS从 CHANGELOG.md 可以看到8.2 版本新增了sslDSN 选项用于让请求走明文 HTTP。对应源码中工厂通过$this-getSsl($dsn)决定传输器使用的协议默认启用 HTTPS。一般生产环境保持默认即可只有在明确的调试或内网场景下才考虑?ssl0。三、发送短信从 SmsMessage 到 Texter与其他 Notifier 通道一致发送流程是创建SmsMessage→ 绑定可选选项 → 交给texter发送。README 给出的完整示例use Symfony\Component\Notifier\Message\SmsMessage; use Symfony\Component\Notifier\Bridge\AllMySms\AllMySmsOptions; $sms new SmsMessage(1411111111, My message); $options (new AllMySmsOptions()) -alerting(1) -campaignName(API) -cliMsgId(test_cli_msg_id) -date(2023-05-23 23:47:25) -simulate(1) -uniqueIdentifier(unique_identifier) -verbose(1) // ... ; // Add the custom options to the sms message and send the message $sms-options($options); $texter-send($sms);其中SmsMessage构造函数的两个核心参数分别是接收方手机号1411111111和短信正文My message。$texter即 Symfony 的TexterInterface服务在框架应用中直接注入即可。3.1 传输器支持的消息类型从 AllMySmsTransport::supports() 可以看到该传输器只支持SmsMessage并且其携带的 options 必须是AllMySmsOptions实例或为 null若传入ChatMessage或其他消息类型会抛出UnsupportedMessageTypeException测试中unsupportedMessagesProvider对此有明确覆盖因此不要把该桥接用于 Slack、Telegram 等聊天场景它专司短信。四、AllMySmsOptions为短信注入高级选项AllMySmsOptions实现自 Notifier 的MessageOptionsInterface全部方法均返回static支持链式调用最终通过toArray()输出选项数组。各方法及其底层存储键见 AllMySmsOptions.php如下方法存储键类型说明alerting(int)alertingint告警提示开关传1启用campaignName(string)campaignNamestring在 AllMySms 后台标识本次发送所属营销活动名称cliMsgId(string)cliMsgIdstring客户端消息 ID便于回执对账date(string)datestring定时发送时间README 示例格式为2023-05-23 23:47:25simulate(int)simulateint模拟模式传1表示不真实下发、仅做测试uniqueIdentifier(string)uniqueIdentifierstring唯一标识符用于去重或追踪verbose(int)verboseint详细日志开关传1启用这些选项的键名与 AllMySms 官方 HTTP APIv9.0请求参数一一对应完整字段含义可参考 README 中给出的官方 API 文档链接。测试文件 AllMySmsOptionsTest.php 验证了链式调用后toArray()的输出结构可作为编写时的对照参考。除上述方法外AllMySmsOptions的构造函数还接收一个可选的初始数组new AllMySmsOptions([from foo])测试中的supportedMessagesProvider展示了这一用法方便从已有数组直接构造选项对象。五、底层原理doSend 如何把消息变成 HTTP 请求理解传输器内部逻辑有助于排查发送失败问题。核心实现在 AllMySmsTransport::doSend()其调用链如下组装请求体从SmsMessage读取from优先取消息自身的getFrom()为空时回退到 DSN 配置的from再回退到默认36180、to手机号与text正文与 options 数组合并并用array_filter()剔除空值发起 POST 请求目标端点为https://api.allmysms.com/sms/send/协议由ssl选项决定使用 HTTP Basic 认证auth_basic传入 login 与 apiKey请求体为 JSON处理响应网络层失败TransportExceptionInterface会包装为TransportException提示 Could not reach the remote AllMySms server.期望的 HTTP 状态码是201若状态码不符会从响应体中提取description与code抛出异常即使返回 201若响应缺少smsId字段同样视为失败并抛异常构造 SentMessage将响应中的nbSms发送条数、balance账户余额、cost本次费用写入SentMessage的附加信息并把smsId设为消息 ID。测试 AllMySmsTransportTest.php 的testSentMessageInfo用 MockHttpClient 模拟了 201 响应并断言getInfo(nbSms)、getInfo(balance)、getInfo(cost)能正确取回这些值——这也印证了 CHANGELOG 中 7.3 版本 AddnbSms,balance, andcostinfo into returnedSentMessage 的说明。5.1 传输器字符串表示AllMySmsTransport::__toString()会输出形如allmysms://api.allmysms.com或allmysms://api.allmysms.com?fromTEST的字符串这在toStringProvider测试中有对应断言可用于日志记录或SentMessage的传输通道标识。六、环境要求与安装前提依据桥接包的 composer.json使用该桥接需满足PHP 版本 8.4.1symfony/http-client^7.4 或 ^8.0symfony/notifier^8.2。由于桥接包位于本仓库的 Notifier Bridge 目录通常在 Symfony 项目中通过 Composer 安装对应包名symfony/all-my-sms-notifier然后在.env中配置ALLMYSMS_DSN环境变量即可被 Notifier 自动发现Notifier 会依据 DSN scheme 匹配到AllMySmsTransportFactory其getSupportedSchemes()返回[allmysms]。七、小结围绕 README 的 DSN 与消息选项两条主线本桥接的使用要点可归纳为用allmysms://LOGIN:APIKEYdefault?fromFROM配置环境变量LOGIN/APIKEY必填from可选且默认36180发送时构建SmsMessage需要高级能力时用AllMySmsOptions链式配置alerting、campaignName、cliMsgId、date、simulate、uniqueIdentifier、verbose再$sms-options($options)后交给$texter-send($sms)传输器只支持SmsMessage底层以 HTTP Basic 认证 POST 到api.allmysms.com/sms/send/成功以 201 smsId为判据并可通过SentMessage::getInfo()获取nbSms、balance、cost等计费信息。若需深入验证各行为可直接阅读 Tests 目录下的三个测试文件它们覆盖了 DSN 解析、选项序列化与成功响应解析等关键路径。赞分享后端Web框架【免费下载链接】symfonyThe Symfony PHP framework项目地址https://gitcode.com/GitHub_Trending/sy/symfony点击查看免费下载相关推荐Bokeh Server 认证钩子Authentication Hooks实战基于 auth-module 为 Bokeh 应用接入登录与登出Bokeh Server 认证钩子Authentication Hooks实战基于 auth module 为 Bokeh 应用接入登录与登出 导读 Bo后端Web框架Symfony Brevo Notifier 桥接组件实战从 Sendinblue 更名到 DSN 短信发送Symfony Brevo Notifier 桥接组件实战从 Sendinblue 更名到 DSN 短信发送 本篇指南围绕 Symfony 官方仓库中 Bre后端Web框架LaMa 大掩码图像修复部署与运维实战指南LaMa 大掩码图像修复部署与运维实战指南 如果你需要从图片里去掉人物、水印或文字再把大块缺失区域自然地补回来LaMa 图像修复值得一试。它是 WACV 2后端Web框架上一篇CANN/hccl主机通信端口范围配置下一篇探索Khoj您的第二大脑AI助手——最新功能与用户案例全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →