Kuanle Communication を使用して、PHP Web ページでテキスト メッセージの送受信を実現します
私は、Web サイトにテキスト メッセージの送受信機能を提供したいと常々思っていました。
最近、Kuanle Communication について知りました。これは、China Telecom が提供し、Huawei が開発したサービスで、WebService の形式でテキスト メッセージを送受信するための開発インターフェイスを提供します。このインターフェイスを呼び出して送信できます。テキストメッセージを受信します。
Kuanle Communication を使用する前に、まずアカウントとパスワードを開設する必要があります (電気通信会社で開設します。アカウント番号は電話番号です。開設時に WebService メソッドであると宣言する必要があります。そうしないと使用できません)。
テキスト メッセージの送信には 1 メッセージあたり 8 ポイントの料金がかかり、受信は無料です。
Kuanle Communication には二次開発用のインターフェース ドキュメントがあります。 Baidu で「Kuanle Communication Interface」を検索して
を見つけます。
Kuanle Communication は 2 つのインターフェースを提供します:
1 つは SDK メソッドで、Windows COM コンポーネントとして提供され、Windows クライアント プログラムの作成に使用されます
もう 1 つは WebService メソッドで、Web サイトの開発に使用できます。
いわゆる Web サービスは、別の Web サイトが提供する機能であり、具体的には、ある Web サイトの機能を呼び出すための標準的なインターフェイスです。他のWebサイトの機能は、リクエスト内容に含まれる関数名とパラメータ(XML形式)を指定したURLにPOSTリクエストを送信し、その応答結果が関数の戻り値となります。 WebService のデータ形式の詳細については、関連ドキュメントを参照してください。
PHP5 は、WebService を簡単に呼び出すことができる、SoapClient (クライアント、WebService を使用) と SoapServer (サーバー、WebService を提供) の 2 つのクラスを提供します。
Kuanle 通信インターフェースのドキュメントは非常に長いので、テキスト メッセージの送受信の原理について簡単に説明します。
Kuanle Communication は、SMS に関連する一連のインターフェイスを提供します: Register と SendSMS
テキストメッセージを送信するプロセス:
1. まず、WebService を通じて Register インターフェイスの関数 getRandom() を呼び出し、Kuanle Communication Platform によって発行された乱数 rand
を取得します。2、次に Register インターフェイスで setCallBackAddr() 関数を呼び出してログイン
を実装します。関数プロトタイプ: String setCallBackAddr(String uc, String pw, String rand, String url);
パラメータ: uc はアカウント番号です
pw は、getRandom rand + UC パスワード + UC パスワードと MD5 暗号化文字列で取得した乱数です (つまり、rand とパスワード文字列を 2 回連結した後、MD5 暗号化が実行されます)
URL はコールバック関数の URL です (このコールバック関数は SMS の受信時に使用されます。この URL では、最初に Web サービスを実現する必要があります。Kuanle Communication Platform が WebService を呼び出します)
戻り値は接続 ID (connID) であり、後続のテキスト メッセージに使用されます
の sendSMS() 関数を呼び出してテキスト メッセージを送信できます。
関数プロトタイプ: String sendSMS(String uc, String pw, String rand, String callee[], String isreturn, String cont, int msgid, String connID);パラメータ: uc はアカウント番号です
Rand は
getrandom で得られる乱数
返礼には SMS が必要ですか? これは強力な Kuanle Communication の機能です。受信者が SMS を受信すると、Kuanle Communication Platform は SMS に返信実行を送信します。送信者
CONT は SMS のコンテンツです。中国語は GBK エンコード、base64 エンコードである必要がありますconnID は、によって返される接続 ID です。 setCallBackAddr() 関数
テキストメッセージを受信するプロセス:
setCallBackAddr() 関数を呼び出すときは、コールバック関数の URL を指定し、この URL を Web サイトに指定する必要があります。
この URL では、まず WebService を実装し、次の情報を提供する必要があります。 3 つの関数: echoOfSendSMS()、recvSMS()、NotifyStatus().テキスト メッセージを受信すると、Kuanle Communication Platform は指定した URL の
recvSMS() 関数を呼び出しますSMS 受信を受信すると、
Kuanle Communication Platform は、指定した URL echoOfSendSMS() 関数 を呼び出します。 >
ステータスが変化すると、Kuanle Communication Platform は指定した URL で NotifyStatus() 関数
これら 3 つの Web サービス関数を Web サイトに記述することで、テキスト メッセージを受信できます。
関数プロトタイプ: String recvSMS(String caller, String time, String cont, String ucNum);
パラメータ: caller はテキスト メッセージを送信する番号、cont はテキスト メッセージの内容 (base64 デコードが必要)、ucNum は
SMS 受信者の番号
関数プロトタイプ: void echoOfSendSMS(String ucNum, String cee, int msgid, int res, String recvt);
関数プロトタイプ: void NotifyStatus(int eventID, String sessionID, int res, String para1);
原理を説明した後、PHP コードの実装を見てみましょう:
$uc="02087XXXX1"; //宽乐通信帐号 $pass="uu1XXXX56"; //宽乐通信密码 $callBackURL='http://www.some.com/receive_sms.php'; //回调URL,如果不想接收短信,则这个URL可以随便写 $urlRegister="http://202.105.212.146:8080/jboss-net/services/Register?wsdl"; //Register接口URL $client = new SoapClient($urlRegister); //生成一个SoapClient对象, 使用Register接口 $rand = $client->__call("getRandom", array()); //调用getRandom()函数,取得随机数 $pw = md5($rand.$pass.$pass); //计算PW值, $connID = $client->__call("setCallBackAddr", array($uc,$pw,$rand,$callBackURL));//调用setCallBackAddr()函数,取得连接ID if ($connID<0) { //如果connID<0, 则表示登录失败, connID是错误码 print "error login"; exit; } $urlSendSms="http://202.105.212.146:8080/jboss-net/services/SendSMS?wsdl";//SendSMS接口URL $client1 = new SoapClient($urlSendSms);//生成一个SoapClient对象, 使用SendSMS接口 $callee = array("13912345678"); //接收短信的号码,做为一个数组 $content = "hello,sms from php"; //短信内容 $content = base64_encode($content); //将短信内容进行base64编码 $msgId = 1; //短信编号,可以随便编号 $needReceipt = '0'; //是否需要回执, 字符串型,'0'表示不要回执,'1'表示要回执 //调用SendSMS接口中的 sendSMS函数,发送短信 $result = $client1->__call("sendSMS", array($uc,$pw,$rand,$callee,$needReceipt,$content,$msgId,$connID)); if ($result==0) { //如果返回值为0,则发送成功 print "send OK"; } else { print "send error, error code=".$result; //否则,返回值即是错误码 }
プログラムのコメントは非常に明確です。追加の説明: 上記のプログラムのアカウント番号とパスワードは実際のアカウントのパスワードに変更する必要があります。
以下はテキスト メッセージを受信するための PHP コードです (ファイル:receive_sms.php
)
/** * 接收短信回执 * 函数原型:void echoOfSendSMS(String ucNum, String cee, int msgid, int res, String recvt); * @param string $ucNum 发送方号码 * @param string $cee 接收方号码 * @param int $msgid 短消息编号,用于客户端匹配请求消息 * @param int $res 回执的结果(=1表示接收方成功接收短信, -1为系统异常;-12:系统超时;-92:短信无法送达对方) * @param string $recvt 短消息时间 * @return 无返回值 */ function echoOfSendSMS($ucNum,$cee,$msgid,$res,$recvt){ $filename = "echo.txt"; $data = "ucNum=".$ucNum." cee=".$cee." msgid=".$msgid." res=".$res." recvt=".$recvt."\r\n"; file_put_contents($filename, $data, FILE_APPEND); } /** * 接收短信 * 函数原型:String recvSMS(String caller, String time, String cont, String ucNum); * @param string $caller 短信的发送者号码 * @param string $time 短信发送时间 * @param string $cont 短信内容(需要对短信内容进行BASE64解码) * @param string $ucNum 短信接受者号码(接收短信的UC号码) * @return string =0:成功返回, <0:失败码 */ function recvSMS($caller, $time, $cont, $ucNum) { $filename = "sms.txt"; $data = "caller:".$caller." time=".$time." ucNum=".$ucNum." content=".base64_decode($cont)."\r\n"; file_put_contents($filename, $data, FILE_APPEND); return "0"; } /** * 通用回调函数: 通知状态变化 * 函数原型:void NotifyStatus(int eventID, String sessionID,int res,String para1); * @param integer $eventId 接口事件ID * @param string $sessionId 呼叫标识/会议标识/短信标识/传真标识: * @param int $res 失败码/状态码 * @param string $para1 参数1 * @return 无返回值 */ function NotifyStatus($eventId, $sessionId, $res, $para1) { $filename = "notify.txt"; $data = "eventId:".$eventId." sessionId=".$sessionId." res=".$res." para1=".$para1."\r\n"; file_put_contents($filename, $data, FILE_APPEND); } //主程序开始 //初始化WebService服务 $server = new SoapServer(null,array('uri'=>"http://www.some.com/receive_sms.php"));//这个uri要写本php文件所在的uri //注册三个函数 $server->addFunction(array("echoOfSendSMS","recvSMS","NotifyStatus")); //启动soap server $server->handle();
プログラムのコメントは非常に明確で、3 つの関数を定義し、
プログラムでテキストメッセージを受信したら、それを保存するだけです。
recvSMS() 関数を変更して、データベースへの書き込み、テキスト メッセージへの返信など、必要な機能を追加できます。
テキスト メッセージの送信プロセスを簡略化するために、ユーザーは Kuanle Communication
を持っている限り、Kuanle 通信インターフェイスを知る必要はありません。アカウントとパスワードがあれば、テキスト メッセージを送信するために必要なのは、たとえば次の 3 つの文だけです:
$sms = new Sms(); //产生一个Sms类的对象 if ($sms->login($account, $password)) //登录 $sms->send("139876XXXXX", "hello,sms"); //发短信
それはとても簡単です。
Sms クラス class.Sms.php