PHP-微信公众平台开发-接收用户输入消息类型并响应

<?php
// 该代码块用于接收用户消息,根据用户输入的消息类型进行判断,文本,图片,视频,位置,链接,语音等,并取得值,处理后给予响应。
// 接收用户消息
// 微信公众账号接收到用户的消息类型判断
//

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET[‘echostr‘])) {
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            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;
        }
    }

    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            //用户发送的消息类型判断
            switch ($RX_TYPE)
            {
                case "text":    //文本消息
                    $result = $this->receiveText($postObj);
                    break;
                case "image":   //图片消息
                    $result = $this->receiveImage($postObj);
                    break;

                case "voice":   //语音消息
                    $result = $this->receiveVoice($postObj);
                    break;
                case "video":   //视频消息
                    $result = $this->receiveVideo($postObj);
                    break;
                case "location"://位置消息
                    $result = $this->receiveLocation($postObj);
                    break;
                case "link":    //链接消息
                    $result = $this->receiveLink($postObj);
                    break;
                default:
                    $result = "unknow msg type: ".$RX_TYPE;
                    break;
            }
            echo $result;
        }else {
            echo "";
            exit;
        }
    }

    /*
     * 接收文本消息
     */
    private function receiveText($object)
    {
        $content = "你发送的是文本,内容为:".$object->Content;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    /*
     * 接收图片消息
     */
    private function receiveImage($object)
    {
        $content = "你发送的是图片,地址为:".$object->PicUrl;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    /*
     * 接收语音消息
     */
    private function receiveVoice($object)
    {
        $content = "你发送的是语音,媒体ID为:".$object->MediaId;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    /*
     * 接收视频消息
     */
    private function receiveVideo($object)
    {
        $content = "你发送的是视频,媒体ID为:".$object->MediaId;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    /*
     * 接收位置消息
     */
    private function receiveLocation($object)
    {
        $content = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    /*
     * 接收链接消息
     */
    private function receiveLink($object)
    {
        $content = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    /*
     * 回复文本消息
     */
    private function transmitText($object, $content)
    {
        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $result;
    }
}
?>

PHP-微信公众平台开发-接收用户输入消息类型并响应,布布扣,bubuko.com

时间: 2024-10-10 14:12:23

PHP-微信公众平台开发-接收用户输入消息类型并响应的相关文章

微信公众平台开发(88) 用户分组接口

本文介绍在微信公众平台上如何使用高级接口开发用户分组接口的功能. 一.接口介绍 开发者可以使用接口,对公众平台的分组进行查询.创建.修改操作,也可以使用接口在需要时移动用户到某个分组. 一个公众账号,最多支持创建500个分组. 接口调用请求说明创建分组http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN POST数据格式:json POST数据例子:

微信公众平台开发之处理普通消息---2

(接上一篇文章:微信公众平台开发之处理普通消息---1) 本章节主要讲述对普通消息的处理. 当用户关注微信公众号时,取消关注时,给公众号发各种信息时,作出简单的响应(处理). 一.在com.cc.wechat.util包下新建工具类: ---MessageUtil: 对xml解析需要用到两个工具包: 1 xstream.jar 点击下载 2 dom4j.jar 点击下载 package com.cc.wechat.util; import java.io.IOException; import 

微信公众平台开发之处理普通消息---1

注:我的培训老师:柳峰,在此感谢柳老师!他的个人博客:http://blog.csdn.net/lyq8479 用户发送的消息包括: (参照官方微信公众开发平台:http://mp.weixin.qq.com/wiki/) 1 文本消息,包括: ToUserName---开发者微信号 FromUserName---发送方帐号(一个OpenID) CreateTime---消息创建时间 (整型) MsgType---text Content---文本消息内容 MsgId---消息id,64位整型

微信公众平台开发--获取用户基本信息

本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录. 在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局Access Token和授权Access

微信公众平台开发(十) 消息回复总结——用其xml模板

一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响应(现支持回复文本.图文.语音.视频.音乐). 三.文本回复 3.1 文本回复xml 结构 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <F

微信公众平台开发(2)-消息封装

微信公众平台开发(2)-消息处理 消息包括文本.图片.语音.视频.音乐.图文,消息格式参考http://mp.weixin.qq.com/wiki/index.php?title=发送被动响应消息 在接入接口时指定了回调URL,在保存时微信会以GET方式调用此URL,并将signature,timestamp,nonce,echostr添加到URL上 因此在我们的微信处理的Controller中需要有执行上面URL的GET方法. 那么,发送和接收消息怎么来实现呢? 这个是通过以POST方式调用上

微信公众平台开发(26) 消息回复总结

原文: http://www.cnblogs.com/imaker/p/5491433.html 一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响应(现支持回复文本.图文.语音.视频.音乐). 三.文本回复 3.1 文本回复xml 结构 <xml> <ToUserName>

接入微信公众平台开发之用户关注(取消)事件触发后台自定义消息体通知给用户的实现过程

1.需求:用户关注公众号后回复给用户一个字符串,字符串不能重复使用即如果a用户关注公众号后商户后台回复给用户字符串str1后,b用户关注就是其他字符串,且a用户取消关注再次关注不回复消息体 2.实现过程: ①首先配置服务器url并开启,再次过程中需要微信后台与商户后台进行通信,所以,微信后台会发送请求,商户平台自定义接口回复相关内容即可完成通信. ②原理图: ③代码实现: a.pcodecontroller:定义的一个接口类,用来处理微信服务器发送的请求 1 package com.java.z

第三篇 :微信公众平台开发实战之请求消息,响应消息以及事件消息类的封装

微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者配置的URL和Token 来找到第三方服务器,并以XML形式向第三方服务器发送消息. (3)第三方服务器获取这些消息之后,需要按照微信服务器传过来的XML的语言进行解析,获取到信息之后,根据用户的需求,提供服务,然后封装成XML数据,传回到微信服务器上去. (4)微信服务器解析这些XML,并把相应的