微信公众号开发之语音消息识别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与SQL注入攻击[三]
Apr 17 PHP
PHP 可阅读随机字符串代码
May 26 PHP
sql注入与转义的php函数代码
Jun 17 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php如何实现只替换一次或N次
Oct 29 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
php 中的信号处理操作实例详解
Mar 04 PHP
PHP 实现缩略图
Mar 09 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
js 设置选中行的样式的实现代码
2010/05/24 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
js微信支付实现代码
2016/12/22 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
python 文件与目录操作
2008/12/24 Python
python字典多条件排序方法实例
2014/06/30 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
如何利用python 读取配置文件
2021/01/06 Python
入党申请人的自我鉴定
2013/12/01 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2014年售票员工作总结
2014/11/19 职场文书
Python OpenCV形态学运算示例详解
2022/04/07 Python