亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP開發之用微信遠程遙控服務器的相關講解

2020-03-22 18:14:03
字體:
來源:轉載
供稿:網友
微信公眾好的開發很火,小程序更火。小編給大家分享一個PHP開發之用微信遠程遙控服務器的實例代碼,需要的朋友參考下

摘要

微信公眾好的開發很火,小程序更火。于是也湊個熱鬧,嘗試了一把。

大致的功能還是有的,不過是不全,很多地方我沒有進行處理。不過對于純文本方式的交流,已經沒有問題啦。

命令


音樂

環境搭建

下面大致的講講微信公眾號的原理吧??赡芪依斫獾挠行┎坏轿?,如果有些許不當,歡迎批評指教。

客戶端發送給微信平臺請求,微信平臺將請求轉發給私服,交給程序處理之后,獲取到私服的處理結果,然后反饋給客戶端。

當然,這其中起到核心作用的自然是“微信公眾平臺”啦。相當于提供了一個舞臺,一個能讓各位能人異士展現出各自的特色的平臺。其實,不僅微信如此,阿里同樣是這樣,如此各大電商才能一展手腳不是。

開啟配置

這第一步,就是先申請一個微信開發者賬號,個人的話選擇訂閱號就足夠了。網上相關的資料很多,也很詳細,我就不多說了。咱們直奔主題好了。

首先登陸開發者賬號成功后,開啟服務器端的設置即可,如下圖

開啟配置

開啟完成,根據自己服務器的情況進行一下設置即可。

URL就是你的私服用于處理請求數據的地址

TOKEN就是一個令牌,隨便設置。不過記住待會自己的代碼上會用到。

至于密鑰嘛,沒什么較大的作用,暫且可以先不用管。

按需設置

按需設置

設置完,就可以啟用了。這就好比家里的電線全部裝修好了,現在要使用,按下開關一樣。如下圖

啟用服務器配置

啟用服務器配置

服務器環境

關于服務器這塊,網址上講解的也是很詳細的啦。

http://mp.weixin.qq.com/wiki

我們還可以下載官方的demo來模擬。

官方樣本

官方樣本

代碼也很簡單?;旧蠈W過了PHP基本語法的都能夠看得懂。

 ?php * wechat php test//define your tokendefine( TOKEN , weixin $wechatObj = new wechatCallbackapiTest();$wechatObj- valid();html' target='_blank'>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 ![CDATA[%s]] /ToUserName  FromUserName ![CDATA[%s]] /FromUserName  CreateTime %s /CreateTime  MsgType ![CDATA[%s]] /MsgType  Content ![CDATA[%s]] /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;? 

核心思路,無非檢驗一下簽名,處理一下請求,反饋一下結果罷了。

這里我不得不想說的就是,我覺得騰訊其實可以將那些個模板什么的去掉,直接暴露出黑盒模式,這樣的話安全性會更高一點。很多時候,權限放的越開,效果可能越差。

核心類

接下來就是我自己的處理邏輯了,參照官方文檔。微信公眾好上有6大接收接口,三大回復接口。依據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; }

驗證方法核心就是依據咱們之前網頁上設置的TOKEN來工作的,所以代碼上會用得到。

回復

回復的代碼需要依據客戶端發送的數據的類型來區分對待,類型這塊微信平臺會將數據打包好封裝起來,我們住需要調用內部的MsgType進行處理即可。

拓展

拓展部分,是我自己異想天開往上加的。

添加機器人

調用一個機器人接口,來代替自己發送回復,技能讓用戶得到一個良好的用戶體驗,還能愉悅大眾,何樂而不為?

我這邊測試了兩個接口,一個是curl模式,一個是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 mixedfunction 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;

命令模式

手機相對于電腦一個很大的優點就是便攜,我們雖然不能隨時隨地攜帶電腦,但是卻能使用手機來代替。很多時候對服務器的管理需要的命令很簡單,但是遠程登錄的時候也不方便。這個時候就用微信來幫忙傳話也是不錯的啦。

我平時喜歡使用Python寫一些腳本,什么獲取本地IP,聊天,查看內存,網速啥的,可謂是應有盡有。這下也終于能有用武之地了。利用微信的關鍵字匹配,就可以簡單的讓微信公眾號當一個小小傳話員啦。

這里給個思路,具體實現起來也比較簡單,當做是文本來處理即可。

完整代碼

下面貼出我服務器上的完整代碼,有些私密的地方我做了些更改,屆時按照自己的情況進行修改即可。

 ?php * wechat php test// define your tokendefine ( TOKEN , 您的TOKEN );$wechatObj = new wechatCallbackapiTest ();// $wechatObj- valid();// 調用回復信息方法$wechatObj- responseMsg ();// 微信消息處理核心類class wechatCallbackapiTest { public function valid() { $echoStr = $_GET [ echostr  // valid signature , option if ($this- checkSignature ()) { echo $echoStr; exit (); } else { echo 驗證失??!  public function responseMsg() { // get post data, May be due to the different environments // 類似$_POST但是可以接受XML數據,屬于增強型 $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 // 不解析外部數據,防止xxml漏洞 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 (); * 微信客戶端發送信息的時候會附帶一些參數,詳見官方文檔。所以要根據不同的類型,來分別做相關的處理。 * 于是MsgType 就充當這樣的一個區分的標記 $msgType = $postObj- MsgType; * 當有用戶關注后者退訂的時候,會觸發相應的事件。所以再來個event事件的監聽更為友好。 * $event = $postObj- Event. * 具體的參數信息,網址上很詳細。 $event = $postObj- Event; switch ($msgType) { // 文本消息 處理部分 case text : if (! empty ( $keyword )) { // 在此處進行對關鍵字的匹配就可以實現:針對不同關鍵字組裝的相應數據 if($keyword== 音樂 || $keyword == music ) { $msgType = music  $musictitle = The Mountain  $musicdescription = 夏日舒心清涼歌曲  $musicurl = http://101.200.58.242/wx/themaintain.mp3  $hqmusicurl = http://101.200.58.242/wx/themaintain.mp3  musicMessageHandle($fromUsername, $toUsername, $time, $msgType, $musictitle, $musicdescription, $musicurl, $hqmusicurl); }elseif($keyword == 1 ){ $msgType = text  $contentStr = 人生得意須盡歡,莫使金樽空對月!  textMessageHandle($fromUsername, $toUsername, $time, $msgType, $contentStr); }elseif($keyword == 命令模式 ){ $msgType = text  $contentStr = 進入命令模式,開始對服務器進行管理!/n接下來將依據您輸入的命令對服務器進行管理!  textMessageHandle($fromUsername, $toUsername, $time, $msgType, $contentStr); }else { // 直接調用 機器人接口,與用戶進行交流 $msgType = text  $contentStr = turing($keyword)!= ?turing($keyword): 這里是微信 純文本測試數據!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 您得輸入點數據,我才能回復不是!  break; // 接收圖片信息 case image : if (! empty ( $keyword )) {// $msgType = image  $contentStr = 您發送的圖片看起來還真不錯!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 服務器沒能收到您發送的圖片!  break; // 接收語音信息 case voice : if (! empty ( $keyword )) {// $msgType = voice  $contentStr = 您發送的語音聽起來還真不錯!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 服務器沒能收到您發送的語音!  break; // 接收視頻信息 case video : if (! empty ( $keyword )) {// $msgType = video  $contentStr = 您發送的視頻看起來還真不錯!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 服務器沒能收到您發送的視頻!  break; // 接收視頻信息 case shortvideo : if (! empty ( $keyword )) {// $msgType = shortvideo  $contentStr = 您發送的小視頻看起來還真不錯!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 服務器沒能收到您發送的小視頻!  break; // 接收位置信息 case location : if (! empty ( $keyword )) {// $msgType = location  $contentStr = 您發送的位置已被接收!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 服務器沒能收到您發送的位置!  break; // 接收視頻信息 case link : if (! empty ( $keyword )) {// $msgType = link  $contentStr = 您發送的鏈接看起來還真不錯!  textMessageHandle ( $fromUsername, $toUsername, $time, $msgType, $contentStr ); } else { echo 服務器沒能收到您發送的鏈接!  break; // 對事件進行偵聽 case event : switch ($event) { case subscribe : // 發送一些消息! $msgType = text  $contentStr = 終于等到你!  textMessageHandle($fromUsername, $toUsername, $time, $msgType, $contentStr); break; break; default : break; } 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; * 定義為心中想難關的六個接口的數據發送格式模板function textMessageHandle($fromUsername, $toUsername, $time, $msgType, $contentStr) { $textTpl = xml  ToUserName ![CDATA[%s]] /ToUserName  FromUserName ![CDATA[%s]] /FromUserName  CreateTime %s /CreateTime  MsgType ![CDATA[%s]] /MsgType  Content ![CDATA[%s]] /Content  FuncFlag 0 /FuncFlag  /xml  $resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr ); echo $resultStr;function imageMessageHandle($fromUsername, $toUsername, $time, $msgType, $contentStr) { $imageTpl = xml  ToUserName ![CDATA[%s]] /ToUserName  FromUserName ![CDATA[%s]] /FromUserName  CreateTime %s /CreateTime  MsgType ![CDATA[%s]] /MsgType  Content ![CDATA[%s]] /Content  PicUrl ![CDATA[this is a url]] /PicUrl  MediaId ![CDATA[media_id]] /MediaId  MsgId 1234567890123456 /MsgId  /xml  $resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr ); echo $resultStr;function musicMessageHandle($fromUsername, $toUsername, $time, $msgType, $musictitle, $musicDescription, $musicurl, $hqmusicurl) { $musicTpl = xml  ToUserName ![CDATA[%s]] /ToUserName  FromUserName ![CDATA[%s]] /FromUserName  CreateTime %s /CreateTime  MsgType ![CDATA[%s]] /MsgType  Music  Title ![CDATA[%s]] /Title  Description ![CDATA[%s]] /Description  MusicUrl ![CDATA[%s]] /MusicUrl  HQMusicUrl ![CDATA[%s]] /HQMusicUrl  /Music  /xml  $resultStr = sprintf($musicTpl, $fromUsername, $toUsername, $time, $msgType, $musictitle, $musicDescription, $musicurl, $hqmusicurl); echo $resultStr; * 圖靈 機器人接口 * 使用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); $requestStr = curl_exec($ch); curl_close($ch); return responseStr; */ $url = http://api.qingyunke.com/api.php?key=free appid=0 msg= .$requestStr; $result = file_get_contents($url); $result = json_decode($result, true); return $result[ content ? 

總結

最后來回顧一下,本次試驗用到了哪些知識點。

PHP的面向對象方法編程簡單實現。

接口處理的兩種方式

微信公眾號后臺私服的接入,處理,反饋。

前后端的交互,以及聊天機器人的應用。

其實,這些代碼跟我一開始的設想還是差別挺大的,原本是想實現一個“遙控器”,晚上想睡覺之前,用微信發一條命令“打開電熱毯”,半個小時后,電視看完了,去睡覺的時候發現被窩很暖和,是的,只要加上點硬件,這很容易實現啦再者冰箱了,電視了統統可以完成,那樣估計就診的是“智能家居”了吧。

您可能感興趣的文章:

CI框架(CodeIgniter)操作redis的方法的詳解

php使用imagecopymerge()函數創建半透明水印的詳解

一個中高級PHP工程師所應該具備的能力

以上就是PHP開發之用微信遠程遙控服務器的相關講解的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产自产女人91一区在线观看| 国产午夜精品视频| 中文字幕欧美日韩在线| 亚洲精品国产精品乱码不99按摩| 亚洲欧美精品伊人久久| 国产日韩在线视频| 超碰97人人做人人爱少妇| 91精品国产91久久久久| 日本久久久a级免费| 亚洲精品久久在线| 日韩av免费观影| 欧美激情综合亚洲一二区| 日韩中文在线中文网三级| 欧美老少做受xxxx高潮| 日韩一区二区久久久| 亚洲伊人久久综合| …久久精品99久久香蕉国产| 欧洲日本亚洲国产区| 欧美综合国产精品久久丁香| 亚洲高清色综合| 国产一区二区三区直播精品电影| 久久久久久久久电影| 欧美一区二三区| 欧美性xxxx极品hd满灌| 欧洲永久精品大片ww免费漫画| 国产又爽又黄的激情精品视频| 日本老师69xxx| 中文字幕在线精品| 精品国产老师黑色丝袜高跟鞋| 亚洲成人aaa| 日本亚洲欧美三级| 亚洲天堂影视av| 黑人巨大精品欧美一区二区一视频| 欧美激情欧美激情在线五月| 国产精品在线看| 91精品国产777在线观看| 性欧美亚洲xxxx乳在线观看| 亚洲性无码av在线| 在线精品国产成人综合| 国产91色在线播放| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲iv一区二区三区| 91视频国产一区| 欧美激情第一页xxx| 久久久在线观看| 一区二区三区视频观看| 久久久视频在线| 91视频88av| 日韩美女视频在线观看| 国产日韩欧美综合| 日韩av电影手机在线观看| 久久久久久成人精品| 欧美精品在线观看| 国产精品久久久久91| 日本久久亚洲电影| 成人欧美在线视频| 国产精品久久不能| 国产中文日韩欧美| 欧美午夜精品久久久久久久| 久久久久久午夜| 欧美日韩国产在线播放| 成人福利视频在线观看| 日韩美女中文字幕| www.欧美精品一二三区| 亚洲国产精品大全| 久久久久久久久久婷婷| 日韩欧美在线中文字幕| 欧美成人精品三级在线观看| 日韩成人性视频| 伊人久久综合97精品| 久久福利视频网| 孩xxxx性bbbb欧美| 亚洲深夜福利视频| 国产一区二区香蕉| 国模私拍一区二区三区| 欧美精品在线视频观看| 欧美日韩国产色| 韩国三级电影久久久久久| 大桥未久av一区二区三区| 九九热精品视频在线播放| 欧美日本在线视频中文字字幕| 国产亚洲欧美视频| 国产精品自产拍在线观看中文| 欧美在线观看视频| 久久久精品视频在线观看| 日韩经典第一页| 精品无人区太爽高潮在线播放| 日韩中文字幕国产| 欧美激情中文字幕在线| 欧美成人一区二区三区电影| 久久躁狠狠躁夜夜爽| 精品美女永久免费视频| 亚洲一区二区三区sesese| 国产精品久久综合av爱欲tv| 亚洲成人教育av| 久久成人国产精品| 97视频在线观看播放| 中文字幕精品影院| 国产精品综合不卡av| 亚洲精品综合久久中文字幕| 91久久国产综合久久91精品网站| 啊v视频在线一区二区三区| 精品一区二区电影| 68精品国产免费久久久久久婷婷| 欧美极品在线播放| 中文字幕在线日韩| 中文字幕亚洲在线| 中文字幕av日韩| 亚洲视频在线播放| 色婷婷亚洲mv天堂mv在影片| 亚洲高清色综合| 麻豆精品精华液| 97国产一区二区精品久久呦| 亚洲精品第一国产综合精品| 国产69精品久久久久9| 精品国产自在精品国产浪潮| 亚洲视频电影图片偷拍一区| 日韩免费观看网站| 久久精品国产一区二区电影| 日韩欧美综合在线视频| 国产精品久久久久91| 成人精品视频99在线观看免费| 欧美性色xo影院| 亚洲精品资源美女情侣酒店| 奇门遁甲1982国语版免费观看高清| 不卡av日日日| 欧美精品激情在线观看| 色婷婷成人综合| 一本色道久久88综合日韩精品| 亚洲欧美中文在线视频| 社区色欧美激情 | 日韩精品在线视频观看| 亚洲精品动漫100p| 欧美精品久久久久久久免费观看| 亚洲人成电影网站色xx| 国产在线a不卡| 91精品国产高清| 91社区国产高清| 九九热r在线视频精品| 国产精品福利网| 国产精品成人国产乱一区| 91sa在线看| 国产69精品99久久久久久宅男| 亚洲欧美制服第一页| 国产精品一二三在线| 91免费欧美精品| 亚洲日本欧美日韩高观看| 日韩美女视频免费看| 永久免费精品影视网站| 疯狂做受xxxx欧美肥白少妇| 在线日韩中文字幕| 在线不卡国产精品| 亚洲成人网久久久| 欧美午夜激情视频| 九九九热精品免费视频观看网站| 国产精品久久久久久久久男| 91产国在线观看动作片喷水| 久久国产精品首页| 高潮白浆女日韩av免费看| 欧美做爰性生交视频| 欧美性高跟鞋xxxxhd| 一个人看的www欧美| 成人激情春色网| 日韩在线视频播放|