大家好,欢迎来到IT知识分享网。
微信公众平台设备功能是微信为服务号提供的物联网解决方案,设备功能建立在微信硬件平台之上。设备功能允许硬件设备厂商通过服务号,将用户与其拥有的智能设备相连。
通过微信硬件平台规定的连接协议,各种智能设备如蓝牙设备、WIFI设备和其他移动网络设备都能方便的接入微信,完成设备、人、服务三者的连接。
申请
服务号目前不向个人开放申请,而且申请一个服务号流程比较复杂繁琐,审核时间也很长。为方便开发者开发调试,微信提供微信公众平台接口测试帐号,允许开发者在没有公众号的情况下,直接体验和测试公众平台的高级接口。测试账号折叠在订阅号中,头像与名称不可更改。除了模版消息功能外,测试号拥有服务号所具有的功能。测试号可以使用一年!
微信公众平台接口测试帐号申请地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
点击登陆,会弹出一个二维码
打开手机微信扫一下
点击确认登陆,网页会自动跳转到如下
到了这里算是登陆成功,下面进行配置
URL配置
登录成功后会看到一个接口配置信息,这里就是与你服务器连接的设置。
填写接口配置信息,信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证。其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。
这里需要注意一点,怎么设置才可以使你的服务器能够正确的响应微信发送的Token验证。填写不正确会有如下提示:
点击窗口中的消息接口使用指南链接,选择新手指南里的接入指南
在文档中可以发现下面的内容
从上面可以看出,点击提交后微信会向我们填写的服务器发送几个参数,然后需要原样返回出来,所以在提交URL的时候,先在服务器创建接口测试返回echostr参数内容。代码:
//成为开发者url测试,返回echoStr
public void InterfaceTest()
{
string token = "填写的token";
if (string.IsNullOrEmpty(token))
{
return;
}
string echoString = HttpContext.Current.Request.QueryString["echoStr"];
string signature = HttpContext.Current.Request.QueryString["signature"];
string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
string nonce = HttpContext.Current.Request.QueryString["nonce"];
if (!string.IsNullOrEmpty(echoString))
{
HttpContext.Current.Response.Write(echoString);
HttpContext.Current.Response.End();
}
}
IT知识分享网
在一般处理程序ashx的ProcessRequest的方法内调用上面的方法,url填写的就是这个ashx的服务器地址,token是一个服务器标示,可以随便输入,代码中的token要和申请填写的一致,成为开发者才能做开发。
创建菜单
我们添加一些微信服务号,聊天窗口下面有些菜单,这个可以在开发模式代码配置。微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html,可以看到创建菜单的一些要点,下面的使用网页调试工具调试该接口
按照需求根据示例做好菜单后,在文档最下面可以发现:使用网页调试工具调试该接口
点击进入
你会看到需要一个access_token,关于access_token的获取说明:http://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html
翻到页面最后可以发现:使用网页调试工具调试该接口
点击进入
Appid跟secret可以在登陆的首界面找到
正确填入,点击检查问题
获取成功,图中所标示即为access_token
在自定义菜单网页调试工具中输入刚才获取到的access_token,输入自定义的body,微信界面示例
IT知识分享网{
"button" : [ { "name" : "状态", "sub_button" : [ { "key" : "Home_Temperature", "name" : "温湿度", "type" : "click" }, { "key" : "Home_Intensity", "name" : "光强", "type" : "click" }, { "key" : "Home_Battery", "name" : "电量", "type" : "click" } ] }, { "name" : "灯控制", "sub_button" : [ { "key" : "Light_One", "name" : "灯1", "type" : "click" }, { "key" : "Light_Two", "name" : "灯2", "type" : "click" }, { "key" : "Light_Threa", "name" : "灯3", "type" : "click" }, { "key" : "Light_Four", "name" : "灯4", "type" : "click" } ] }, { "name" : "其它", "sub_button" : [ { "key" : "Buzzer", "name" : "蜂鸣器", "type" : "click" }, { "key" : "Relay", "name" : "继电器", "type" : "click" }, { "key" : "DC_Motor", "name" : "直流电机", "type" : "click" }, { "key" : "Stepper_Motor", "name" : "步进电机", "type" : "click" }, { "type": "scancode_push", "name": "绑定设备", "key": "rselfmenu_0_1", "sub_button": [ ] } ] } ] }
点击检查问题
菜单创建成功。微信还提供了其他菜单操作,在开发者文档中有详细的说明,参考即可。
接受消息
微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/index.php?title=接收普通消息,我们使用微信就是要对用户发送的信息进行处理,这边以接受普通消息为例,语音、图片消息等,举一反三可得。
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。文本类型的推送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 >
我们在ashx添加下面代码:
IT知识分享网public void ProcessRequest(HttpContext param_context)
{
string postString = string.Empty;
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
Handle(postString);
}
}
}
/// <summary>
/// 处理信息并应答
/// </summary>
private void Handle(string postStr)
{
messageHelp help = new messageHelp();
string responseContent = help.ReturnMessage(postStr);
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
}
messageHelp是消息处理帮助类,获取的postString是xml,格式如上,我们这边只需要转换成XmlDocument进行解析就行了:
//接受文本消息
public string TextHandle(XmlDocument xmldoc)
{
string responseContent = "";
XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
if (Content != null)
{
responseContent = string.Format(ReplyType.Message_Text,
FromUserName.InnerText,
ToUserName.InnerText,
DateTime.Now.Ticks,
"欢迎使用微信公共账号,您输入的内容为:" + Content.InnerText + "\r\n<a href=\"http://my.csdn.net/sensiki\">点击进入</a>");
}
return responseContent;
}
/// <summary>
/// 普通文本消息
/// </summary>
public static string Message_Text
{
get {
return @"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{3}]]></Content>
</xml>";
}
}
上面的代码就是接受消息,并做一些处理操作,返回消息。
发送消息(图文、菜单事件响应)
这边发送消息我分为三种:普通消息、图文消息和菜单事件响应。普通消息其实上面说接受消息的时候讲到了。我们先看下图文消息和菜单事件响应,微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html
xml格式为:
<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 >
示例代码:
//事件
public string EventHandle(XmlDocument xmldoc)
{
string responseContent = "";
XmlNode Event = xmldoc.SelectSingleNode("/xml/Event");
XmlNode EventKey = xmldoc.SelectSingleNode("/xml/EventKey");
XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
if (Event != null)
{
//菜单单击事件
if (Event.InnerText.Equals("CLICK"))
{
if (EventKey.InnerText.Equals("click_one"))//click_one
{
responseContent = string.Format(ReplyType.Message_Text,
FromUserName.InnerText,
ToUserName.InnerText,
DateTime.Now.Ticks,
"你点击的是click_one");
}
else if (EventKey.InnerText.Equals("click_two"))//click_two
{
responseContent = string.Format(ReplyType.Message_News_Main,
FromUserName.InnerText,
ToUserName.InnerText,
DateTime.Now.Ticks,
"1",
string.Format(ReplyType.Message_News_Item, "sensiki博客", "",
"http://image.baidu.com/i?tn=....jpg",
"http://my.csdn.net/sensiki"));
}
}
}
return responseContent;
}
/// <summary>
/// 图文消息主体
/// </summary>
public static string Message_News_Main
{
get
{
return @"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>{3}</ArticleCount> <Articles> {4} </Articles> </xml> ";
}
}
需要注意的是:XmlNode Event = xmldoc.SelectSingleNode(“/xml/Event”)表示获取的是事件类型,XmlNode EventKey = xmldoc.SelectSingleNode(“/xml/EventKey”)表示事件标示,就是我们创建菜单添加click的key,通过key我们就可以判断出是点的哪个菜单。
还有一点是回复超链接,有时候在服务号会发送一些链接,我们打开直接就会链接到相关网址,只需要在回复内容中添加:
<a href="http:// dev.hqyj.com">点击进入</a>
就可以了。
生成带参数的二维码
这个功能实现比较简单,官方有比较详细的文档。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/12861.html