微信公衆平臺簡易設計使用

微信公衆平臺設備功能是微信爲服務號提供的物聯網解決方案,設備功能建立在微信硬件平臺之上。設備功能允許硬件設備廠商通過服務號,將用戶與其擁有的智能設備相連。

通過微信硬件平臺規定的連接協議,各種智能設備如藍牙設備、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();
    }
}

在一般處理程序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,微信界面示例

{
   "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添加下面代碼:

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>

就可以了。

生成帶參數的二維碼

這個功能實現比較簡單,官方有比較詳細的文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章