Yii做短信业务后端短信发送对接处理

雨浩姑娘_9299

雨浩姑娘_9299

2026-08-19

1002人浏览

原创

yii短信后端核心是可追踪、可重试、可审计,须规范组件注册(独立声明于components)、请求构造(动态签名+url编码+时间戳校验)和响应解析(检查业务code而非仅http状态码)。

yii做短信业务后端短信发送对接处理

Yii 做短信业务后端,核心不是“调通接口”,而是让每次发送都可追踪、可重试、可审计。不规范的对接常导致:明明返回 200 却没发出去、验证码被吞、高并发时连接池打满、错误日志为空、重试逻辑失效——这些问题基本都源于组件注册、请求构造和响应解析三个环节没做对。

必须手动注册独立短信组件

不能把短信配置写在 params.php 或用全局 Yii::$app->httpclient;必须在 config/web.php(或 console.php)的 components 中显式声明:

  • 'sms' => [ 'class' => 'common\components\SmsClient', 'apiUrl' => 'https://sms-api.example.com/v3/send', 'accessKey' => 'ak-xxx', 'secretKey' => 'sk-xxx', 'timeout' => 8, ]
  • timeout 必须 ≥ 8 秒:阿里云、腾讯云等在高峰时段响应常达 3~6 秒,设 5 秒默认值会导致约 12% 请求被误判超时
  • 组件必须由 Yii DI 容器管理,否则控制器里无法通过 $this->sms 访问

请求构造要严格合规

多数平台(如互亿无线、阿里云)要求动态签名 + URL 编码 + 时间戳校验,任意一环出错都会返回“成功”但实际失败:

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 中文内容必须 urlencode(),否则签名值错、平台拒收
  • 签名串拼接顺序必须与文档一致(如 account+mobile+content+time+key),且 time 是 10 位 Unix 时间戳,误差 ≤ 300 秒
  • 密码类字段(如 password)不能是固定密钥,而应是 md5($apiKey . $time) 动态生成
  • 阿里云模板变量名大小写敏感:${code} 对应 ['code' => '123456'],写成 CODE 或 【code】 都会报 InvalidTemplateParam

响应解析不能只看 HTTP 状态码

HTTP 200 ≠ 发送成功。必须解码 JSON 并检查业务字段:

  • 先判断 $response->isOk,非 true 则抛出异常
  • 再解码 $data = json_decode($response->content, true),检查 $data['code'] === 0(以阿里云为例)
  • 对临时性错误(如 code = 10003 “频率超限”)记录完整响应体到 @runtime/logs/sms-error.log,并实现指数退避重试
  • 不要用模糊匹配(如 strpos($content, 'success')),避免把错误提示里的“success”当真

异步发送推荐走队列解耦

用户注册/下单后发短信,不应阻塞主请求流程:

  • 用 yii-queue 扩展,定义 SmsJob 类封装发送逻辑
  • 控制器中先返回成功响应(return $this->asJson(['status' => 'accepted'])),再调用 Yii::$app->queue->push(new SmsJob(...))
  • 更稳妥的做法是把 push() 放在 afterAction() 钩子里,确保响应已发出
  • 轻量通知类任务(如日志、非关键短信)可直接用 yii\queue\sync\Queue,避免 DB 队列表锁竞争

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii框架适用场景 yii

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2183

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5810

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5106

10

php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

9584

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5761

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2055

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3588

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4274

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3351

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习