微信公众号开发之语音消息识别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 parse_url 一个好用的函数
Oct 03 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
php&amp;mysql 日期操作小记
Feb 27 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
Smarty环境配置与使用入门教程
May 11 PHP
Yii核心验证器api详解
Nov 23 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
php文件包含的几种方式总结
Sep 19 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 动态多文件上传
2009/01/18 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
destoon数据库表说明汇总
2014/07/15 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
AngularJS教程之环境设置
2016/08/16 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python计算一个文件里字数的方法
2015/06/15 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
python3中sys.argv的实例用法
2020/04/24 Python
Python如何进行时间处理
2020/08/06 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
教师个人读书活动总结
2014/07/08 职场文书
车贷收入证明范本
2014/09/14 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers