ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Symfony LightSms Notifier 桥接:DSN 配置、签名机制与版本演进深度解析

Symfony LightSms Notifier 桥接:DSN 配置、签名机制与版本演进深度解析 后端Web框架【免费下载链接】symfonyThe Symfony PHP framework项目地址https://gitcode.com/GitHub_Trending/sy/symfony点击查看免费下载本篇指南围绕 Symfony Notifier 组件中 LightSms 桥接的版本演进CHANGELOG展开结合当前仓库源码系统讲解如何通过lightsms://DSN 接入 LightSms 短信服务、SmsMessage::from发件人优先级规则、以及 8.2 新增的sslDSN 选项并深入剖析签名生成、手机号转义与错误码映射等底层实现。读完本文你将能在 Symfony 应用中独立配置并验证一个可用的 LightSms 短信通道。桥接定位与版本脉络LightSms 桥接位于 src/Symfony/Component/Notifier/Bridge/LightSms是 Symfony Notifier 为 LightSms负责消息发送与响应解析和 LightSmsTransportFactory.php负责将 DSN 解析为传输实例。该桥接的 CHANGELOG 记录了三个关键里程碑恰好勾勒出其能力演进的主线版本变更影响5.3新增桥接Add the bridgeLightSms 通道首次进入 Symfony Notifier6.2优先使用SmsMessage-fromUseSmsMessage-fromwhen defined支持按消息动态指定发件人8.2新增sslDSN 选项以支持纯 HTTP 请求Add thesslDSN option to send requests over plain HTTP允许在非 TLS 环境下发送请求下面将逐项还原这些变更背后的实现细节。安装与 DSN 配置桥接包名为symfony/light-sms-notifier见 composer.json要求 PHP8.4.1并依赖symfony/http-client^7.4|^8.0与symfony/notifier^8.2。可通过 Composer 安装composer require symfony/light-sms-notifierDSN 格式根据 README.mdDSN 的标准格式为LIGHTSMS_DSNlightsms://LOGIN:TOKENdefault?fromPHONE其中LOGIN—— 你的 LightSms 登录名TOKEN—— 账户内显示的 Token在工厂解析中对应 DSN 密码段见下文PHONE—— 你的 LightSms 发件人手机号码。账户信息可从 LightSms 官网的 API 管理页面获取。若将主机段固定为default工厂会回退到传输类中定义的默认主机LightSmsTransport.php 声明了protected const HOST www.lightsms.com即实际请求目标。8.2 新增的 ssl 选项在 8.2 之前传输默认走 HTTPSAbstractTransport.php 中定义protected const SSL true而getHttpScheme()按($this-ssl ?? static::SSL) ? https : http决定协议。8.2 的变更让ssl成为可配置的 DSN 选项从而允许在需要纯 HTTP 的环境下发送请求LIGHTSMS_DSNlightsms://LOGIN:TOKENdefault?fromPHONEssl0解析逻辑在 AbstractTransportFactory.php 的getSsl()方法中null $dsn-getOption(ssl) ? null : $dsn-getBooleanOption(ssl)。随后 LightSmsTransportFactory.php 将结果通过-setSsl($this-getSsl($dsn))注入传输实例ssl0→ 强制使用http://发送请求省略ssl→ 回退到类常量SSL默认true即 HTTPSssl1→ 显式 HTTPS。注意明文 HTTP 会暴露请求参数含登录名与签名仅应在受控的测试或内网环境中使用。6.2 变更按消息动态指定发件人6.2 之前发件人只能来自 DSN 中的from参数6.2 起如果SmsMessage实例显式设置了发件人则优先采用该值。实现位于 LightSmsTransport.php 的doSend()中sender $message-getFrom() ?: $this-from,即sender字段取值遵循SmsMessage的from若非空 DSN 的from参数。这得益于 SmsMessage.php 的构造签名__construct(string $phone, string $subject, string $from , ...)其中from默认为空字符串。于是业务代码可以这样按需指定发件人use Symfony\Component\Notifier\Notifier; use Symfony\Component\Notifier\Message\SmsMessage; $message new SmsMessage( phone: 8613800138000, subject: 您的验证码是 123456, from: 01012345678, // 覆盖 DSN 中的默认发件人 ); $notifier-send($message);未设置from时保持空串?:运算会优雅回退到 DSN 配置的默认发件人兼容旧版行为。发送流程与签名机制源码级doSend()的完整流程如下类型校验supports()仅接受SmsMessage其他消息类型如ChatMessage会抛出UnsupportedMessageTypeException组装参数依次收集login、phone、sender、text、timestamp当前 Unix 时间戳生成签名generateSignature()先将参数按 key 排序ksort再拼接为字符串并追加密码最后取md5ksort($data); return md5(implode(, array_values($data)).$this-password);发起 GET 请求目标为{scheme}://www.lightsms.com/external/get/send.php参数经query传递校验响应网络异常抛TransportException非 200 状态码直接失败解析业务错误码从响应数组中提取error字段非 0 即按错误码表翻译成可读信息见下节返回 SentMessage成功时若响应包含id_sms会写入SentMessage的 message id供后续状态查询使用。手机号转义发送前escapePhoneNumber()将前缀统一替换为国际拨号前缀00return str_replace(, 00, $phoneNumber);例如37061234567会转换为0037061234567后再发送。错误码映射表LightSmsTransport.php 内置了ERROR_CODES常量表覆盖 139 及 999 共数十种业务错误常见如错误码含义6Invalid signature签名无效7Invalid login登录名无效8Invalid sender name发件人名称无效10Sender name not approved发件人未审核通过13号码在黑名单中禁止发送14单次请求号码超过 50 个16Invalid phone number手机号无效32 / 35余额不足999未知错误发送失败时TransportException的消息会携带Unable to send the SMS: {错误描述}便于快速定位是签名、发件人还是余额问题。测试验证DSN 解析与消息支持仓库中的测试用例直接印证了上述行为LightSmsTransportFactoryTest.php 验证 DSN 解析lightsms://login:tokenhost.test?from0611223344可成功创建传输缺少用户或密码的 DSN 会被判定为IncompleteDsn如lightsms://logindefault?from...而somethingElse://等非lightsmsscheme 则被拒绝LightSmsTransportTest.php 验证消息支持范围SmsMessage受支持ChatMessage与其他 dummy 消息均不受支持__toString()输出形如lightsms://www.lightsms.com?fromfrom的规范化 DSN。日常接入后可运行桥接自带测试确认环境cd src/Symfony/Component/Notifier/Bridge/LightSms phpunit小结LightSms 桥接虽小却完整展现了 Symfony Notifier 的桥接范式Transport承载协议细节TransportFactory负责 DSN 解析AbstractTransport提供host/port/ssl基础设施。从 5.3 的首次引入到 6.2 的按消息指定发件人再到 8.2 的ssl选项每一次版本演进都可以在 CHANGELOG.md 与源码一一对应。配置时只需记住三点DSN 中login/token与from必填业务发件人可通过SmsMessage覆盖非 TLS 环境显式追加ssl0即可。赞分享后端Web框架【免费下载链接】symfonyThe Symfony PHP framework项目地址https://gitcode.com/GitHub_Trending/sy/symfony点击查看免费下载相关推荐Symfony Notifier 的 AllMySms 短信桥接器DSN 配置、消息选项与版本演进深度解析Symfony Notifier 的 AllMySms 短信桥接器DSN 配置、消息选项与版本演进深度解析 导读 本文以 AllMySms 桥接器 CHANG后端Web框架Symfony Notifier 的 Chatwork 桥接器DSN 配置、消息构建与 ssl 选项源码解析Symfony Notifier 的 Chatwork 桥接器DSN 配置、消息构建与 ssl 选项源码解析 本篇技术指南以 src/Symfony/Comp后端Web框架QuickRecorder 教程5 分钟用好这款不足 10MB 的 macOS 录屏工具免虚拟声卡内录系统音QuickRecorder 教程5 分钟用好这款不足 10MB 的 macOS 录屏工具免虚拟声卡内录系统音 QuickRecorder 是一款轻量 mac后端Web框架上一篇Refine 文档实战CSS 圆角完整指南——从 border-radius 简写到 clip-path、Masking 与 SVG 组合下一篇Apache Airflow 3.3共享事件流Shared Stream——让同一 Triggerer 中的多个 Trigger 共用一个轮询循环创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表