ホームページ >バックエンド開発 >PHPチュートリアル >PHP はシリアル ポートを介したテキスト メッセージの送信を実装し、PHP シリアル ポートはテキスト メッセージを送信します_PHP チュートリアル

PHP はシリアル ポートを介したテキスト メッセージの送信を実装し、PHP シリアル ポートはテキスト メッセージを送信します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:47:01845ブラウズ

PHP はシリアル ポート経由でテキスト メッセージを送信でき、PHP はシリアル ポート経由でテキスト メッセージを送信できます

テクノロジーの進歩により、テキスト メッセージの送受信の分野では、ブロック モード、テキストの 3 つのモードが生み出されました。 AT コマンドに基づく MODE、および AT コマンドに基づく PDU MODE。このうち、TEXT MODE は比較的シンプルで、多くの Nokia 携帯電話がこのモードをサポートしています。ほとんどの Siemens 携帯電話は PDU モードのみをサポートします。 PDU モードは、テキスト メッセージを送受信する方法であり、テキスト メッセージのテキストは 16 進数でエンコードされて送信されます。現在、PDU が BLOCK MODE に代わっています。

SMS は Etsi によって開発された仕様 (GSM 03.40 および GSM 03.38) です。 7 ビット エンコードを使用すると最大 160 文字を送信できますが、8 ビット エンコードでは最大 140 文字を送信できますが、16 ビット エンコードを使用すると最大 140 文字を送信できます。最大 70 文字。ほとんどの携帯電話で表示できる Unicode (UCS2) テキスト情報を表示するために使用されます。

今日は、PDU MODE、UCS2 エンコーディングについて説明します。これは、英語または中国語に関係なく、最大 70 文字しか送信できないことを意味します。
「こんにちは」というメッセージを送信するとします。送信する前に、SIM カードが配置されている SMS センター番号 (China Mobile の SMS センター番号など) を知っておく必要があります:

受信した携帯電話番号: 13638197275
杭州SMSセンター番号: 13800571500
メッセージ内容: こんにちは
このテキスト メッセージを送信するには、電話機はエンコード後に実行し、次の文字列になります。 0891683180501705F011000D91683136187972F5000800044F60597D
この一連のコードを最初から最後まで説明してください:
08 – SMS センター番号の長さを指します。つまり、(91)+(683180501705F0) を 2 で割った長さ、つまり 08 = (2+14)/2
91 – SMS センター番号のタイプを指します。 91 は、TON/NPI が International/E.164 標準に準拠していることを意味します。これは、数値の前に「+」記号を追加する必要があることを意味しますが、91 が最も一般的に使用されます。
683180501705F0 - SMS センター番号。位置に若干の処理が行われているため、実際の数値は 8613800571500 になります (文字 F は偶数の長さを補うために追加された文字です)。
11 - ファイルヘッダーバイト
00-情報タイプ(TP-MESSAGE-Reference)
0d -着信番号の長さ × 91 - 着信番号の種類

実際、実際の処理では、通常、プログラム内で 11000D91 をハードコーディングします。これは、中国ではこれらのデータが変更されないためです。

683136187972F5 - 着信番号がシフトされており、実際の番号は「8613638197275」です。

上記の (00) + (0D) + (91) + (683136187972F5) は、テキスト メッセージ全体の宛先アドレス (TP-Destination-Address) の 2 番目の部分を構成します。

続けて...

00 - プロトコル識別 TP-PID、通常は 00 です

08 - データコーディングスキーム TP-DCS (TP-Data-Coding-Scheme)、前述の USC2 (16 ビット) データコーディングを使用
00 - 有効期間 TP-VP (TP-Valid-Period)
04 - 長さ TP-UDL (TP-User-Data-Length)、メッセージ長/2 の 16 進数の 04 です
4F60597D テキスト メッセージの内容は次のとおりです。実際の内容は次のとおりです: 「こんにちは」

上記の状況に基づいて、SMS エンコード用のプログラム スクリプトを作成できます。

1. SMS センター番号の処理:


1. SMS センター番号「+8613800571500」から + 記号を削除して、長さが偶数であるかどうかを確認します。そうでない場合は、最後に F を追加します。 =>「8613800571500F」

2. 奇数桁と偶数桁を入れ替えます。

=>「683108501705F0」
3. SMS センター番号の前に文字 91 を追加します。91 は国際化を意味します
。 =>「91683108501705F0」
4. 長さを計算し、結果を 2 で割って、2 桁の 16 進文字列にフォーマットします、16 / 2 = 8 => “08”
=>「0891683108501705F0」


2. 携帯電話番号の処理:

1. 携帯電話番号 +8613638197275 から + 記号を削除し、長さが偶数であるかどうかを確認します。そうでない場合は、最後に F を追加します。 =>「8613638197275F」
2. 携帯電話番号の奇数桁と偶数桁を入れ替えます。

=>「683136187972F5」



3. ショートメッセージの処理:

1. 文字列を Unicode コードに変換します。 「こんにちは」のUnicodeコードは4F60597Dです 2. 長さを 2 で割って、2 つの 16 進数を保持します。つまり、4F60597D = 8 / 2 => “04”、
=>「044F60597D」


4. 組み合わせ

1. 携帯電話番号の前に文字列 11000D91 を追加します (1100: 固定、0D: 携帯電話番号の長さ (+ 記号を除く、16 進数で表現)、91: 送信
) 携帯電話へは91、PHSへは81)、
つまり、11000D91 + 683136187972F5
=>11000D91683136187972F5
2. 携帯電話番号の後に 000800 を追加し、先ほどのテキスト メッセージの内容を 000800 と書きます。 つまり、11000D91683136187972F5 + 000800 + 044F60597D
=>11000D91683136187972F5000800044F60597D
3. メッセージ全体の長さを 2 で割って、2 桁の 10 進数にフォーマットします
つまり、11000D91683136187972F5000800044F60597D => 38 ビット / 2 => 19

5.それで送信する内容はです。

AT+CMGF=0 #SMS 送信モード PDU を設定します

わかりました
AT+CMGS=19
> #テキストメッセージのコンテンツコードを入力してください

添付された最終的な PHP コード:

リーリー

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

http://www.bkjia.com/PHPjc/1028971.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1028971.html技術記事 PHP は、技術の進歩により、テキスト メッセージの送受信の分野で 3 つのモードを生み出してきました。ブロック モード、AT コマンドに基づくテキスト モード、...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。