微信公众号简单开发(9)地理位置消息
不想听我扯皮的,直接看官方:
微信官方的文档 :
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
开发前说明:
我们需要用到 StreamReader
所以需要引用:using System.IO;
如果我们发现,我们的用户,发送 位置消息 到公众号。我们就针对 位置消息 进行处理。
首先我们看看官方文档。
<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>1351776360</CreateTime><MsgType>< ![CDATA[location] ]></MsgType><Location_X>23.134521</Location_X><Location_Y>113.358803</Location_Y><Scale>20</Scale><Label>< ![CDATA[位置信息] ]></Label><MsgId>1234567890123456</MsgId></xml>
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | location |
Location_X | 地理位置维度 |
Location_Y | 地理位置经度 |
Scale | 地图缩放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
现在正式讲开发
上面讲了一些微信给我们的规则
我们现在要用这些规则获取我们想要的东西。
第一步:获取那串 XML 这个是最重要的,因为没这个XML,我们就相当于啥都没有。(我们的信息来源就是这个XML)
这里我使用 StreamReader 来获取 Request.Body
因为XML主要是 Request.Body 里面的
//声明一个XML方便调用
string xml="";
//获取我们的流
var reader = new StreamReader(Request.Body);
//把流里面的读取出来,就是我们这串XML了。
var contentFromBody = reader.ReadToEnd();
//再保存进我们的这个字符串里,方便后期使用
xml = contentFromBody;
我们读取XML中的信息,并将其转成我们的微信信息对象。
这里呢。我借用了一位大佬的代码:
专门处理微信消息的几个类
第一个类:
MessageFromWeiXin:
第二个类:
ResponseClient:
这两个类,我就不放出来了。大家可以去上几篇文章看看,如果不想翻文章,请留下邮箱,或者直接联系我
有了这两个类,我们的东西就好开展了,如果大家有发现报错的话,是因为string扩展类的问题。需要的留下邮箱,这个东西太长了。不好发,不过大家应该都看的懂,自己写一套也好。
使用上面第二个类中的,这个方法,进行转换 : XmlToMessageFromWeiXin
得到我们 msg 对象
我们这个对象里面有msgtype,这个type枚举呢,就对应了各个事件。
我们写个switch就能将他们分开了。不同事件进入不同分支处理。
/// <summary>
/// 接收来自微信的消息
/// </summary>
[HttpPost]
[Route("api/WeChat")]
public string Post(string xml)
{
System.Console.WriteLine("进入消息处理");
var reader = new StreamReader(Request.Body);
var contentFromBody = reader.ReadToEnd();
System.Console.WriteLine($"xml:{contentFromBody}");
xml = contentFromBody;
try
{
var msg = ResponseClient.XmlToMessageFromWeiXin(xml);
var Response = "";
switch (msg.MsgType)
{
case MessageFromWeiXinType.shortvideo:
var shortvideo = (ShortVideoMessageFromWeiXin)msg;
//我们下载这串语音的话就要使用这个字段:MediaId,根据这个字段加上微信提供的多媒体下载接口 ,下载 我们的视频文件。记得及时下载哟
System.Console.WriteLine($"小视频下载地址:{shortvideo.MediaId}");
Response = "<xml> <ToUserName><![CDATA[" + shortvideo.FromUserName +
"]]></ToUserName> <FromUserName><![CDATA[" + shortvideo.ToUserName +
"]]></FromUserName> <CreateTime>" +
ResponseClient.ConvertDateTimeToInt(DateTime.Now) +
"</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[您发了一个小视频,小女子已经帮您保存起了]]></Content> </xml>";
break;
case MessageFromWeiXinType.video:
var video = (VideoMessageFromWeiXin)msg;
//我们下载这串语音的话就要使用这个字段:MediaId,根据这个字段加上微信提供的多媒体下载接口 ,下载 我们的视频文件。记得及时下载哟
System.Console.WriteLine($"视频下载地址:{video.MediaId}");
Response = "<xml> <ToUserName><![CDATA[" + video.FromUserName +
"]]></ToUserName> <FromUserName><![CDATA[" + video.ToUserName +
"]]></FromUserName> <CreateTime>" +
ResponseClient.ConvertDateTimeToInt(DateTime.Now) +
"</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[您发了一个视频,小女子已经帮您保存起了]]></Content> </xml>";
break;
}
return Response;
// return "success";
}
catch (Exception ex)
{
return "error";
}
}
得到结果
纬度:23.02067
经度:113.7518
地图缩放大小:15
地理位置信息:东莞市*(鸿福路99号)
进过坐标拾取器验证,我们发现高德地图和腾讯地图认这个坐标,百度地图需要转换
下面给出我们的坐标拾取器:
百度:http://api.map.baidu.com/lbsapi/getpoint/index.html
高德:https://lbs.amap.com/console/show/picker
腾讯:https://lbs.qq.com/tool/getpoint/index.html
关于大家还有些使用问题,有不懂的或需要代码的,留下邮箱
上一篇: mysql 8.0 卸载并安装