微信公众号开发之语音消息识别php代码
2018-09-07 21:44
本文实例为大家分享了php微信语音消息识别代码,供大家参考,具体内容如下
1.开通语音识别(默认关闭)
2.语音识别
请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recognition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:
<?php /** * wechat php test */ //define your token define(TOKEN, weixin); $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() { //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(); $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,欢迎关注海仙日用百货!.\n.回复数字1,了解店铺地址..\n.回复数字2,了解商品种类.; } break; case text://文本消息 switch($keyword){ case 1: $contentStr = 店铺地址:.\n.杭州市江干区.; break; case 2: $contentStr = 商品种类:.\n.杯子、碗、棉签、水桶、垃圾桶、洗碗巾(刷)、拖把、扫把、 .衣架、粘钩、牙签、垃圾袋、保鲜袋(膜)、剪刀、水果刀、饭盒等.; break; default: $contentStr = 对不起,你的内容我会稍后回复; } break; case voice://语音消息 //语音识别 $recognition = $postObj->Recognition; $format = $postObj->Format; $contentStr = 你发送的是语音消息.\n.语音格式为:.\n.$format.\n.语音内容为:.\n.$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 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; } } } ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。