C#开发微信公众号(1)

目录
一、微信公众号开发说明
二、微信公众号开发准备----域名和服务器
三、微信公众号正式开发
3.1、微信开发原理
3.2、正式开发
3.2.1、配置微信官网服务器
3.2.2、开发者的响应方法
3.2.3、源码下载

一、 微信公众号开发说明

微信公众号可以到官网进行申请(官网)。目前微信公众号分为两类:订阅号、服务号。其服务的主体不一样。订阅号主要侧重于个人及内容提供者。而服务号侧重企业级用户,更加侧重功能及高级接口(例如,微信支付等),所以若是个人,只能申请订阅号,若是公司,订阅号和服务号都可以申请。另外,订阅号和服务号都有是否认证。因此微信公众平台共有:未认证订阅号、认证订阅号、未认证服务号、认证服务号四种情况。其权限和能够使用接口的也是逐渐增强和增多。
另外,个人主体申请的订阅号,目前微信不支持认证,所以个人的订阅号都是:未认证的订阅号。支持认证的全部为企业或单位。按腾讯的收费规则,认证费用是:300元/次/年。因为微信公众号的认证是由腾讯授权的第三方完成的,所以需要相关的认证费用。
不同类型的微信公众号,其权限的说明可以参见:官网说明
这儿有个坑,需要注意!想学习微信公众号开发的初学者,往往只能成为未认证的订阅号,而此类型的公众号的接口功能比较少,没法完成类似微信支付等高级功能开发及学习,所以这个地方是个坑。腾讯官网稍微填了点坑,推出了微信公众号的测试账号(微信测试账号),测试账号提供了部分功能,可以为开发者提供了一个功能稍微多点的账号,但是还是没有很多功能,所以说到底,还是一个坑。这儿要注意!
不过,好在微信公众号的开发触类旁通,基本上测试账号的功能开发的差不多,那其他的接口,虽没有用过,也能摸到门道,知道个123了。下面开始正式的微信公众号的开发

二、微信公众号开发准备----域名和服务器

微信公众号的开发需要服务器的支持。目前分为两种:一种是通过外网穿透工具,将自己电脑的IP地址暴露到公网,供外部访问。另一种是采用正式的服务器租赁。前者省钱、费事、IP、域名经常换;后者稳定、省事儿、花点钱。建议初学者使用第一种方案,先用自己的电脑作为服务器练练手进行开发。若怕麻烦,可以网上租个服务器(阿里云、百度云等),若有了正式的服务器,那还需要申请一个域名。
这儿有两个坑,提前说一下。若到网上租用服务器,需要看一下是否为固定IP地址。当用户点击你的微信公众号后,微信会将相关的内容推送到指定的服务器的IP地址及端口上。若租用的服务器,IP地址是非固定的,则你需要在你的微信公众号上的IP地址白名单中将服务器的IP地址添加,并且可能会随时变化,不过好在只是进行开发学习,没有实际业务,对实际不造成影响,只是稍微麻烦点。当微信服务器返回的代码标识IP地址不在白名单时,需要登录公众号,将此时的IP地址添加到白名单中
第二个坑是域名申请中的,其实也不算坑,只是域名备案时间比较长。域名申请完后,需要向政府备案,一般域名提供商也提供备案协助服务,按要求准备材料即可。唯一一点,办理时间比较长,一般备案周期在20个工作日左右。有可能短,也有可能长。有了域名和服务器后,就可以正式开始微信公众号的开发了。

三、微信公众号正式开发

3.1、微信开发原理

微信公众号的原理如下图所示:
微信公众号的原理示例
当用户在微信客户端发起一个请求后(例如:在公众号里的输入一些文字),微信客户端会将请求传送到微信官网服务器(如上图中1所示)。当微信官网服务器收到这个请求后,会将用户的请求组成规定的格式,然后转发给开发者服务器(如图2所示)。开发者服务器经过处理后,会将返回的内容,按照微信指定的格式,返回给微信服务器(如图3所示)。最后微信官网服务器会将返回的内容,返回至微信客户端(如图4所示)。这样,整个过程就完成。其实,完全可以这么理解,微信服务器就是一个前端工程师,提前把方法写好了,你作为后端的开发者,需要按照前端工程师的方法参数,进行处理,并返回结果。
另外,微信官网服务器不仅仅是转发请求,它还是一个服务器。这意味着,它不仅仅能接受到微信客户端发出的请求,它还可以接受开发者服务器发出的请求,并作出响应。例如:你希望自定义开发自己公众号的菜单功能,所以你可以按照规定的格式组织完菜单数据后,通过你的服务器将菜单设定数据(JSON类型)发送到微信官网的服务器,那么你的微信公众号就会展现出你设定的菜单。原理图如下图所示
上传设定的微信服务器

3.2、正式开发

说了这么多,开始正式进入开发。
本人的开发环境:win10,vs2017社区版,服务器端使用ASP.NET MVC5

3.2.1、配置微信官网服务器

进行微信开发第一步,就是要让微信官网服务器“承认/认证”开发者的服务器。就是最上面开发原理图中的步骤2,就是微信服务器收到消息后,要转发到你的服务器,首先得需要保证它的承认你!具体步骤如下所示
进入微信公众号后,在左侧菜单栏中找到:开发—>基本配置。
基本配置
进入界面后,找到基本配置,填写服务器配置的界面。如下图所示:
验证内容截图
这里面填写的参数,就是要进行微信官网验证你服务器的相关配置。下面逐项说明各参数的含义:
URL:这个参数就是微信服务器将请求转发到开发者服务器的URL。这个URL只允许有一个。所以隐含的含义就是:微信服务器会将所有的请求数据统一转发到这个URL上(也就是开发者服务器上某个特定的方法)。所以开发者必须在这个方法内部完成所有类型的消息处理。
Token:这个可自定义填写。
Encod:这个可自定义填写。
填写完以上的信息后,点击右下角的提交按钮,微信官网服务器就会向指定的服务器发出一个GET请求,开发者服务器需要处理该请求,并返回处理后的内容。

3.2.2、开发者的响应方法

在MVC的Controller中实现对请求的处理,实现方法如下:

        public ActionResult BTCHWeChat()
        {
            #region 验证代码
            string token = "zhenglin";
            if (string.IsNullOrWhiteSpace(token))
            {
                return null;
            }

            string echoStr = Request.QueryString["echoStr"];//随机字符串 
            string signature = Request.QueryString["signature"];//微信加密签名
            string timestamp = Request.QueryString["timestamp"];//时间戳 
            string nonce = Request.QueryString["nonce"];//随机数 
            string[] ArrTmp = { token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
            tmpStr = tmpStr.ToLower();
            if (tmpStr == signature)
            {
                return Content(echoStr);
            }
            else
            {
                return Content("");
            }
            #endregion
        }

此处需要注意的地方:我填写的URL是:http://www.xxxx.com/Home/BTCHWeChat。这儿要注意好对照。
之后,将自己的代码发布到服务器上,然后在微信官网上点击提交按钮,就能验证通过!

3.2.3、源码下载

验证的源码下载:源码下载

C#版的微信公众号开发SDK Senparc.Weixin.MP几个关键类介绍如下: Entities/Request*.cs 用于接收微信平台自动发送到服务器的实体(发送过来的是XML),包括文本、位置、图片三类 Entities/Response*.cs 用于反馈给发送人的信息实体(最终会转成XML),包括文本、新闻(图文)两类 Helpers/EntityHelper.cs 用于实体和XML之间的转换(由于其中有许多需要特殊处理的字段和类型,这里不能简单用XML序列化) Helpers/MsgTypeHelper.cs 用于获取消息类型 CheckSignature.cs 验证请求合法性类 Enums.cs 各种枚举 RequestMessageFactory.cs 用于自动生成不同Request类型的实体,并作必要的数据填充 Senparc.Weixin.MP几个关键类及重要方法(按一般使用过程排序) 生成验证字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根据微信平台提供的数据,SHA1加密后的验证字符串(注意token必须跟公众平台的设置一直) 验证请求:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),验证请求是否合法 获取请求实体:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根据不同请求的类型,自动生成可用于操作的实体(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是请求枚举类型。 进行判断及各类操作。 根据需要,创建响应类型的实体,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本类型信息。 由于目前微信只接受XML的返回数据,所以在返回之前还需要做一次转换:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString =responseDoc.ToString();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值