2.语音识别
请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recognition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:
<?php/** * wechat php test *///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();//$wechatObj->valid();//接口验证$wechatObj->responseMsg();//调用回复消息方法class wechatCallbackapiTest{ 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 */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 = $postObj->MsgType;//消息类型$event = $postObj->Event;//时间类型,subscribe(订阅)、unsubscribe(取消订阅)$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>";switch($msgType){ case "event": if($event=="subscribe"){$contentStr = "Hi,欢迎关注海仙日用百货!"." "."回复数字"1",了解店铺地址."." "."回复数字"2",了解商品种类."; }break; case "text"://文本消息switch($keyword){ case "1": $contentStr = "店铺地址:"." "."杭州市江干区.";break; case "2": $contentStr = "商品种类:"." "."杯子、碗、棉签、水桶、垃圾桶、洗碗巾(刷)、拖把、扫把、" ."衣架、粘钩、牙签、垃圾袋、保鲜袋(膜)、剪刀、水果刀、饭盒等."; break; default: $contentStr = "对不起,你的内容我会稍后回复";} break; case "voice"://语音消息 //语音识别 $recognition = $postObj->Recognition; $format = $postObj->Format; $contentStr = "你发送的是语音消息"." "."语音格式为:"." ".$format." "."语音内容为:"." ".$recognition; break;}$msgType = "text";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}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;} }}?>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。