热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

接收普通消息

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。请注意:1、关于重试的消息排重,推荐使用msgid排重。2、微信服务器在五秒内收不到

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

请注意:

1、关于重试的消息排重,推荐使用msgid排重。

2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,

可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。

3、如果开发者需要对用户消息在5秒内立即做出回应,即使用“发送消息-被动回复消息”接口向用户被动回复消息时,可以在

公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息和开发者回复的消息都会被加密(但开发者通过客服

接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“发送消息-被动回复消息加解密说明”。

各消息类型的推送XML数据包结构如下:

文本消息

 

 

 1348831860

 

 

 1234567890123456

 


参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType text

Content 文本消息内容

MsgId 消息id,64位整型

使用网页调试工具调试该接口

图片消息

 

 

 1348831860

 

 

 

 1234567890123456

 


参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType image

PicUrl 图片链接(由系统生成)

MediaId 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

MsgId 消息id,64位整型

使用网页调试工具调试该接口

语音消息

1357290913

1234567890123456


参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType 语音为voice

MediaId 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。

Format 语音格式,如amr,speex等

MsgID 消息id,64位整型

使用网页调试工具调试该接口


请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:

1357290913

1234567890123456

参数说明:

参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType 语音为voice

MediaID 语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体

Format 语音格式:amr

Recognition 语音识别结果,UTF8编码

MsgID 消息id,64位整型

视频消息

1357290913

1234567890123456


参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType 视频为video

MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

MsgId 消息id,64位整型

使用网页调试工具调试该接口

小视频消息

1357290913

1234567890123456


参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType 小视频为shortvideo

MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

MsgId 消息id,64位整型

使用网页调试工具调试该接口

地理位置消息

1351776360

23.134521

113.358803

20

1234567890123456


参数 描述

ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间 (整型)

MsgType location

Location_X 地理位置维度

Location_Y 地理位置经度

Scale 地图缩放大小

Label 地理位置信息

MsgId 消息id,64位整型

使用网页调试工具调试该接口

链接消息

1351776360

1234567890123456


参数 描述

ToUserName 接收方微信号

FromUserName 发送方微信号,若为普通用户,则是一个OpenID

CreateTime 消息创建时间

MsgType 消息类型,link

Title 消息标题

Description 消息描述

Url 消息链接

MsgId 消息id,64位整型



/**

  * wechat php test

  */


//define your token

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();

// $wechatObj->valid();

$wechatObj->index();


class wechatCallbackapiTest

{


    public function index(){

        if(isset($_GET[‘echostr‘])) {

            $this->valid();

        } else {

            $this->responseMsg();

        }

    }


    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);

                $type = $postObj->MsgType;

                $time = time();

                $textTpl = "

                           

                           

                            %s

                           

                           

                            0

                            ";  


                $imgTpl = "

                           

                           

                            %s

                           

                           

                           

                           

                            "; 


                $voiceTpl = "

                               

                               

                                %s

                               

                               

                               

                               

                                ";

                $videoTpl = "

                           

                           

                            %s

                           

                           

                           

                           

                           

                             

                           

                            ";

            $musicTpl = "

                       

                       

                        %s

                       

                       

                       

                       

                       

                       

                       

                       

                       

                        ";


                $newsTpl = "

                       

                       

                        %s

                       

                        2

                       

                       

                         

                       

                       

                       

                       

                       

                       

                       

                       

                       

                       

                       

                        ";


                if($type == ‘text‘) {

                        $picurl = ‘http://i3.mifile.cn/a4/T1UQAgB7_v1RXrhCrK.jpg‘;


                       $echo  = sprintf($newsTpl,$fromUsername,$toUsername,$time,‘news‘,‘title1‘,‘description1‘,$picurl,‘http://baidu.com‘,‘title2‘,‘description2‘,$picurl,‘http://taikr.com‘);




                    // if ($keyword == 1) {

                        // $musicUrl = ‘http://sc.111ttt.com/up/mp3/161940/AAA1CD69EBEED018C3AC9CE6CCB8C3B3.mp3‘;

                        // $media_id = ‘7Wn1YzkjjNMJ-ZFIUbbQjItbMi6zVzlKoCdvRpkZYSg8yew5yV8yCe8QRx4X4NAR‘;

                        //     $echo = sprintf($musicTpl,$fromUsername,$toUsername,$time,‘music‘,‘音乐标题‘,‘音乐描述‘,$musicUrl,$musicUrl,$media_id);

                        // } else {

                        //     $str = ‘你发送的是文本消息‘ . $keyword;

                        //      $MsgType = ‘text‘;

                        //      $echo  = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);

                        // }



                } else if ($type == ‘image‘){

                    $MsgType = ‘image‘;


                    $media_id = ‘7Wn1YzkjjNMJ-ZFIUbbQjItbMi6zVzlKoCdvRpkZYSg8yew5yV8yCe8QRx4X4NAR‘;

                    $media_id = $postObj->MediaId;

                    $echo = sprintf($imgTpl,$fromUsername,$toUsername,$time,$MsgType,$media_id);

                } else if ($type == ‘voice‘) {

                    $str = $postObj->Recognition;

                     $str = ‘你说话的语音识别结果是‘ . $postObj->Recognition;

                    $MsgType = ‘text‘;

                     $echo  = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);


                } else if ($type == ‘video‘) {

                    $str = ‘你发送的是视频消息,Id是‘ . $postObj->MediaId;

                    $MsgType = ‘text‘;

                     $echo  = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);

                   // $MsgType = ‘video‘;

                   // $title = ‘视频标题‘;

                   // $desc = ‘视频描述‘;

                   // $echo = sprintf($videoTpl,$fromUsername,$toUsername,$time,$MsgType,$postObj->MediaId,$title,$desc);

                } else if ($type == ‘location‘) {

                    $str = ‘你发送的是地理位置消息,纬度是‘ . $postObj->Location_X. " 经度是" . $postObj->Location_Y . "名称" . $postObj->Label . "精度是" . $postObj->Scale;

                    $MsgType = ‘text‘;

                     $echo  = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);

                } else if ($type == ‘link‘) {

                     $str = ‘你发送的是链接消息‘  . $postObj->title  . $postObj->Description . $postObj->Url;

                    $MsgType = ‘text‘;

                     $echo  = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);

                } else if ($type == ‘event‘) {

                    if ($postObj->EventKey == ‘V1001_TODAY_MUSIC‘) {

                          $musicUrl = ‘http://sc.111ttt.com/up/mp3/161940/AAA1CD69EBEED018C3AC9CE6CCB8C3B3.mp3‘;

                         $media_id = ‘7Wn1YzkjjNMJ-ZFIUbbQjItbMi6zVzlKoCdvRpkZYSg8yew5yV8yCe8QRx4X4NAR‘;

                         $echo = sprintf($musicTpl,$fromUsername,$toUsername,$time,‘music‘,‘音乐标题‘,‘音乐描述‘,$musicUrl,$musicUrl,$media_id);

                    } else if ($postObj->EventKey == ‘V1001_GOOD‘) {

                        $str = ‘thank you for your zan‘;

                       $MsgType = ‘text‘;

                       $echo  = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);

                    }

                }



                echo $echo;


        }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;

        }

    }

}


?>


接收普通消息


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
Money00Fish
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有