首页 > 其他分享 >微信上的消息接受与回复

微信上的消息接受与回复

时间:2024-05-16 20:33:46浏览次数:11  
标签:index img 微信 回复 接受 weatherinfo data 消息

1.接收消息

URL接口验证以后,公众平台账号收到的消息将由微信服务器使用HTTP POST推送至该URL。消息内容为XML格式,消息类型有文本、图片、语音、视频等。各消息类型的推送XML数据包结构如下。

文本消息模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>

其中,ToUserName和FromUserName分别为公众账号和用户账号的表识串;MsgType标识消息类型;“text”表明消息是文本消息;文本内容放置在Content字段;消息接口中定义的消息创建时间CreateTime,它表示1970年1月1日0时0分0秒至消息创建时所间隔的秒数,注意是间隔的秒数,不是毫秒数。


 

图片信息模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[this is a url]]></PicUrl>
<MediaId><![CDATA[media_id]]></MediaId>
<MsgId>1234567890123456</MsgId>
</xml>

其中与文本信息编码中相同的字符所表示的意义也相同,可参考上面的解释。其他参数的意思是:PicUrl为图片链接;MediaId是图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

其他类型的推送XML数据包不多做阐释,可在微信公众平台的开发文档中查看。


 

2.回复消息

当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发来的消息的一次回复。各种回复类型的编码模板如以下所示。

文本回复信息编码模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

其中,ToUserName为接收方账号,FromUserName为开发者微信号,CreateTime为消息创建时间(整型),MsgType为回复类型,如文本回复就是text,以上4项参数出现在后面的编码中,也为同样的意思。


图片回复消息编码模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>

图片回复消息的MsgType为Image,MediaId为通过素材管理中的接口上传多媒体文件得到的ID。


语音回复消息编码模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
<MediaId><![CDATA[media_id]]></MediaId>
</Voice>
</xml>

视频信息编码模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<Video>
<MediaId><![CDATA[media_id]]></MediaId>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
</Video>
</xml>

编码中的Title为视频消息的标题,Description为视频消息的描述,这两项都不是必须填写的项目。


音乐消息回复模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[TITLE]]></Title>
<Description><![CDATA[DESCRIPTION]]></Description>
<MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
<HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
<ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
</Music>
</xml>

编码中的MusicUrl为音乐链接,HQMusicUrl为高质量音乐链接,WiFi环境优先使用该链接播放音乐,这两项并不是必须填写的;ThumbMediaId为缩略图的媒体ID,通过素材管理中的接口上传多媒体文件得到的ID,必须填写。


图文消息回复编码模板

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[title1]]></Title>
<Description><![CDATA[description1]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
<item>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
</Articles>
</xml>

ArticleCount为图文消息个数,限制为10条以内;Articles为多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应;PicUrl为图片链接,支持JPG、PNG格式,较好的效果为大图360像素×200像素,小图200像素×200像素;Url为单击图文消息跳转链接。

消息回复的编码做好后,可上传至新建应用中使用。如果出现“该公众号暂时无法提供服务,请稍后再试”的情况,可能是开发者在5秒内未回复任何内容或开发者回复了异常数据,如JSON数据等,需要对编码进行检测,登录新浪SAE,找到新建应用然后单击“编辑代码”即可。

另外,回复图片等多媒体消息时需要预先通过素材管理接口上传临时素材到微信服务器,可以使用素材管理中的临时素材,也可以使用永久素材。


 

1.地理位置

在微信公众服务号开发需求中经常有获取用户位置信息的功能,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动。地理位置获取流程如图

开通了上报地理位置接口的公众号,用户在关注后进入公众号会话时,会弹框让用户确认是否允许公众号使用其地理位置。弹框只在关注后出现一次,用户以后可以在公众号详情页面进行操作。第三方在收到地理位置上报信息之后,只需要回复success表明收到即可,不允许回复粉丝消息。

用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,上报地理位置以推送XML数据包到开发者填写的URL来实现。

推送XML数据包示例:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[LOCATION]]></Event>
<Latitude>23.137466</Latitude>
<Longitude>113.352425</Longitude>
<Precision>119.385040</Precision>
</xml>

Event为事件类型,即LOCATION;Latitude为地理位置纬度;Longitude为地理位置经度;Precision为地理位置精度。

2.天气

推送天气情况需要先行获得用户的地理位置信息,才能为用户提供相应地区的天气预报。同时需要通过中国天气网提供的开放API进行相关地区天气查询。

用户发送过来查询天气的消息的格式是固定好的,即 “地区+天气”,所以,首先截取后两个字,判断是否为“天气”关键词。

从消息的结尾数第二个字符开始截取,截取两个字符,然后加以判断是否为“天气”关键词。下面进行地区提取,还是使用 mb_substr()函数。从消息的开头开始,截掉末尾的两个字符(天气),即得地区关键词。然后进行判断,继而调用函数查询天气数据。

if($str=='天气' && !empty($str_key))
{
//调用函数查询天气数据
}
View Code

weather()函数查询返回信息比较全面,也是以json格式提供,格式如下。

{"weatherinfo":{
//基本信息;
"city":"北京","city_en":"suzhou",
"date_y":"2013年7月9日","date":"","week":"星期二","fchh":"18","cityid":"101190401",
//摄氏温度
"temp1":"30℃~37℃",
"temp2":"30℃~37℃",
"temp3":"29℃~35℃",
"temp4":"27℃~33℃",
"temp5":"27℃~31℃",
"temp6":"27℃~35℃",
//华氏温度;
"tempF1":"86℉~98.6℉",
"tempF2":"86℉~98.6℉",
"tempF3":"84.2℉~95℉",
"tempF4":"80.6℉~91.4℉",
"tempF5":"80.6℉~87.8℉",
"tempF6":"80.6℉~95℉",
//天气描述;
"weather1":"晴转多云",
"weather2":"晴转多云",
"weather3":"晴转多云",
"weather4":"多云",
"weather5":"雷阵雨转中雨",
"weather6":"雷阵雨转多云",
//天气描述图片序号
"img1":"0",
"img2":"1",
"img3":"0",
"img4":"1",
"img5":"0",
"img6":"1",
"img7":"1",
"img8":"99",
"img9":"4",
"img10":"8",
"img11":"4",
"img12":"1",
//图片名称;
"img_single":"1",
"img_title1":"晴",
"img_title2":"多云",
"img_title3":"晴",
"img_title4":"多云",
"img_title5":"晴",
"img_title6":"多云",
"img_title7":"多云",
"img_title8":"多云",
"img_title9":"雷阵雨",
"img_title10":"中雨",
"img_title11":"雷阵雨",
"img_title12":"多云",
"img_title_single":"多云",
//风速描述
"wind1":"西南风3-4级",
"wind2":"西南风3-4级",
"wind3":"东南风3-4级",
"wind4":"东南风3-4级转4-5级",
"wind5":"东南风4-5级转西南风3-4级",
"wind6":"西南风3-4级转4-5级",
//风速级别描述
"fx1":"西南风",
"fx2":"西南风",
"fl1":"3-4级",
"fl2":"3-4级",
"fl3":"3-4级",
"fl4":"3-4级转4-5级",
"fl5":"4-5级转3-4级",
"fl6":"3-4级转4-5级",
//今日穿衣指数;
"index":"炎热",
"index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。",
//48小时穿衣指数
"index48":"炎热",
"index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。",
//紫外线及48小时紫外线
"index_uv":"中等",
"index48_uv":"中等",
//洗车指数
"index_xc":"适宜",
//旅游指数
"index_tr":"较不宜",
//舒适指数
"index_co":"很不舒适",
"st1":"36",
"st2":"28",
"st3":"36",
"st4":"28",
"st5":"34",
"st6":"27",
//晨练指数
"index_cl":"较适宜",
//晾晒指数
"index_ls":"适宜",
//过敏指数
"index_ag":"不易发"}}

我们可以通过解析JSON,获取相应城市的天气数据。

weather()函数如下。

private function weather($n){
include("weather_cityId.php");
$c_name=$weather_cityId[$n];
if(!empty($c_name)){
$json=file_get_contents("http://m.weather.com.cn/data/".$c_name.".html");
return json_decode($json);
} else {
return null;
}
}

这里include 了一个城市对应关系文件 weather_cityId.php,格式如下。

<?php

$weather_cityId=array("北京"=>"101010100","上海"=>"101020100","苏州"=>"101190401");

?>

根据传入的城市名,得到城市代码,如果不为空,则调用中国天气网的API进行查询,返回json格式的数据,然后进行解析并返回数据,如果为空,则返回null值。

判断返回数据是否为空,若为空,则 $contentStr=“抱歉,没有查到\”“.$str_key."\"的天气信息!”;若返回数据不为空,会返回相关的信息,如下所示。

$contentStr="【".$data->weatherinfo->city."天气预报】\n".$data->weatherinfo->date_y." ".$data->weatherinfo->fchh."时发布"."\n\n实时天气\n".$data->weatherinfo->weather1." ".$data->weatherinfo->temp1." ".$data->weatherinfo->wind1."\n\n温馨提示:".$data->weatherinfo->index_d."\n\n明天\n".$data->weatherinfo->weather2." ".$data->weatherinfo->temp2." ".$data->weatherinfo->wind2."\n\n后天\n".$data->weatherinfo->weather3." ".$data->weatherinfo->temp3." ".$data->weatherinfo->wind3;

 

标签:index,img,微信,回复,接受,weatherinfo,data,消息
From: https://www.cnblogs.com/9999w/p/18196672

相关文章

  • 微信开发-主动推送模板消息给特定用户
    其实也比较简单,设置模板后推送即可,具体官方说明文档如下:接口调用请求说明http请求方式:POSThttps://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=ACCESS_TOKENPOST数据说明如下:{"template_id":"Dyvp3-Ff0cnail_CDSzk1fIc6-9lOkxsQE7ex......
  • 微信开发-获取AccessToken授权
    获取微信授权有两种方式1:通过AppID和AppSecret,后台可以直接获取2:通过网页授权(主要应用场景是Web端例如公众号等需要获取用户基本信息,需要用户授权,最终通过Code换取access_token)由于目前Senparc等框架都比较重量级,往往使用其开发时不光要理解微信官方的开发文档,还要理解其类库......
  • 【ubuntu】安装企业微信
    1.下载Wine环境包:            Wine环境包下载地址:http://archive.ubuntukylin.com/software/pool/partner/ukylin-wine_70.6.3.25_amd64.deb 2.下载企业微信(wine)包:            企业微信(wine)包下载地址:http://archive.ubuntukylin.com/software/pool/par......
  • 推荐一款微信公众平台Python开发神器!
    1、引言在当今数字化时代,微信公众平台成为了企业和个人连接用户的重要渠道。为了高效地管理和与用户互动,开发者需要一个强大而灵活的工具。Weixin-Python正是这样一个为微信公众平台量身打造的Python库,它以其简洁的API和丰富的功能赢得了众多开发者的青睐。本文将深入探讨......
  • 网站应用微信登录 DEMO
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>网站应用微信登录DEMO</title&g......
  • 网站应用微信登录 DEMO
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>网站应用微信登录DEMO</title&g......
  • 微信小程序获取手机定位+经纬度转详细地址
    在微信小程序中获取手机定位信息wx.getLocation({type:'wgs84',success(res){//console.log(res)constlatitude=res.latitudeconstlongitude=res.longitudeif(flag)......
  • 微信云托管使用腾讯自家免费提供50张额度的SSL证书,稳得一批
    因为之前的免费证书小程序打包后就提示证书无效,只能在模拟器才能用,然后有个功能就一直没上,刚才无意间想着谷歌搜索一下看有没有能用的免费证书: 嘿,您猜怎么着,还真有,还是腾讯自家的,这不妥了吗。遂申请使用,审核一下就通过了,很快,然后我就在微信云托管换上了新证书,嘿,就不报错了,这......
  • 微信3.9.8.25机器人(Hook注入)搭建教程文档
    开源地址https://github.com/ttttupup/wxhelper  微信破解dllhttps://github.com/nefarius/Injector  注入工具https://github.com/tom-snow/wechat-windows-versions/releases 微信历史版本基本原理启动指定版本PC微信以后,利用注入程序将dll文件注入到微信进程内,可......
  • 微信小程序热门选题
    一、大体实现思路微信小程序,现在是非常热门的,基于微信生态开发的。现在很多计算机毕业的同学,都会选择微信小程序作为毕业设计小程序端通常都是展示数据给用户去看的,大多数情况下,这些数据不是写死的,而是前端请求服务器接口获取数据的。博主介绍:✌程序员hunter_code、6年大厂程......