首页 后端开发 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位验证码</p>
<p>);</p>
<p>// 发送短信接口<br>function sendSms($accessKeyId, $accessKeySecret, $phoneNumbers, $signName, $templateCode, $templateParam)<br>{</p>
<pre class="brush:php;toolbar:false">$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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)