php版微信开发之接收消息,自动判断及回复相应消息的方法


Posted in PHP onSeptember 23, 2016

本文实例讲述了php版微信开发之接收消息,自动判断及回复相应消息的方法。分享给大家供大家参考,具体如下:

微信的api现在己经强大到可以随意调用我们网站或指定数据库的内容进行自能回复现推送消息了,这里就来给大家介绍一个微信开发的笔记.

发送1,2,3,7测试相应的消息,菜单模式需要升级为服务号,或者订阅人数超过500以上.

1. 用户发送的消息都是通过你提交的开发者URL来接收,这里订阅号就可以搞定,发送过来的都是xml格式数据,需要解析,代码如下:

$data = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!emptyempty($data)) {//接收消息并处理
$xml = (array)simplexml_load_string($data, ‘SimpleXMLElement', LIBXML_NOCDATA);
return $xml;
}

回复也是需要返回XML的数据格式.

2. 主动发送给用户消息,查询用户信息,创建自定义菜单(现在订阅号也可以用),以及一些高级功能,都是需要获取appid 和 AppSecret 以便得到 access_token.

access_token 这东西,除接收信息,每个接口都要用到,access_token 的时间为 7200毫秒过期需要重新获取.

更多请参考:http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5.

目前我已经实现了,接收消息,自动判断回复相应消息新闻,创建自定义菜单,点击自定义菜单后执行相应操作,用户列表之类,感觉目前开发模式和订阅模式没什么区别.

这里有一个测试回复的测试例子,代码如下:

<?php
/**
 * wechat php test
 */
//define your token
define("TOKEN", "你的申请上的token");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
 public function valid()
  {
    $echoStr = $_GET["echostr"];
    //valid signature , option
    if($this->checkSignature()){
     $this->responseMsg();
     exit;
    }
  }
  public function responseMsg()
  {
 //get post data, May be due to the different environments
 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    //extract post data
 if (!emptyempty($postStr)){
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $keyword = trim($postObj->Content);
        $time = time();
  $msgType = "text";
        $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>";
  if(!emptyempty( $keyword ))
        {
         $contentStr = $this->keyrep($keyword);
   if( emptyempty($contentStr) )
   {
   $contentStr ="你是故意的吧,没文化真可怕";//你是故意的吧,没文化真可怕;
   }
   //$contentStr = @iconv('UTF-8','gb2312',$keyword);
         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
         echo $resultStr;
        }else{
         $contentStr = '没文化真可怕,居然不会打字!';//$this->keyrep($keyword);
         //$contentStr = @iconv('UTF-8','gb2312',$keyword);
   $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
         echo $resultStr;
        }
    }else {
     echo "";
     exit;
    }
  }
 private function checkSignature()
 {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
 $token = TOKEN;
 $tmpArr = array($token, $timestamp, $nonce);
 sort($tmpArr);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );
 if( $tmpStr == $signature ){
  return true;
 }else{
  return false;
 }
 }
 function keyrep($key)
 {
 //return $key;
 if( $key=='嗨' || $key=='在吗' || $key=='你好' ){
  $mt = mt_rand(1,17);
  $array = array(1=>'自杀中,稍后再说...',2=>'有事找我请大叫!',3=>'我正在裸奔,已奔出服务区',4=>'我现在位置:WC; 姿势:下蹲; 脸部:抽搐; 状态:用力中。。。。',5=>'去吃饭了,如果你是帅哥,请一会联系我,如果你是美女...............就算你是美女,我也要先吃饱肚子啊',6=>'
洗澡中~谢绝旁观!!^_^0',7=>'有熊出?],我去诱捕,尽快回来。',8=>'你好,我是500,请问你是250吗?',9=>'喂!乱码啊,再发',10=>'
不是我不理你,只是时间难以抗拒!',11=>'你刚才说什么,我没看清楚,请再说一遍!',12=>'发多几次啊~~~发多几次我就回你。',13=>'此人已死,有事烧纸!',14=>'乖,不急哦…',15=>'你好.我去杀几个人,很快回来.',16=>'本人已成仙?有事请发烟?佛说有烟没火成不了正果?有火没烟成不了仙。',17=>'
你要和我说话?你真的要和我说话?你确定自己想说吗?你一定非说不可吗?那你说吧,这是自动回复,反正我看不见其实我在~就是不回你拿我怎么着?'
);
  return $array[$mt];
 }
 if( $key=='靠' || $key=='啊' || $key=='阿' )
 {
  $mt = mt_rand(1,19);
  $array = array(1=>'人之初?性本善?玩心眼?都滚蛋。',2=>'今后的路?我希望你能自己好好走下去?而我 坐车',3=>'笑话是什么?就是我现在对你说的话。',4=>'人人都说我丑?其实我只是美得不明显。',5=>'A;猪是怎么死的?B;你还没死我怎么知道',6=>'
奥巴马已经干掉和他同姓的两个人?奥特曼你要小心了。 ',7=>'有的人活着?他已经死了?有的人活着?他早该死了。',8=>'"妹妹你坐船头?哥哥我岸上走"据说很傻逼的人看到都是唱出来的。',9=>'我这辈子只有两件事不会?这也不会?那也不会。',10=>'
过了这个村?没了这个店?那是因为有分店。',11=>'我以为你只是个球?没想到?你真是个球。',12=>'你终于来啦,我找你N年了,去火星干什么了?我现在去冥王星,回头跟你说个事,别走开啊',13=>'你有权保持沉默,你所说的一切都将被作为存盘记录。你可以请代理服务器,如果请不起网络会为你分配一个。',14=>'本人正在被国际刑警组织全球范围内通缉,如果您有此人的消息,请拨打当地报警电话',15=>'洗澡中~谢绝旁观!!^_^0',16=>'嘀,这里是移动秘书, 美眉请再发一次,我就与你联系;姐姐请再发两次,我就与你联系;哥哥、弟弟就不要再发了,因为发了也不和你联系!',17=>'
其实我在~就是不回你拿我怎么着?',18=>'你刚才说什么,我没看清楚,请再说一遍!',19=>'乖,不急。。。');
  return $array[$mt];
 }
 if( $key =='请问' )
 {
  $mt = mt_rand(1,5);
  $array = array(1=>'"我脸油吗"反光??反正我不清楚',2=>'走,我请你吃饭',3=>'此人已死,有事烧纸!',4=>'喂!什么啊!乱码啊,再发',5=>'笑话是什么??就是我现在对你说的话。');
  return $array[$mt];
 }
 return "";
 }
 function keylist()
 {
 $array = array(1=>'嗨',2=>'你好',3=>'靠',4=>'在吗',5=>'请问');
 }
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php下使用无限生命期Session的方法
Mar 16 PHP
php之Memcache学习笔记
Jun 17 PHP
php代码审计比较有意思的例子
May 07 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
培养自己的php编码规范
Sep 28 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 #PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 #PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 #PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 #PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 #PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 #PHP
php利用递归实现删除文件目录的方法
Sep 23 #PHP
You might like
php不使用copy()函数复制文件的方法
2015/03/13 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
javascript顺序加载图片的方法
2015/07/18 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python的迭代器和生成器使用实例
2015/01/14 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
详解python数据结构和算法
2019/04/18 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
小学生综合素质评语
2014/04/23 职场文书
三峡大坝导游词
2015/01/31 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技