インターネットの発展に伴い、テキスト メッセージングは私たちの生活に欠かせないものになりました。現代のビジネスの世界では、テキスト メッセージングもますます重要になってきています。テキスト メッセージングは、企業が顧客とリアルタイムでコミュニケーションできる、高速、便利、低コストの通信方法だからです。しかし、企業規模が徐々に拡大するにつれ、手動でのテキストメッセージ送信ではニーズに対応できなくなり、テキストメッセージを自動送信する機能の重要性がますます高まっています。
PHP は、Web リクエストの処理に最適な、人気のあるサーバーサイド スクリプト言語です。この記事では、PHPを使ってテキストメッセージを自動送信する方法を紹介します。
まず、テキスト メッセージを自動的に送信するためのいくつかの基本原則とプロセスを理解する必要があります。 SMS メッセージを自動的に送信するプロセスでは、SMS ゲートウェイ、SMS インターフェイス、SMS コンテンツという 3 つの基本要素が必要です。
テキスト メッセージを自動的に送信するプロセスでは、SMS ゲートウェイは不可欠な部分です。 SMS ゲートウェイは、SMS の送信者と受信者を接続するミドルウェアで、SMS メッセージの送受信を実現します。 SMS ゲートウェイを選択するときは、SMS 送信速度、互換性、価格、セキュリティ、安定性の要素に注意を払う必要があります。
SMS インターフェイスは、サーバーと SMS ゲートウェイ間の通信インターフェイスです。これは、サーバー上の命令と SMS ゲートウェイの間で通信し、SMS を正しい受信者に送信する役割を果たします。 SMS インターフェイスは通常、HTTP インターフェイスと SDK インターフェイスの 2 つのカテゴリに分類されます。 HTTP インターフェイスには、強力な互換性、簡単な使用、高い安定性という利点があり、小規模なビジネス シナリオに適しています。SDK インターフェイスは、より柔軟で安全性が高く、大規模で複雑なビジネス シナリオに適しています。
SMS コンテンツは、送信されるテキスト メッセージを指します。テキスト メッセージ コンテンツを作成するときは、次の点に注意する必要があります。 優れたテキスト メッセージ コンテンツは、ユーザーの注意を引き、短いテキストで正しい情報を伝えることができる必要があります。
基本的な要素を理解したら、テキスト メッセージを自動的に送信するための PHP コードの作成を開始できます。
まず、SMS ゲートウェイと SMS インターフェイスを選択する必要があります。ここでは、Alibaba Cloud SMS サービスを例として、Alibaba Cloud SMS サービスの HTTP インターフェイスを使用して実装します。具体的な手順は次のとおりです:
// 次の変数が必要です。Alibaba Cloud にログインして
$accessKeyId = "XXXXXXXXXXX";# を取得してください。 ##$accessKeySecret = "XXXXXXXXXX";
$signName = "XXXXXXXXXX";
$templateCode = "XXXXXXXXXXX";
$templateParam = array (
"code" => mt_rand(100000, 999999) // 短信模板中的替换参数,这里使用PHP内置函数mt_rand()生成一个6位验证码</p>);<p></p>//SMS インターフェイスの送信<p>function sendSms($accessKeyId, $accessKeySecret, $phoneNumbers, $signName, $templateCode, $templateParam)<br> {<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 "验证码已发送成功";
echo "验证码发送失败";
以上がphp は自動テキストメッセージングを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。