最近在作一個微信項目,接觸到了微信公衆平臺。經過公衆平臺能夠很方便的搭建一個功能完善的移動應用。昨天發現:開發者可以使用手機號來申請接口測試賬號,體驗高級接口。php
這篇文章的應用將使用到高級接口中的語音識別,以及音樂回覆接口。經過這兩個接口,讓你們體驗一下語音點歌的魅力。api
這個應用簡單的來講:就是你向微信公衆平臺報一首歌名,微信公衆平臺返回這首歌曲給你聽。本文將一步一步教你如何實現這個看似複雜的移動應用。服務器
下面是我申請的測試帳號的二維碼,你們能夠關注一下測試一下效果,不過測試帳號的有效期只有一年,最多隻能有20個關注者。微信
另一個是我我的的訂閱號,有更多的功能,沒有人數限制,可是不能識別語音。說了這麼多,不如本身動動手吧。微信公衆平臺
首先申請測試帳號和百度的bae雲平臺:curl
微信公衆平臺測試帳號具體見:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/loginpost
百度bae見:http://developer.baidu.com/bae/測試
相關配置:this
申請完成以後,進行相關的配置:編碼
一、在bae上建立應用並申請域名
二、下載公衆平臺的php演示代碼,並上傳到bae上
三、調整php代碼,並配置接口
而後準備一下音樂的api:
在網上找到了百度的一個私有的音樂api。具體見:
http://blog.csdn.net/leixiaohua1020/article/details/12927707
接着開始編碼:
一、咱們先了解一下用到的微信語音識別接口
咱們將語音發送給微信服務器,微信服務器會將語音轉換成文字。咱們拿到文字以後調用音樂api獲取音樂,而後經過微信的被動回覆中的回覆音樂消息將音樂返回給客戶端。
代碼以下:(此代碼能夠直接上傳到你的百度bae平臺,只須要修改token就能夠了)
<?php define("TOKEN", "yourtoken"); $wechatObj = new wechatCallbackapiTest(); // $wechatObj->valid(); $wechatObj->responseMsg(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //獲取post數據 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //解析post數據 if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $type= $postObj->MsgType; switch($type) { case "voice"; $resultStr= $this->getMusicContent($postObj); echo $resultStr; exit; break; } } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function getMusicContent($postObj) { $ret= "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> <FuncFlag><![CDATA[1]]></FuncFlag> </Music> </xml>"; $recognition=$postObj->Recognition; $keywordc= urlencode($recognition); $musicapi = "http://box.zhangmen.baidu.com/x?op=12&count=1&title={$keywordc}\$\$"; $simstr=file_get_contents($musicapi); $musicobj=simplexml_load_string($simstr); $i=0; $musicurl; foreach($musicobj->url as $itemobj) { $encode = $itemobj->encode; //處理decode ,發現微信在處理音樂的時候有個問題,因此這裏刪除一個參數 $decode = $itemobj->decode; $removedecode = end(explode('&', $decode)); if($removedecode<>"") { $removedecode="&".$removedecode; } $decode = str_replace($removedecode,"", $decode); $musicurl= str_replace(end(explode('/', $encode)) ,$decode,$encode); break; } $resultStr = sprintf($ret, $postObj->FromUserName, $postObj->ToUserName,time(), $recognition,$musicurl,$musicurl); return $resultStr; } } ?>
總結:微信的語音識別很是的強大,個人普通話,不算標準,可是每次都能識別出來,另外百度音樂api的音樂應有盡有。
從上面描述能夠看到,我只是簡單的配置和寫了幾句簡單的php代碼,就實現了一個複雜的語音點歌系統。
體驗:
另外,歡迎你們關注一下個人我的訂閱號: