騰訊微信公衆平臺接口

微信公衆平臺是騰訊公司在微信的基礎上新增的功能模塊,經過這一平臺,我的和企業均可以打造一個微信的公衆號,並實現和特定羣體的文字、圖片、語音的全方位溝通、互動。
首先註冊一個微信公衆平臺帳戶,註冊地址:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm2-realname-reg&lang=zh_CN
註冊後登記了我的信息審覈後就能夠使用平臺了,登錄後進入高級功能開啓開發模式:如圖php

首次進入開發模式須要配置「接口配置信息」
須要Token驗證;微信

先去看看這個驗證的幫助指南,http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97
咱們定義一個MessageReceiveHandler.ashx通常處理程序來處理這個功能,微信公衆平臺

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tencent.WeiXin;
namespace Test
{
    /// <summary>
    /// MessageReceiveHandler 的摘要說明
    /// </summary>
    public class MessageReceiveHandler : IHttpHandler
    {

        private static readonly string Token = "中國.NET協會";
        public void ProcessRequest(HttpContext context)
        {
            if (context.Request.RequestType == "GET")//第一次Token驗證
            {
                if (CheckSignature(context))
                {
                    context.Response.Write(context.Request.QueryString["echostr"]);
                }
                return;
            }
            
            context.Response.Flush();
        }
        /// <summary>
        /// 加密/校驗流程:
        ///1. 將token、timestamp、nonce三個參數進行字典序排序
         ///2. 將三個參數字符串拼接成一個字符串進行sha1加密
        ///3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected virtual bool CheckSignature(HttpContext context)
        {
            List<string> list = new List<string>();
            list.Add(context.Request.QueryString["timestamp"]);
            list.Add(context.Request.QueryString["nonce"]);
            list.Add(Token);
            list = list.OrderBy(t => t).ToList();
            var sha1 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(list[0] + list[1] + list[2], "SHA1");
            var signature = context.Request.QueryString["signature"];
            return signature.Equals(sha1, StringComparison.OrdinalIgnoreCase);
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
MessageReceiveHandler


在來實現解析消息主題ide

/// <summary>
        /// 獲取一個<see cref="System.Xml.XmlDocument"/>對象,該對象表示消息的主體。
        /// </summary>
        public System.Xml.XmlDocument MessageXml { get { return myMessageXml; } }
/// <summary>
        /// 根據指定的key獲取主體中的文本值。
        /// </summary>
        /// <param name="key">要在主體中的獲取文本值的key。</param>
        /// <returns></returns>
        protected virtual string ReadValue(string key) 
        {
            return MessageXml.SelectSingleNode(string.Format("/xml/{0}", key)).InnerText;
        }
/// <summary>
        /// 初始化信息。
        /// </summary>
        protected virtual void Init() 
        {
            ToUserName=ReadValue("ToUserName");
            FromUserName = ReadValue("FromUserName");
            CreateTime =Convert.ToInt32(ReadValue("CreateTime"));
            Id = Convert.ToInt64(ReadValue("MsgId"));
        }
/// <summary>
        /// 把接收到的信息轉換成消息類。
        /// </summary>
        /// <param name="inputStream">收到的流。</param>
        /// <param name="encoding">流編碼。</param>
        /// <returns>根據xml類型建立的<see cref="MessageBase"/>對象。</returns>
        public static MessageBase Parse(Stream inputStream, System.Text.Encoding encoding)
        {
            MessageBase message = null;
            var length = inputStream.Length;
            var bytes = new byte[length];
            inputStream.Read(bytes, 0, bytes.Length);
            var text = encoding.GetString(bytes);
            System.Xml.XmlDocument xmlMessage = new System.Xml.XmlDocument();
            xmlMessage.LoadXml(text);
            var msgTypeNode = xmlMessage.SelectSingleNode("/xml/MsgType");
            switch (msgTypeNode.InnerText)
            {
                case "text": message = new TextMessage(xmlMessage); break;
                case "image": message = new ImageMessage(xmlMessage); break;
                case "location": message = new LocationMessage(xmlMessage); break;
                case "link": message = new LinkMessage(xmlMessage); break;
                case "event": message = new EventMessage(xmlMessage); break;
            }
            return message;
        }


其實看完騰迅提供的說明文檔後就以爲這個東西比較簡單了,我這裏不一一介紹了,我把源碼和示例上傳了,
 http://files.cnblogs.com/dotnet-org-cn/%E5%BE%AE%E4%BF%A1%E6%8E%A5%E5%8F%A3.rar測試

 測試微信公衆平臺帳戶編碼

相關文章
相關標籤/搜索