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

原文: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;
    }
}
?>

 

时间: 2024-12-30 23:37:28

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

微信公众平台开发(74) 用户分组管理

微信公众平台开发 用户分组管理 分组管理接口 查询分组 创建分组 修改分组名 移动用户分组作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin74-group-manage.html    开发者可以使用接口,对公众平台的分组进行查询.创建.修改操作,也可以使用接口在需要时移动用户到某个分组.   创建分组 一个公众账号,最多支持创建500个分组. 接口调用请求说明 http请求方式: POST(请使用https协议) https://api.w

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

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

微信公众平台开发之发送文本消息.Net代码解析_实用技巧

.Net实现微信公共服务平台开发中的发送文本消息功能,具体内容如下 首先建立一个微信消息类.  class wxmessage { public string FromUserName { get; set; } public string ToUserName { get; set; } public string MsgType { get; set; } public string EventName { get; set; } public string Content { get; s

微信公众平台开发之发送图文消息.Net代码解析_实用技巧

之前我们讲过让微信发送给我们普通的文本信息,下面我们来看看如何发送图文信息,需要注意的是这里说的是,让微信发给我们,而不是我们拍个图片发给微信处理,我们上传图片在以后的章节介绍.下面是发送图文消息的函数,涉及title(标题),description(摘要),picurl(图片),链接(url)几个关键的参数:  protected string sendPicTextMessage(Msg _mode,string title,string description,string picurl,

对微信公众平台开发的消息处理

这几天有点空,做了个Android App后,想着对接一下公司的微信平台,以便让客户更方便查询,在研究微信平台中,要注意以下几点: 1.微信验证消息真实性是用Get方式到你提交的url 2.用户发送的消息.事件等都是通过Post方式提交过来 3.微信服务器端发送过来的,是xml格式,通过HttpRequest.InputStream获取 4.在处理用户消息的时候,如果你要返回信息的话,您只要输出xml格式的字符串就可以了. 如何读取微信客户端信息: var stream = Request.In

微信公众平台开发入门教程

在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 基础接口消息及事件 微信公众平台PHP SDK 微信公众平台开发模式原理 开发天气预报功能 第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+M

微信公众平台开发入门教程(SAE方倍工作室)_Android

我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用启用微信公众平台开发模式基础接口消息及事件微信公众平台PHP SDK微信公众平台开发模式原理开发天气预报功能 第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境.申请地址:http://sae.sina.com.cn/ ,使用新浪微博账号可以直接登录SAE,登录后SAE将赠送50

微信公众平台开发教程

本系列微信公众平台教程以PHP+MySQL为开发环境,介绍了微信公众平台开发模式下基础接口.自定义菜单.高级接口.WeiXin JS接口.微信支付等接口以及在此基础上的功能或应用开发的方法及技巧,案例极具实用价值,是学习微信公众平台开发实战的经典教材.   配套书籍 <微信公众平台开发最佳实践> 由方倍工作室编写,覆盖基础接口.自定义菜单.高级接口.微信支付.转发分享等五大接口,包含近30个案例及技巧,已成功帮助无数人进入微信开发领域. 购买地址        准备工作 微信公众平台的注册 介

微信公众平台开发(89) 高级群发接口

 在这篇微信公众平台高级接口开发教程中我们将介绍如何使用接口实现微信公众平台群发功能. 本文分为以下四个部分 准备群发内容 选择群发对象 执行群发 接收群发结果   一.准备群发内容 群发内容可以是文本.图片.语音.视频.图文.群发文本只需要文本内容其他内容需要获得相应的media_id. 1. 文本内容 文本内容就是一段文字比如"微信公众平台开发最佳实践" 2. 图片.语音.视频 要求如下 图片image: 128K支持JPG格式 语音voice256K播放长度不超过60s支持AMR