微信公众号开发之语音消息识别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模板之Phpbean的目录结构
Jan 10 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
浅谈php扩展imagick
Jun 02 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 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输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP 正则表达式小结
2015/02/12 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
javascript编写简易计算器
2017/05/06 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python生成随机MAC地址
2015/03/10 Python
python多线程方式执行多个bat代码
2016/06/07 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python接口测试get请求过程详解
2020/02/28 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
外科实习自我鉴定
2013/10/06 职场文书
高中生物教学反思
2014/02/05 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
使用CSS实现音波加载效果
2023/05/07 HTML / CSS