微信公众号开发之语音消息识别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面向对象的方法重载两种版本比较
Sep 08 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
PHP学习笔记之数组篇
Jun 28 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
php mysql 封装类实例代码
Sep 18 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 PHP
laravel通用化的CURD的实现
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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
php写的AES加密解密类分享
2014/06/20 PHP
JavaScript代码复用模式实例分析
2012/12/02 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
python生成IP段的方法
2015/07/07 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python使用matplotlib绘制热图
2018/11/07 Python
python每天定时运行某程序代码
2019/08/16 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
Python中如何引入第三方模块
2020/05/27 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
学习交流会主持词
2014/04/01 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python