隨著網路的發展,簡訊已經成為我們生活中不可或缺的一部分。在現代化的商業領域中,簡訊也變得越來越重要,因為它是一種快速、方便、低成本的通訊方式,能夠讓企業與客戶進行即時溝通。但是,隨著企業規模的逐漸擴大,手動發送簡訊已經無法滿足需求,因此,實現自動發送簡訊的功能變得越來越重要。
PHP是一種流行的伺服器端腳本語言,它非常適合用於處理web請求。本文將介紹如何使用PHP來自動發送簡訊。
首先,我們需要了解一些自動發送簡訊的基本原理和流程。在實現自動發送簡訊的過程中,我們需要以下三個基本的元素:簡訊網關、簡訊介面和簡訊內容。
在自動發送簡訊的過程中,簡訊網關是不可或缺的一部分。簡訊網關是一種連接簡訊發送者和接收者的中間件,它實現了簡訊的發送和接收。在選擇簡訊網關時,我們應該注意以下幾個因素:簡訊發送的速度、相容性、價格、安全性和穩定性。
簡訊介面是伺服器與簡訊閘道之間的通訊介面。它負責將伺服器上的指令和短信網關之間進行通信,並將短信發送到正確的接收者。簡訊介面通常分為兩類:HTTP介面和SDK介面。 HTTP介面具有相容性強、使用簡單、穩定性高等優點,適合用於小型的業務場景;SDK介面則更靈活、安全性高,適合用於大型、複雜的業務場景。
簡訊內容是指要傳送的簡訊文字。在撰寫簡訊內容時,應該注意以下幾個方面:一個好的簡訊內容應該能夠吸引用戶的注意力,在簡短的文字中傳遞出正確的訊息。
在了解了基本的元素之後,我們可以開始編寫PHP程式碼來實現自動發送簡訊。
首先,我們需要選擇一條簡訊網關和簡訊介面。這裡我們以阿里雲簡訊服務為例,使用阿里雲簡訊服務的HTTP介面進行實現,具體的步驟如下:
// 以下變數為必填項,請登入阿里雲取得
$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中文網其他相關文章!