首頁 後端開發 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)