c#实现微信公众号开发--接入
2012年从微信公众号一推出就开始跟进研究,中间很多年因为工作岗位变动不再涉及编程,但作为业余爱好,兴趣一直没变,现总结几篇关于微信公众号开发的实现,帮助新手,同时也便于自己回顾。自己做微信公众好管理平台的框架相对内容较多,这里只给出部分关键功能的实现。
一、首先注册公众号,根据性质不同可以选择订阅号、服务号、企业号,开放接口按照前面顺序是由少到多,根据自己需要来选择类型。注意选择用企业注册,尤其后两种类型不能用个人。
二、对申请的公众号认证,可以获取开放接口。每年认证费300元。
三、搞一个自己的公网主机,搭建web服务器,根据个人习惯的语言来定服务器类型,这里用的iis,ASP.NET。申请个域名并备案,使用云主机的情况下,这个需要的投入较早期降低很多,每年2000元就可以起步啦。
四、登录公众号后,在开发的基本配置中进行设置,需要指定服务器地址,本例http://....../index.aspx。对应的服务器端主要代码如下:
index.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="_Default" %>
index.aspx.cs
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Data.SqlClient;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Xml;
using System.Text;
using System.Net;
using TextDeal;
using EventDeal;
public partial class _Default : System.Web.UI.Page
{
const string Token = "weixin"; //你的token,和服务器地址配置中一致即可
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
string postStr = "";
//Valid(); //服务器配置时需要打开,验证通过后可删除此行代码
if (Request.HttpMethod.ToLower() == "post")
{
Stream s = System.Web.HttpContext.Current.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
postStr = Encoding.UTF8.GetString(b);
if (!string.IsNullOrEmpty(postStr))
{
ResponseMsg(postStr);
}
}
}
/// <summary>
/// 返回信息结果(微信信息返回)
/// </summary>
/// <param name="weixinXML"></param>
private void ResponseMsg(string weixinXML)
{
//回复消息的部分:你的代码写在这里
XmlDocument doc = new XmlDocument();
doc.LoadXml(weixinXML);
XmlNodeList list = doc.GetElementsByTagName("xml");
XmlNode xn = list[0];
string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText; //关注用户的加密后openid
string ToUserName = xn.SelectSingleNode("//ToUserName").InnerText; //公众微信号原始ID
string MsgType=xn.SelectSingleNode("//MsgType").InnerText;
if(MsgType == "text")
{
/*TextMessageDeal tmd=new TextMessageDeal();
Response.Write(tmd.DealResult(weixinXML));*///实现不同关键词不同处理的类
string strresponse = "<xml>";
strresponse = strresponse + "<ToUserName><![CDATA[" + FromUserName + "]]></ToUserName>";
strresponse = strresponse + "<FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>";
strresponse = strresponse + "<CreateTime>" + DateTime.Now.Ticks.ToString() + "</CreateTime>";
strresponse = strresponse + "<MsgType><![CDATA[text]]></MsgType>";
strresponse = strresponse + "<Content><![CDATA[" + "你好,欢迎关注" + "]]></Content>";
strresponse = strresponse + "<FuncFlag>0<FuncFlag>";
strresponse = strresponse + "</xml>";
Response.Write(strresponse);
}
else if(MsgType == "image")
{
//关注用户发送图片时的自动回复处理
}
else if(MsgType == "event")
{
EventMessageDeal tmd=new EventMessageDeal(); //用户关注和取关等事件处理类,测试的可以去掉
Response.Write(tmd.DealResult(weixinXML));
}
}
/// <summary>
/// 验证微信签名
/// </summary>
/// * 将token、timestamp、nonce三个参数进行字典序排序
/// * 将三个参数字符串拼接成一个字符串进行sha1加密
/// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
/// <returns></returns>
private bool CheckSignature()
{
string signature = Request.QueryString["signature"].ToString();
string timestamp = Request.QueryString["timestamp"].ToString();
string nonce = Request.QueryString["nonce"].ToString();
string[] ArrTmp = { Token, timestamp, nonce };
Array.Sort(ArrTmp); //字典排序
string tmpStr = string.Join("", ArrTmp);
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
if (tmpStr.Equals(signature))
{
return true;
}
else
{
return false;
}
}
private void Valid()
{
string echoStr = Request.QueryString["echoStr"].ToString();
if (CheckSignature())
{
if (!string.IsNullOrEmpty(echoStr))
{
Response.Write(echoStr);
Response.End();
}
}
}
}
至此,公众号开发的自动回复接口已经对接上啦,简单吧,并不是想象中那么难。
更多推荐

所有评论(0)