微信公众号开发之语音消息识别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往windows中添加用户
Dec 06 PHP
php str_pad 函数用法简介
Jul 11 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
Admin generator, filters and I18n
Oct 06 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 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实现递归循环每一个目录
2010/08/08 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
利用Python开发微信支付的注意事项
2016/08/19 Python
Python实现读取并保存文件的类
2017/05/11 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
运动会解说词100字
2014/01/31 职场文书
打架检讨书300字
2014/02/02 职场文书
高三复习计划
2015/01/19 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书