本文目录导读:

在PHP项目中对接短信通知接口,通常遵循以下几个标准步骤,虽然不同短信服务商(如阿里云、腾讯云、七牛云、Twilio等)的API细节不同,但核心流程是一致的。
以下是详细的对接指南,包含代码示例(以阿里云短信服务为例):
第一步:准备工作
- 选择短信服务商:
- 国内:阿里云、腾讯云、华为云、七牛云、梦网科技。
- 国际:Twilio、Vonage (Nexmo)。
- 注册与认证:
注册账号,完成企业/个人实名认证。
- 获取密钥:
- AccessKey ID 和 AccessKey Secret(阿里云/腾讯云)。
- 或 Account SID 和 Auth Token(Twilio)。
- 申请签名和模板:
- 短信签名:你的公司名】,需要审核。
- 短信模板:您的验证码是${code},5分钟内有效。”,需要审核。
- 注意:测试阶段可能需要将接收号码加入“测试白名单”。
第二步:安装SDK(推荐)
不要手动写HTTP请求,使用服务商提供的SDK最安全、省事。
# 使用 Composer 安装阿里云短信 SDK composer require alibabacloud/dysmsapi # 或安装腾讯云短信 SDK composer require tencentcloud/sms # 或安装 Twilio SDK composer require twilio/sdk
第三步:编写发送代码(核心)
示例1:阿里云短信
<?php
// 引入自动加载
require_once 'vendor/autoload.php';
// 引入阿里云 SDK 命名空间
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
/**
* 发送短信
*
* @param string $phone 接收号码(如 13800138000)
* @param string $code 验证码内容
* @return array 发送结果
*/
function sendSms($phone, $code) {
// 1. 配置全局客户端(建议在项目初始化时只配置一次)
AlibabaCloud::accessKeyClient(
'你的AccessKey ID', // 从阿里云控制台获取
'你的AccessKey Secret' // 从阿里云控制台获取
)->regionId('cn-hangzhou') // 区域,国内一般都是cn-hangzhou
->asDefaultClient();
try {
// 2. 调用 SendSms 接口
$result = AlibabaCloud::rpc()
->product('Dysmsapi') // 产品名称
->version('2017-05-25') // API版本
->action('SendSms') // 接口名称
->method('POST') // 请求方式
->host('dysmsapi.aliyuncs.com') // 服务地址
->options([
'query' => [
'RegionId' => 'cn-hangzhou',
'PhoneNumbers' => $phone, // 手机号
'SignName' => '【你的公司名】', // 短信签名(审核通过的)
'TemplateCode' => 'SMS_123456789', // 短信模板CODE(审核通过的)
'TemplateParam' => json_encode([ // 模板变量(必须是JSON字符串)
'code' => $code
]),
],
])
->request();
// 3. 解析返回结果
$response = $result->toArray();
return $response; // 返回的是数组
} catch (ClientException $e) {
// 客户端错误(如配置错误)
return ['Code' => 'ERROR', 'Message' => $e->getErrorMessage()];
} catch (ServerException $e) {
// 服务端错误(如参数错误、触发限流)
return ['Code' => 'ERROR', 'Message' => $e->getErrorMessage()];
}
}
// ----- 调用示例 -----
$result = sendSms('13800138000', '123456');
if ($result['Code'] == 'OK') {
echo "短信发送成功!";
} else {
echo "发送失败:" . $result['Message'];
}
示例2:腾讯云短信(更简洁的写法)
<?php
require_once 'vendor/autoload.php';
use TencentCloud\Common\Credential;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Sms\V20210111\Models\SendSmsRequest;
use TencentCloud\Sms\V20210111\SmsClient;
function sendTencentSms($phone, $code) {
try {
// 1. 实例化认证对象
$cred = new Credential("你的SecretId", "你的SecretKey");
$client = new SmsClient($cred, "ap-guangzhou"); // 地域
// 2. 实例化请求对象
$req = new SendSmsRequest();
$req->SmsSdkAppId = "你的应用ID"; // 在短信控制台应用管理里
$req->SignName = "你的签名";
$req->TemplateId = "模板ID";
$req->TemplateParamSet = [$code]; // 模板参数列表(注意这里是数组,不是JSON)
$req->PhoneNumberSet = ["+86".$phone]; // 需要带国际区号
// 3. 发送请求
$resp = $client->SendSms($req);
return json_decode($resp->toJsonString(), true);
} catch (TencentCloudSDKException $e) {
return ['SendStatusSet' => [['Code' => 'ERROR', 'Message' => $e->getMessage()]]];
}
}
第四步:处理异步通知(回执)
大部分短信服务商不会直接让你知道短信是否成功抵达用户手机,而是通过回调URL(也叫状态报告)通知你。
- 为什么需要?帮助排查手机号是否有效、是否被运营商拦截。
- 如何配置:在短信服务商的控制台设置一个回调地址,
https://yourdomain.com/sms/callback。 - PHP接收示例:
// 文件:sms_callback.php
$data = file_get_contents("php://input"); // 获取POST原始数据
$arr = json_decode($data, true);
// 验证签名(重要!防止伪造回调)
// 根据服务商文档验证签名
// 处理回调
foreach ($arr as $item) {
$phone = $item['phone_number']; // 手机号
$status = $item['status']; // 状态:DELIVERED(成功)或 UNDELIVERED(失败)
$code = $item['err_code']; // 失败错误码
// 写入数据库:更新该条短信的发送状态
}
http_response_code(200); // 务必返回200,否则服务商会重试
第五步:最佳实践与注意事项
-
敏感信息保护:
AccessKey Secret等敏感信息不要硬编码在PHP文件中,应使用环境变量(.env文件)或配置中心。// .env 文件 SMS_ACCESS_KEY_ID=your_key SMS_ACCESS_KEY_SECRET=your_secret // PHP 读取 $key = getenv('SMS_ACCESS_KEY_ID'); -
日志记录:每次发送短信,无论成功失败,都记录日志(手机号、发送时间、内容、返回码、IP地址)。
-
频率限制:
- 服务商限制:例如单号每天最多10条,每分钟1条。
- 业务限制:防止用户恶意刷短信,建议加上验证码(60秒后才能再次获取)。
-
错误码处理:不要只判断“成功”,要处理常见的错误码:
isv.BUSINESS_LIMIT_CONTROL:触发业务限流(频率太快)。isv.MOBILE_NUMBER_ILLEGAL:手机号格式错误。SignatureDoesNotMatch:密钥错误或签名不正确。
-
测试环境:使用服务商提供的测试模板或白名单号码,避免产生真实费用。
| 步骤 | 核心操作 | 关键文件/代码 |
|---|---|---|
| 准备 | 获取密钥、申请签名和模板 | 服务商控制台 |
| 安装 | composer require ... |
composer.json |
| 发送 | 配置客户端,调用API发送 | 调用函数 |
| 回调 | 配置回调URL,处理状态报告 | 回调接口文件 |
| 优化 | 使用.env,处理频率限制,写日志 | 日志中间件,限流逻辑 |
按照这个流程,你就可以在自己的PHP项目中快速、稳定地对接短信通知接口了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播