搜索
首页后端开发PHP问题php 实现自动发短信

php 实现自动发短信

May 06, 2023 am 11:03 AM

随着互联网的发展,短信已经成为我们生活中不可或缺的一部分。在现代化的商业领域中,短信也变得越来越重要,因为它是一种快速、方便、低成本的通信方式,能够让企业与客户进行实时沟通。但是,随着企业规模的逐渐扩大,手动发送短信已经无法满足需求,因此,实现自动发短信的功能变得越来越重要。

PHP是一种流行的服务器端脚本语言,它非常适合用于处理web请求。本文将介绍如何使用PHP来自动发送短信。

首先,我们需要了解一些自动发送短信的基本原理和流程。在实现自动发送短信的过程中,我们需要以下三个基本的元素:短信网关、短信接口和短信内容。

  1. 短信网关

在自动发送短信的过程中,短信网关是不可或缺的一部分。短信网关是一种连接短信发送者和接收者的中间件,它实现了短信的发送和接收。在选择一款短信网关时,我们应该注意以下几个因素:短信发送的速度、兼容性、价格、安全性和稳定性。

  1. 短信接口

短信接口是服务器与短信网关之间的通信接口。它负责将服务器上的指令和短信网关之间进行通信,并将短信发送到正确的接收者。短信接口通常分为两类:HTTP接口和SDK接口。HTTP接口具有兼容性强、使用简单、稳定性高等优点,适合用于小型的业务场景;SDK接口则更加灵活、安全性高,适合用于大型、复杂的业务场景。

  1. 短信内容

短信内容是指要发送的短信文本。在编写短信内容时,应该注意以下几个方面:一个好的短信内容应该能够吸引用户的注意力,在简短的文本中传递出正确的信息。

在了解了基本的元素之后,我们可以开始编写PHP代码来实现自动发送短信。

首先,我们需要选择一款短信网关和短信接口。这里我们以阿里云短信服务为例,使用阿里云短信服务的HTTP接口进行实现,具体的步骤如下:

  1. 注册阿里云账号,进入短信服务控制台,创建一个Access Key。
  2. 阿里云短信服务提供了一套完整的API接口,我们可以通过调用该接口来实现自动发送短信的功能。具体可参考阿里云短信服务API文档。
  3. 编写PHP代码进行调用。具体的代码如下:

// 以下变量为必填项,请登录阿里云获取
$accessKeyId = "XXXXXXXXXXX";
$accessKeySecret = "XXXXXXXXXX";
$signName = "XXXXXXXXXX";
$templateCode = "XXXXXXXXXXX";

$phoneNumbers = "XXXXXXXXXXX"; // 接收短信的手机号码
$templateParam = array (

"code" => mt_rand(100000, 999999)  // 短信模板中的替换参数,这里使用PHP内置函数mt_rand()生成一个6位验证码

);

// 发送短信接口
function sendSms($accessKeyId, $accessKeySecret, $phoneNumbers, $signName, $templateCode, $templateParam)
{

$params = array ();

// *** 需用户填写部分 ***
// fixme 必填: 短信接收号码
$params["PhoneNumbers"] = $phoneNumbers;
// fixme 必填: 短信签名-可在短信控制台中找到
$params["SignName"] = $signName;
// fixme 必填: 短信模板-可在短信控制台中找到
$params["TemplateCode"] = $templateCode;
// fixme 可选: 模板中的变量替换JSON串
if ($templateParam) {
    $params["TemplateParam"] = json_encode($templateParam);
}

// *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
if (!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
    $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
}

// 初始化SignatureHelper实例用于设置参数,签名以及发送请求
$helper = new SignatureHelper();

try {
    $content = $helper->request(
                    $accessKeyId,
                    $accessKeySecret,
                    "dysmsapi.aliyuncs.com",
                    array_merge($params, array(
                        "RegionId" => "cn-hangzhou",
                        "Action" => "SendSms",
                        "Version" => "2017-05-25",
                    ))
                );
    return $content;
} catch (Exception $e) {
    return false;
}

}

// 签名类
class SignatureHelper {

/**
 * 生成签名并发起请求
 *
 * @param string $accessKeyId
 *            您的Access Key ID
 * @param string $accessKeySecret
 *            您的Access Key Secret
 * @param string $domain
 *            API接口所在域名
 * @param array $params
 *            参数结构
 * @param string $method
 *            请求方式,GET或POST
 * @return bool|\mixed 服务器返回的数据,失败返回false
 */
public function request($accessKeyId, $accessKeySecret, $domain, $params, $method = 'POST')
{
    $apiParams = array ();
    foreach ($params as $key => $value) {
        $apiParams[$key] = $value;
    }

    // 添加公共请求参数
    $apiParams["SignatureMethod"] = "HMAC-SHA1";
    $apiParams["SignatureNonce"] = uniqid(mt_rand(0, 0xffff), true);
    $apiParams["SignatureVersion"] = "1.0";
    $apiParams["AccessKeyId"] = $accessKeyId;
    $apiParams["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
    $apiParams["Format"] = "JSON";

    // 计算签名并拼接请求参数
    ksort($apiParams);
    $canonicalizedQueryString = '';
    foreach ($apiParams as $key => $value) {
        $canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value);
    }
    $stringToSign = $method . '&%2F&' . $this->percentEncode(substr($canonicalizedQueryString, 1));
    $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
    $apiParams["Signature"] = $signature;

    // 发送请求
    $url = 'http://' . $domain . '/?' . http_build_query($apiParams);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

/**
 * 生成规范化请求字符串
 *
 * @param array $params
 *            请求参数
 * @return string
 */
private function getCanonicalizedQueryString(array $params)
{
    ksort($params);

    $canonicalizedQueryString = '';
    foreach ($params as $key => $value) {
        $canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value);
    }

    return substr($canonicalizedQueryString, 1);
}

/**
 * 生成规范化请求
 *
 * @param array $params
 *            请求参数
 * @return string
 */
private function getCanonicalizedHeaders(array $params)
{
    ksort($params);

    $canonicalizedHeaders = '';
    foreach ($params as $key => $value) {
        $canonicalizedHeaders .= $key . ':' . $value . "\n";
    }

    return $canonicalizedHeaders;
}

/**
 * 获取content-Md5值
 *
 * @param string $content
 *            请求内容
 * @return string
 */
private function getContentMd5($content)
{
    return base64_encode(md5($content, true));
}

/**
 * 特殊字符编码
 *
 * @param string $value
 *            需要编码的字符串
 * @return string
 */
private function percentEncode($value)
{
    $value = urlencode($value);
    $value = preg_replace('/\+/', '%20', $value);
    $value = preg_replace('/\*/', '%2A', $value);
    $value = preg_replace('/%7E/', '~', $value);

    return $value;
}

}

// 调用发送短信接口
$result = sendSms($accessKeyId, $accessKeySecret, $phoneNumbers, $signName, $templateCode, $templateParam);
if ($result !== false) {

echo "验证码已发送成功";

} else {

echo "验证码发送失败";

}

以上PHP代码实现了使用阿里云短信服务的HTTP接口发送短信的功能。我们可以根据需要进行适当的调整和修改,以满足具体的业务需求。

总之,实现自动发送短信的功能是非常有用的。通过学习本文介绍的相关知识和技术,我们可以轻松地实现自动发送短信的功能,提高我们的工作效率和业务水平。

以上是php 实现自动发短信的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
酸与基本数据库:差异和何时使用。酸与基本数据库:差异和何时使用。Mar 26, 2025 pm 04:19 PM

本文比较了酸和基本数据库模型,详细介绍了它们的特征和适当的用例。酸优先确定数据完整性和一致性,适合财务和电子商务应用程序,而基础则侧重于可用性和

PHP安全文件上传:防止与文件相关的漏洞。PHP安全文件上传:防止与文件相关的漏洞。Mar 26, 2025 pm 04:18 PM

本文讨论了确保PHP文件上传的确保,以防止诸如代码注入之类的漏洞。它专注于文件类型验证,安全存储和错误处理以增强应用程序安全性。

PHP输入验证:最佳实践。PHP输入验证:最佳实践。Mar 26, 2025 pm 04:17 PM

文章讨论了PHP输入验证以增强安全性的最佳实践,重点是使用内置功能,白名单方法和服务器端验证等技术。

PHP API率限制:实施策略。PHP API率限制:实施策略。Mar 26, 2025 pm 04:16 PM

本文讨论了在PHP中实施API速率限制的策略,包括诸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之类的库。它还涵盖监视,动态调整速率限制和手

php密码哈希:password_hash和password_verify。php密码哈希:password_hash和password_verify。Mar 26, 2025 pm 04:15 PM

本文讨论了使用password_hash和pyspasswify在PHP中使用密码的好处。主要论点是,这些功能通过自动盐,强大的哈希算法和SECH来增强密码保护

OWASP前10 php:描述并减轻常见漏洞。OWASP前10 php:描述并减轻常见漏洞。Mar 26, 2025 pm 04:13 PM

本文讨论了OWASP在PHP和缓解策略中的十大漏洞。关键问题包括注射,验证损坏和XSS,并提供用于监视和保护PHP应用程序的推荐工具。

PHP XSS预防:如何预防XSS。PHP XSS预防:如何预防XSS。Mar 26, 2025 pm 04:12 PM

本文讨论了防止PHP中XSS攻击的策略,专注于输入消毒,输出编码以及使用安全增强的库和框架。

PHP接口与抽象类:何时使用。PHP接口与抽象类:何时使用。Mar 26, 2025 pm 04:11 PM

本文讨论了PHP中接口和抽象类的使用,重点是何时使用。界面定义了无实施的合同,适用于无关类和多重继承。摘要类提供常见功能

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能