新闻详情

新闻详情

首页 / 资讯中心 / 详情

Symfony Notifier AllMySms Bridge 实战指南:通过 DSN 与 AllMySmsOptions 集成法国短信服务

发布时间:2026/10/2 17:28:59来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HTTP协议核心机制与Qt工程实践:从报文到QNetworkAccessManager调试 2026/10/2 18:26:26

HTTP协议核心机制与Qt工程实践:从报文到QNetworkAccessManager调试

打开浏览器输入网址回车,页面上出现你要的内容;手机App下拉刷新,新数据瞬间铺满屏幕;智能设备上报温度、摄像头回传画面、小程序里完成一次登录授权——这些看起来完全不相关的场景,背后站的都是同一个东西&#xff1a…

阅读更多 →
ESP32-P4 + ESP32-C5双芯架构:打造自带网关的智能触控屏 2026/10/2 18:26:26

ESP32-P4 + ESP32-C5双芯架构:打造自带网关的智能触控屏

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
iOS超级签名源码搭建指南:Java后端+分发页完整实现 2026/10/2 18:26:26

iOS超级签名源码搭建指南:Java后端+分发页完整实现

简介:一套Java与Vue开发的苹果iOS超级签名源码包,附带安卓合并分发页面,面向需要搭建签名分发平台的开发者或站长。功能覆盖登录注册、共有池证书管理、用户自行上传证书、分发页轮播与简介配置、签名后对接阿里云OSS、七牛云或本地存储下载&…

阅读更多 →
Agent Skill 生态治理:从无序囤积到可审计的技能组合 2026/10/2 18:26:26

Agent Skill 生态治理:从无序囤积到可审计的技能组合

最近在帮团队搭建带 Agent Skill 的智能体项目,发现一个特别有意思的现象:凡是刚开始接触 skill 的人,都经历过一段“无脑装机”的蜜月期——看到什么 skill 都想往 agent 里塞,装完一批发现根本管不过来,版本对不上、…

阅读更多 →
AI情报中枢:基于确定性快照的自动化日报系统设计 2026/10/2 18:26:26

AI情报中枢:基于确定性快照的自动化日报系统设计

项目标题是“AI 日报(2026年9月24日)”,乍一看像一份新闻简报,但实际它根本不是传统意义上的媒体产品——它是一套可复用、可自动化、可定制的AI驱动型信息聚合与轻量级内容生成系统,核心目标不是发布新闻,…

阅读更多 →
本科生降AI率实战:9个工具与避坑指南 2026/10/2 18:26:20

本科生降AI率实战:9个工具与避坑指南

先说句实在话:本科生现在提“降AI率”,多数是被检测报告逼出来的。我见过一个学弟,论文写得四平八稳,结果AIGC检测直接标红62%,导师看完让他拿回去“亲手重写”。他来找我的时候,第一句话就是“有没有工具能…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉