微信公众号开发之语音消息识别php代码


Posted in PHP onAugust 08, 2016

本文实例为大家分享了php微信语音消息识别代码,供大家参考,具体内容如下

1.开通语音识别(默认关闭)

微信公众号开发之语音消息识别php代码

2.语音识别

请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recognition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:

微信公众号开发之语音消息识别php代码

微信公众号开发之语音消息识别php代码

<?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;
  }
 }
}


?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP.MVC的模板标签系统(四)
Sep 05 PHP
用在PHP里的JS打印函数
Oct 09 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
php与paypal整合方法
Nov 28 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
小谈php正则提取图片地址
Mar 27 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
php中的依赖注入实例详解
Aug 14 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 #PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 #PHP
Thinkphp微信公众号支付接口
Aug 04 #PHP
浅析Laravel5中队列的配置及使用
Aug 04 #PHP
PHP中如何判断exec函数执行成功?
Aug 04 #PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 #PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 #PHP
You might like
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
windows下python连接oracle数据库
2017/06/07 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
python redis 删除key脚本的实例
2019/02/19 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
慰问敬老院活动总结
2014/04/26 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
安全伴我行主题班会
2015/08/13 职场文书
班主任寄语2016
2015/12/04 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python如何把不同类型数据的json序列化
2021/04/30 Python