語音識別接口的基本介紹
?
?
?
注意:
由于客戶端緩存,開發者開啟或者關閉語音識別功能,對新關注者立即生效,對已關注用戶需要24小時生效,開發者可以從新關注帳號進行測試。
?
我們可以在測試號下方的體驗接口權限表里面找到“接收語音識別結果”,如下圖所示
?
?
現在這里是顯示的關閉,就是開啟,如果想使用,那么就必“關閉”。
點擊一下開啟后,他就會問你是否關閉,所以這里的意思是相反的,如圖所示:
?
然后再點擊一下確定即可關閉。
?
不過我們現在要對他進行開發所以這里就要顯示關閉這兩個字,然后點擊“接收語音識別結果”即可進入手冊詳情頁,如下圖所示:
?
?
?
?
我們先來個簡單的,index.php代碼如下所示:
?
<?php /*** wechat php test*///define your token require_once "common.php"; //這里是引入curl發送函數的類 require_once 'WeChat.class.php'; define("TOKEN", "twgdh");//這里讓這個類繼承了curl發送參數的類 class wechatCallbackapiTest extends WeChat {public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($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 dataif (!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 */// 使用simplexml技術對xml進行解析 // libxml_disable_entity_loader(true), 是從安全性考慮,為了防止xml外部注入,//只對xml內部實體內容進行解析libxml_disable_entity_loader(true);//加載 postStr 字符串$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();global $tmp_arr;//根據接收到的消息類型,來進行分支處理(switch)switch($postObj->MsgType){case 'event':if($postObj->Event == 'subscribe'){$contentStr = "歡迎關注leigood微信測試號噢";$resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr);echo $resultStr; }//響應用戶的點擊事件if($postObj->Event == 'CLICK'){if($postObj->EventKey == 'V1001_TODAY_MUSIC'){ //自定義菜單里面有很多個,這里key是自定義的//這里主要寫自己想要的業務邏輯$contentStr = "奪命雷公狗歡迎您來到編程世界";$resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr);echo $resultStr; }}break;case 'text': //回復文本模塊//這里開始測試客服消息接口了if($keyword == '文本'){//獲取tokenrequire 'get_token.php';$contentStr = '這是客服接口的回復,我們可以幫助您什么?';//對發送的內容進行urlencode編碼,防止中文亂碼$contentStr = urlencode($contentStr);//到時候我們我發送的內容我們放到一個數組里面去了$content_arr = array('content'=>"{$contentStr}");//這里的意思是將來我要發送消息給這個用戶$reply_arr = array('touser'=>"{$fromUsername}",'msgtype'=>'text','text'=>$content_arr);//下一步就是將編碼轉成規定的json格式$post = json_encode($reply_arr);//url解碼,如果不解碼他將會發來一段二進制代碼$post = urldecode($post);$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}";//這里我們來使用類的繼承機制,來簡化代碼$this -> http_request($url,$post);//這里是可以回復多條消息的,只需要在執行下這個函數即可//$this -> http_request($url,$post); }else{$contentStr = '您輸入的格式有誤';$resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr);echo $resultStr;}break;case 'voice';//取出用戶說的內容$recognition = $postObj->Recognition;$contentStr = "您剛才說的是:".$recognition;$resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr);echo $resultStr;break;}}else {echo "";exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!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 rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}} }//如果這段代碼放在上面,那程序將會報錯,因為繼承的問題,會顯示類沒有找到 $wechatObj = new wechatCallbackapiTest(); //當接入成功后,請注銷這句話,否則,會反復驗證。 //$wechatObj->valid(); //添加響應請求的語句 $wechatObj->responseMsg();?>
?
核心代碼如下:
?
?
然后您給公眾號發送語音,他即可按文字形式對您進行返回。
?
?
溫馨提示:每次他以文字返回的時候她會在后面加多一個“!”號