PHP开发微信公众平台一、根据消息类型回复消息

1.微信公众平台开发

1.1开发者模式

1).微信公众平台账号(http://mp.weixin.qq.com)

订阅号:个人版用户,每天可群发一条消息

服务号:企业版用户,每月可以发送四条消息

2).在线虚拟主机或者服务器,(SAM云引擎,BAE云引擎,阿里云服务器)

3).TortoiseSVN(SVN客户端软件),把代码放到服务器上

1.2开发原理图

解释:手机端用户发送消息到腾讯服务器,腾讯服务器的内部源代码解析后发送给我们自定义的放服务器,其中TortoiseSVN主要是把我们自己的源代码放到自定义服务其中,自定义服务器通过内部源代码处理腾讯服务器发过来的xml,再返回给腾讯服务器,腾讯服务器经过 处理再返回给用户,实现完整流程。

2.申请测试号,配置接口信息

 代码如下

<?php
/**
  * wechat php test
  */
  

//define your token
//定义TOKEN密钥
define("TOKEN", "weixin");

     //实例化微信对象
     $wechatObj = new wechatCallbackapiTest();
    
     //验证成功后注释掉valid功能
    //   $wechatObj->valid();

//开启自动回复功能
 $wechatObj->responseMsg();

 
//定义类文件
class wechatCallbackapiTest
{  
    //实现valid验证方法:实现对接微信公众平台
    public function valid()
    {
        //通过get请求接收随机字符串
        $echoStr = $_GET["echostr"];
       
      
        
 
        //valid signature , option
        //进行用户数字签名验证
        if($this->checkSignature()){
            //如果成功,则返回接收到的随机字符串
            echo $echoStr;
            //退出
            exit;
        }else{
            echo 'cuowu';
        }
    }
 
    //定义自动回复功能
    public function responseMsg()
    {
        //get post data, May be due to the different environments
     //接收用户端发送过来的xml数据
        // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        $postStr = file_get_contents("php://input");
          //extract post data
          //判断xml数据是否为空
        if (!empty($postStr)){
                 //通过simplexml进行xml解析
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                  //手机端
                $fromUsername = $postObj->FromUserName;
                //微信公众平台
                $toUsername = $postObj->ToUserName;
                echo $toUsername;
                //接收用户发送的关键词
                $keyword = trim($postObj->Content);
                //接收用户消息类型
                $msgType = $postObj->MsgType;
                echo $msgType;
                //时间戳
                $time = time();
                //文本发送模板
                $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($msgType=='text'){
                               //判断用户发送关键词是否为空        
                               if(!empty( $keyword ))
                               {
                                   //回复类型,如果为"text",代表文本类型
                                     $msgType = "text";
                                     //回复内容
                                   $contentStr = "你发送的是文本消息";
                                     //格式化字符串
                                   $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                        //把xml数据返回给手机端
                                   echo $resultStr;
                               }else{
                                   echo "Input something...";
                                }
                              }elseif($msgType=="image"){
                                //回复类型,如果为"text",代表文本类型
                                $msgType = "text";
                                //回复内容
                              $contentStr = "你发送的是图片消息";
                                //格式化字符串
                              $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                   //把xml数据返回给手机端
                              echo $resultStr;

                              }elseif($msgType=="voice"){
                                //回复类型,如果为"text",代表文本类型
                                $msgType = "text";
                                //回复内容
                              $contentStr = "你发送的是语音消息";
                                //格式化字符串
                              $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                   //把xml数据返回给手机端
                              echo $resultStr;

                              }elseif($msgType=="shortvideo"){
                                //回复类型,如果为"text",代表文本类型
                                $msgType = "text";
                                //回复内容
                              $contentStr = "你发送的是短视频消息";
                                //格式化字符串
                              $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                   //把xml数据返回给手机端
                              echo $resultStr;

                              }
                              elseif($msgType=="video"){
                                //回复类型,如果为"text",代表文本类型
                                $msgType = "text";
                                //回复内容
                              $contentStr = "你发送的是视频消息";
                                //格式化字符串
                              $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                   //把xml数据返回给手机端
                              echo $resultStr;

                              }
 
        }else {
            echo "";
            exit;
        }
    }
    
    //定义checkSignature
    private function checkSignature()
    {
           //判断TOKEN密钥是否定义
        if(!defined("TOKEN")){
            //如果没有定义抛出异常
            throw new Exception('TOKEN is not defined!');
        }
        //接收微信加密签名
        $signature = $_GET["signature"];
        //接收时间戳
        $timestamp = $_GET["timestamp"];
        //接收随机数
        $nonce = $_GET["nonce"];    
                 
        //把TOKEN常量赋值给$token变量
        $token = TOKEN;
        //把相关参数组装成数组(密钥,时间戳,随机数)
        $tmpArr = array($token, $timestamp, $nonce);
        //通过字典法进行排序
        sort($tmpArr);
        //把排序后的数组转化成字符串
        $tmpStr = implode( $tmpArr );
        //通过哈希算法对字符串进行加密
        $tmpStr = sha1( $tmpStr );
        
        //与加密签名进行对比
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}
 
 
?>

3.回复功能测试

就是上述代码,$GLOBALS好多没有打开,建议用下图

 

4.测试

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
phpWechat 是由一个具有多年行业开发经验的前端 UI 设计师、PHP开发工程师组成的团队设计、研发的一套的微信公众平台管理系统,您可以瞬间完成一个公共号或者PC站或者两者皆有的平台搭建。 phpWeChat 微信+网站开发框架功能亮点: 1、100%开源,没有任何加密文件 phpWeChat核心文件100%开源,没有任何加密文件,开发者可以放心使用而无需担心留有后门程序等。 2、程序轻量级,一天读完所有代码 核心框架压缩包只有2.66M,十分利于开发者迅速阅读全部代码。 3、代码严谨,结构清晰 phpWeChat使用MVC开发模式,各个功能模块之间独立并目录结构统一。开发者可迅速掌握phpWeChat的框架结构。 4、二次开发文档十分完善 我们提供了完善的phpWeChat二次开发文档,便于开发者学习与查阅。 5、高度集成微信接口 phpWeChat高度集成了微信公共号的自动回复、菜单管理、素材管理、模板消息、粉丝管理、微信支付等常用接口,您只需一个函数或2/3行代码即可实现原本需要很费时费力才能开发的功能。 6、phpWeChat也是一个PC(网站)开发框架和CMS 慢慢您会发现,phpWeChat是一个更接近CMS功能的框架。 7、高度封装常用开发功能 只需一两行固定的代码,您便可以写出列表分页、微信支付、文件上传、邮件发送、短信发送等功能。 8、数据结构合理,负载强劲 phpWeChat集成了常见的内存级缓存(MemCache)、文件缓存处理方案,使得系统更符合大数据、大并发的公共号或网站使用。 9、集成应用市场,功能拓展一瞬间 phpWeChat集成了应用市场并在线安装应用的功能,您可以在一瞬间安装完成其他开发开发的功能模块。 phpWeChat安装方法: 将下载的程序压缩包(zip格式)解压后,将全部文件和文件夹上传至网站根目录。然后输入域名/install.php 即可进入安装程序。 注意:安装phpWeChat前请先创建好phpWeChat所需的数据库。 phpWeChat 目录结构: addons 功能模块目录 admin 公用后台目录 api 插件目录 data 数据缓存目录 install 安装程序目录,安装后请改名或删除 include 公用操作类目录 statics 静态文件目录 template 视图(模板)目录 upload 上传文件存放目录 phpWeChat 更新日志: 新版v1.0.3发布: phpWeChat PC+微信公众号开发核心框架v1.0.3针对v1.0.2版本出现的问题,主要修复了和增加了以下功能: 1、优化自定义模块操作; 2、优化安装过程; 3、修复一处在线支付的PHP版本兼容问题; 4、修复一处自定义模块的问题; 5、修复后台模块管理显示未知版本的bug; 6、修复粉丝行为IP报错的Bug; 7、删除一些冗余代码; 8、修复消息模板不存在时,一直提示[同步中]的bug。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值