WeChat の開発は最近非常に人気があります。この記事では主に、PH が WeChat を使用してリモート コントロール サーバー機能を実装する方法の例を紹介します。ただし、プレーンテキストでの通信には問題ありません。
WeChat 公開アカウントの原則について簡単に説明しましょう。私の理解が不十分な点があるかもしれませんが、批判やアドバイスを歓迎します。
クライアントはWeChatプラットフォームにリクエストを送信し、WeChatプラットフォームはリクエストをプライベートサーバーに転送して処理を行い、プライベートサーバーの処理結果を取得してクライアントにフィードバックします。 。
もちろん、これには「WeChatパブリックプラットフォーム」が中心的な役割を果たします。それは才能ある人や見知らぬ人がそれぞれの持ち味を発揮できる舞台、プラットフォームを提供することに相当します。実はこれはWeChatだけでなくアリババにも当てはまり、大手電子商取引企業が腕を振るうことができる。
オープン設定
最初のステップは、WeChat 開発者アカウントを申請することです。個人の場合は、サブスクリプション アカウントを選択するだけで十分です。関連情報はオンライン上にたくさんあり、非常に詳細なので、詳細は説明しません。早速本題に入りましょう。
まず、開発者アカウントに正常にログインした後、以下に示すようにサーバー側の設定を開きます
アクティベーションが完了したら、サーバーの状況に応じて設定できます。
URLはプライベートサーバーがリクエストデータを処理するために使用するアドレスです
TOKENはトークンです、お好みに設定してください。ただし、後で独自のコードで使用することを忘れないでください。
鍵に関しては、特に用途がないので、今のところは放っておいても大丈夫です。
必要に応じて設定します
設定後、有効化できます。これは、家の中のすべての配線を装飾して、それを使用してスイッチを押したいと思うようなものです。以下の通り
サーバー設定を有効にする
サーバー環境
サーバーについては公式サイトで詳しく説明されています。
https://mp.weixin.qq.com/wiki
公式デモをダウンロードしてシミュレーションすることもできます。
公式サンプル
コードも非常にシンプルです。基本的に、PHP の基本的な構文を学んだ人なら誰でも理解できます。
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <tousername></tousername> <fromusername></fromusername> <createtime>%s</createtime> <msgtype></msgtype> <content></content> <funcflag>0</funcflag> </xml>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
中心となるアイデアは、署名をチェックし、リクエストを処理し、結果をフィードバックすることに他なりません。
ここで言わなければならないのは、Tencent は実際にこれらのテンプレートを削除してブラック ボックス モードを直接公開できると考えているということです。この場合、セキュリティはより高くなるでしょう。多くの場合、アクセス許可がオープンであればあるほど、影響は悪化する可能性があります。
コアクラス
次のステップは私自身の処理ロジックです。公式ドキュメントを参照してください。 WeChat Public には 6 つの受信インターフェイスと 3 つの返信インターフェイスがあります。これは、MsgType に基づいて決定できます。
インターフェースの詳細
検証
private function checkSignature() { // you must define TOKEN by yourself if (! defined ( "TOKEN" )) { throw new Exception ( 'TOKEN is not defined!' ); } $signature = $_GET ["signature"]; $timestamp = $_GET ["timestamp"]; $nonce = $_GET ["nonce"]; $token = TOKEN; $tmpArr = array ( $token, $timestamp, $nonce ); // use SORT_STRING rule sort ( $tmpArr, SORT_STRING ); $tmpStr = implode ( $tmpArr ); $tmpStr = sha1 ( $tmpStr ); if ($tmpStr == $signature) { return true; } else { return false; } }
検証メソッドの中核は、前の Web ページで設定した TOKEN に基づいて動作するため、コード内で使用されます。
返信
返信コードは、クライアントから送信されたデータの種類に応じて異なる方法で処理する必要があります。WeChat プラットフォームはデータをパッケージ化してカプセル化して処理します。
拡張
拡張部分は私の気まぐれに基づいて追加されました。
ロボットを追加します
このスキルを使用すると、ユーザーは優れたユーザー エクスペリエンスを得ることができ、また一般のユーザーにも満足してもらうことができます。
ここでは 2 つのインターフェイスをテストしました。1 つはcurl モードで、もう 1 つは file_get_contents モードです。どちらも非常に使いやすいです。
<?php /** * 图灵 机器人接口 * * 使用curl来进行浏览器模拟并抓取数据 */ function turing($requestStr) { // 图灵机器人接口 $url = "http://www.tuling123.com/openapi/api"; // 用于POST请求的数据 $data = array( 'key'=>"哈哈,这个key还是得你自己去申请的啦", 'info'=>$requestStr, ); // 构造curl下载器 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $responseStr = curl_exec($ch); curl_close($ch); return $responseStr; } /** * 调用另外的接口 * @param unknown $req * @return mixed */ function test($req){ $url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=".$req; $result = file_get_contents($url); $result = json_decode($result, true); return $result['content']; } $req = 'hello'; $res = test($req); echo $res;
コマンドモード
コンピューターに対する携帯電話の大きな利点は、いつでもどこでもコンピューターを持ち運べるわけではありませんが、代わりに携帯電話を使用できることです。多くの場合、サーバーの管理に必要なコマンドは非常に単純ですが、リモートでログインするのは不便です。現時点では、WeChat を使用して情報を広めるのも良いでしょう。
私は普段、Python を使ってローカル IP の取得、チャット、メモリ、ネットワーク速度のチェックなどのスクリプトを書くのが好きです。Python にはすべてが備わっていると言えます。今回、ついに登場です。 WeChat のキーワード マッチングを使用すると、WeChat 公開アカウントを簡単なメッセンジャーとして機能させることができます。
具体的な実装は比較的単純で、テキストとして扱うだけです。
完全なコード
私のサーバー上の完全なコードを以下に掲載します。いくつかのプライベートな部分を変更しました。独自の状況に応じて変更できます。
えーまとめ
最後に、この実験でどのような知識ポイントが使用されたかを確認しましょう。
PHP のオブジェクト指向プログラミングは実装が簡単です。
インターフェース処理の 2 つの方法
WeChat パブリック アカウント バックエンド プライベート サーバーへのアクセス、処理、およびフィードバック。
フロントエンドとバックエンド間の対話とチャットボットのアプリケーション。
実は、これらのコードは私の当初のアイデアとはかなり異なります。元々は、夜寝る前にWeChatを使用して「電気毛布をつけて」というコマンドを送信する「リモコン」を実装したいと思っていました。 30分後、テレビを見た後、ベッドに行くとベッドがとても暖かいことがわかりました。 はい、いくつかのハードウェアを追加する限り、これは冷蔵庫で簡単に実現できます。そしてそれは「スマートホーム」だと思います。
関連する推奨事項:
WeChat 記録の永続ストレージへの一時的な変換のサンプル共有の PHP 実装
WeChat、Weibo、QQ、Huo の js アプリのサンプル共有
以上がWeChatを利用した遠隔操作サーバー機能のPHP実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。