目录
一、微信公众号开发说明
二、微信公众号开发准备----域名和服务器
三、微信公众号正式开发
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、源码下载
验证的源码下载:源码下载