今天开始打算写一个系列,帮助.NET小白一步步实现自己的微信公众号开发。在这里首先感谢一个至铁的朋友,这么多年来免费为我提供私人学习实验环境(单位虽然也有条件做这些事,但是公私要分明,个人爱好坚决不能使用任何一点公司资源,也坚决不占用任何一点上班时间),作为回报,本系列技术类文章也是通过介绍为他免费开发的一个微信公众号支撑服务而展开的,如果觉得本系列文章对您有所触动和帮助,烦请帮关注一下该公众号(本贴左侧或文章尾部位置),算是对我这个朋友的支持,也算是对我坚持写作的鼓励,当然公众号上面确实也有很多实实在在的生活优惠。

正式讲解公众号开发之前先声明一点:为了更好的帮助初学者快速上手,本系列文章重在了解业务流程,没有采用复杂的框架来实现,不然光接口、继承就容易把人搞晕了,实现业务还是面向过程的思维更容易被理解,所以虽然写的过程中也用到了不少类,但基本都是单层的,没有多重继承,源代码都公开,拿去就可以用。

今天讲第一篇:如何接入微信公众号。以前发过一篇帖子,不过只有代码,没有详细的关联步骤讲解,今天用图文并茂的方式来做全面细致的讲解。

一、准备服务器
1.准备一台可以互联网接入的服务器,配置好IIS和.NET运行环境,我这里用的是win2008 server,IIS 7.0,.NET 4.5,记得要用80端口,微信公众号接口只认80端口。
2.准备一个已经备案过的域名,并指向上面的web服务器地址。

二、申请公众号
1.申请
建议申请服务号,因为开放的接口多,侧重于线上服务,这里用的就是服务号。打开https://mp.weixin.qq.com/,点击“立即注册”进入注册页面,类型选择服务号,按提示完成公众号注册,如下图:

2.认证
注册后进行一下微信认证,可以获取更多的服务接口,也是后续的微信支付的基本条件,登录后在下面图示位置可以进行认证,每年300元认证费,需要一周左右时间能完成,如下图:

3.配置
准备好以上手续后,现在可以配置和获取公众号开发必须的参数了。首先是域名信息,在获取各类公众号信息时如果没有这个前提会提示没有权限。

通过上图的配置和查询,我们可以获取到以下几个重要参数,在后面所有开发中都会用到:
Token 
AppId 
AppSecret 
EncodingAESKey
,这个如果使用明文方式来开发则用不到。

.查看接口权限

三、接入公众号后台
1.架设web服务目录
上面有两个目录是固定名字不能改变的,一个是App_Code目录,用来存放你写的所有类的源码,一个是Bin目录,用来存放你写的类的编译后的.dll文件,同一个类要么用源码,要么用编译后的.dll文件,不能重复存放,为了便于查看和修改,我这里对自己写的类没有使用.dll,都是用源码方式放在App_Code目录中。
wx目录主要用于微信接口开发的各类页面和源码。

2.把必须用到的微信接口参数写入配置文件,我这里用的是一个类的静态成员变量来实现,如果将来编译了,这些关键信息就可以起到很好的保密效果。我用的数据库是sql server,因为在windows系统上,和操作系统、IIS搭配起来效率最好的就是它了,凡事都要评价效率。
QinMingConfig.cs文件内容如下:

using System;namespace QinMing.Config
{/// <summary>/// Config 的摘要说明/// </summary>public class QinMingConfig{public QinMingConfig(){//// TODO: 在此处添加构造函数逻辑//}/// <summary>/// Sql Server 数据库连接串/// </summary>public const string DatabaseConnStr = "Data Source=sql server source;Initial Catalog=your database name;User ID=username;Password=password"; /// <summary>/// 微信公众号接入参数/// </summary>public const string Weixin_Token = "yourtoken";public const string Weixin_AppId = "wx.........";public const string Weixin_AppSecret = "e5xxxxxxxxxxxxxxxxxxx";public const string EncodingAESKey = "J1vxxxxxxxxxxxxxxxxxxxxxxx";/// <summary>/// 请求超时设置(以毫秒为单位),默认为10秒。/// 说明:此处常量专为提供给方法的参数的默认值,不是方法内所有请求的默认超时时间。/// </summary>public const int TIME_OUT = 10000;//以后用到的参数以后补上}}

3.现在进入最重要的一个环节,与微信公众号对接,首先继续看之前的公众号开发基本设置页面,在你的接口代码没有写好并且能正常工作之前,这个网址是配置不成功的。

接口页面很简单,如下:

AccessWx.aspx源码

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="AccessWx.aspx.cs" Inherits="Jjlm.AccessWx" %>

AccessWx.aspx.cs源码

using System;
using System.Web;
using System.Web.Security;
using System.IO;
using System.Xml;
using System.Text;
using QinMing.Config;
//using QinMing.WeixinMessageHandler;
//using QinMing.Tools;namespace Jjlm
{public partial class AccessWx: System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");string postStr = "";if (Request.HttpMethod.ToLower() == "get"){Valid();  //首次接入时会验证你的服务器是否能对接上}else{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;   //关注用户的加密后openidstring ToUserName = xn.SelectSingleNode("//ToUserName").InnerText;       //公众微信号原始IDstring MsgType=xn.SelectSingleNode("//MsgType").InnerText;//将微信服务器推送的信息保存到log文件中,以便跟踪分析问题//QinMingTools.WriteLog("公众号推送内容", ConvertXmlToString(doc));if(MsgType == "text"){//文本消息处理部分}else if(MsgType == "image"){//图片消息处理部分}else if(MsgType == "voice"){//语音消息处理部分}else if(MsgType == "video"){//视频消息处理部分}else if(MsgType == "shortvideo"){//小视频消息处理部分}else if(MsgType == "location"){//位置消息处理部分,与事件中的位置消息不同,是指用户主动向公众号发送位置,专门篇章讲解     }else if(MsgType == "link"){//链接消息处理部分}else if(MsgType == "event")  {//事件消息处理部分string Event = xn.SelectSingleNode("//Event").InnerText;if(Event == "LOCATION"){//位置消息处理}else if(Event == "CLICK"){//点击菜单消息处理}else if(Event == "VIEW"){//打开菜单链接时触发的动作处理}else{//其他类型消息处理,如关注公众号、取消关注、扫描带参数的二维码}}}/// <summary>/// 将XmlDocument转化为string/// </summary>/// <param name="xmlDoc"></param>/// <returns></returns>public string ConvertXmlToString(XmlDocument xmlDoc){MemoryStream stream = new MemoryStream();XmlTextWriter writer = new XmlTextWriter(stream, null);writer.Formatting = Formatting.Indented;xmlDoc.Save(writer); StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8);stream.Position = 0;string xmlString = sr.ReadToEnd();sr.Close();stream.Close(); return xmlString;}/// <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 = { QinMingConfig.Weixin_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;}}/// <summary>/// 首次接入微信后台时验证/// </summary>private void Valid(){string echoStr = Request.QueryString["echoStr"].ToString();if (CheckSignature()){if (!string.IsNullOrEmpty(echoStr)){Response.Write(echoStr);Response.End();}}}}}

至此,你的服务器与微信公众号的后台就完成了对接,可以使用很多的接口功能了,你GET到了么,如果感觉有收获,请来个赞。下篇介绍文本消息处理,敬请关注。

实例:用C#.NET手把手教你做微信公众号开发(1)--接入相关推荐

  1. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...

  2. 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...

  3. 实例:用C#.NET手把手教你做微信公众号开发(22)--网页里通过OAuth获取用户openid

    第一篇:理论 如果一个用户并未关注某个公众号,只是在微信内打开了公众号web服务器上的某个网页,要如何获取用户的openid以及用户的微信信息,以便实现业务逻辑呢?本篇讲述网页授权OAuth获取微信用 ...

  4. 实例:用C#.NET手把手教你做微信公众号开发(3)--普通消息处理之图片

    本着简短.便于理解应用的原则,本系列文章每次只讲一个公众号知识点,给出一个应用实例,通过一个知识点帮助你掌握公众号一类应用的开发方法. 上一篇我们掌握了微信客户端.微信服务器.你的服务器之间的信息互动 ...

  5. 实例:用C#.NET手把手教你做微信公众号开发(19)--使用微信支付转账到微信粉丝零钱账户

    公众号给微信用户支付费用的方式有很多种,最常用的是发红包和转账到零钱账户,上一篇文章详细讲解了使用发红包的过程,从公众号内的配置,到微信支付的配置,再到具体的类实现. 本篇主要讲解转账到零钱,具体的类 ...

  6. 实例:用C#.NET手把手教你做微信公众号开发(13)--事件消息处理之取消关注

    一.取消关注事件 用户在取消关注公众号时,微信会把这个事件推送到开发者填写的URL,方便开发者做帐号的解绑等处理. <xml><ToUserName><![CDATA[t ...

  7. 实例:用C#.NET手把手教你做微信公众号开发(12)--带参数二维码裂变推广

    为什么能裂变推广是营销学和心理学的范畴了,这里举个简单的例子来介绍.公众号有足以吸引粉丝的地方,要么是知识.要么是优惠.要么是服务,反正不同于其他人,能够吸引人关注:有了这个前提,怎么让更多的人知道这 ...

  8. 实例:用C#.NET手把手教你做微信公众号开发(11)--生成带参数二维码

    上一篇讲了普通关注的各种情景,接下来准备详细讲解带参数的二维码的应用实例.在下一篇详解之前,这里先介绍一下如何下载二维码.生成二维码表,为后续的应用做好准备. 为了满足用户渠道推广分析和用户帐号绑定等 ...

  9. 实例:用C#.NET手把手教你做微信公众号开发(10)--事件消息处理之关注公众号(普通关注)

    一.事件消息种类 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后 ...

  10. 实例:用C#.NET手把手教你做微信公众号开发(6)--普通消息处理之视频、小视频

    本篇讲解微信客户端向公众号发送视频和小视频的处理方式. 视频消息常见应用: 在线教学: 基于公众号的定向类型小视频应用,类似于抖音.快手,但不用再安装app: 视频剪辑.特效添加,比如美颜: 其它视频 ...

最新文章

  1. add_table和 add_column
  2. php aapt apk 包名,aapt 命令可应用于查看apk包名、主activity、版本等很多信息
  3. wxWidgets:wxLocale类用法
  4. python-列表list和元组tuple
  5. javascript中构造函数的说明
  6. 原生JS动态计算输入框文本内容的宽度,当内容宽度超过输入框的宽度时可控
  7. linux 内核级资源查看,Linux资源管理
  8. ols残差_涨知识丨OLS原理的矩阵方法很难?Just So So
  9. mysql-索引操作
  10. 【BZOJ4199】品酒大会,后缀数组+并查集维护
  11. javax.servlet.http.HttpServlet was not found
  12. ylbtech-LanguageSamples-Indexers_2(索引器)
  13. [译] libvirt 虚机的生命周期 (Libvirt Virtual Machine Lifecycle)
  14. Win10 技巧:让任务栏时间显示 “秒”
  15. 《Spring Boot极简教程》 第6章 Springboot数据库集成
  16. java servlet面试题_JavaWeb之JSP和servlet面试题附答案
  17. #UML# Astah+Doxygen 将C++源码映射为类图
  18. CBDB中国历代人物历史可视化系统
  19. php电商订单模块设计,电商后台订单管理模块
  20. Android Studio报错Could not find any version that matches com.android.support:appcompat-v7:33.+.

热门文章

  1. TAOCP-Reading-计算机程序设计艺术阅读-1-4
  2. (附源码)小程序 记账微信小程序 毕业设计 180815
  3. java jxls_java使用jxls导出Excel
  4. 现代密码学中的数论基础知识梳理
  5. 用freeswitch建立呼叫中心系统的经验
  6. 区块链ppt资料准备
  7. HTML 表格滚动锁定表头,实现固定行列
  8. php集成paypal接口,PayPal接口集成之:PHP集成PayPal标准支付接口
  9. 485终端电阻的重要性
  10. 物联网导论知识部分梳理