微信公众号开发之语音消息识别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使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
php获取新浪微博数据API实例
Nov 12 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
php中socket的用法详解
Oct 24 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
php中stdClass的用法分析
Feb 27 PHP
PHP时间和日期函数详解
May 08 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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/26 PHP
PHP $_FILES函数详解
2011/03/09 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
React diff算法的实现示例
2018/04/20 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
一年级班主任寄语
2014/01/19 职场文书
委托书范文
2014/04/02 职场文书
网站客服岗位职责
2014/04/05 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
2015年班组长工作总结
2015/04/10 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
公司2015年终工作总结
2015/05/26 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
CSS基础详解
2021/10/16 HTML / CSS
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫