微信公众号开发教程(一) 验证接入

作者:陈惠,叩丁狼教育高级讲师。原创文章,转载请注明出处。

微信公众号开发教程(一)验证接入

本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。

公众号的分类

我们平常在微信应用上会看到有很多的公众号,但是各自并不一样,公众号也分很多种类型,不过最常见的就是服务号和订阅号了。下面我们来看一下他们的区别:

1、订阅号
为媒体和个人提供一种信息传播方式,主要偏于为用户传达资讯(类似报纸杂志),主要的定位是阅读,每天可以群发1条消息;

2、服务号
为企业,政府或组织提供对用户进行服务,主要偏于服务交互(类似银行提供服务查询),每个月只可群发4条消息;

3、企业微信(企业号)
为企业,政府,事业单位,实现生产管理和协作运营的移动化,主要用于公司内部通讯使用,旨在为用户提供移动办公,需要先有成员的通讯信息验证才可以关注成功企业微信;

通过以下图片我们可以更清晰的看出不同公众号的区别:

分类.jpg
区别.jpg

还有一个比较明显的区别就是,订阅号都是存放在一个名叫订阅号的文件夹中,点开才能看到所有关注过的订阅号,但是服务号却和好友一样直接就显示在聊天列表中。这个大家打开微信客户端便能看到。

如果大家有需要申请公众号的,要根据实际需求考虑清楚应该申请哪一种公众号
以下是官方给出的建议,大家可以多参考参考

1)如果想简单的发送消息,达到宣传效果,建议可选择订阅号;
2)如果想用公众号获得更多的功能,例如开通微信支付,建议可以选择服务号;
3)如果想用来管理内部企业员工、团队,对内使用,可申请企业号;
4)订阅号可通过微信认证资质审核通过后有一次升级为服务号的入口,升级成功后类型不可再变;
5)服务号不可变更成订阅号。

4.测试号(用于开发测试及功能体验)
这种是平常普通用户是涉及不到的,是专门为开发人员准备的一种仅用于测试的公众号。

由于用户体验和安全性方面的考虑,微信公众号的注册有一定门槛,某些高级接口的权限需要微信认证后才可以获取。所以,为了帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,微信推出了公众帐号测试号,无需公众帐号、快速申请接口测试号,通过手机微信扫描二维码即可获得,利用测试号我们可以体验和测试更多高级功能。

申请地址:
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

但测试号也不是万能的,部分高级功能,如微信支付,卡券功能等也是不开放的。
如果要实现支付功能还是得去注册个正式的公众号。

微信公众平台:

我们注册的公众号都可以在这个平台上进行管理,比如想弄一些自定义菜单,或者自动回复,或者平常推送的文章,都可以在这上面操作。

平台地址:
http://mp.weixin.qq.com

平台中分为两种管理模式:

平台提供了两种管理模式给我们,应该根据我们的需求来选择使用不同的模式。

下面我们来了解一下,两种模式的区别:

编辑模式

主要针对非编程人员及信息发布类公众帐号使用。
开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。
好处是可视化界面配置,操作简单,快捷,但是功能有限。

开发模式

主要针对具备开发能力的人使用。
开启该模式后,能够使用微信公众平台开放的接口,但是编辑模式的设置会失效,比如“自定义菜单”和“自动回复的消息”功能。通过编程方式可以实现更多复杂的功能,提供个性化服务。

总的来说,编辑模式就是为所有人提供的,如果你的需求仅仅只是最常见的菜单,自动回复等,使用编辑模式已经满足,但是如果你需求的功能比较复杂,有很多很多的想法,就需要使用到开发模式。

下面我们来学习一下,怎么使用这个开发模式。

开发模式配置流程

1.登录测试号页面,可以看到该测试号相关的信息

就是使用电脑打开http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
使用微信扫一扫二维码,即可在打开的页面中看见微信给你分配的测试号的相关信息。

下面两个属性是唯一的标识,每个测试号都会有自己的appid与appsecret ,是比较重要的信息,不要随意发给别人。

appid:是公众号开发识别码,配合开发者密码可调用公众号的接口能力。
appsecret:是校验公众号开发者身份的密码,具有极高的安全性。

测试号信息.png

如果是正式的公众号,登录公众平台官网之后,找到“基本配置”菜单栏也可以获取上公众号相关的信息。

2.配置参数介绍

再往下看,我们会看到URL和Token这两个属性,和上面appid/appsecret不同的是,上面的是微信分配给我们的,但是下面这两个是需要我们填进去的。

我们先来了解一下,这两个属性有什么作用。

URL:就是指我们自己的服务器地址
该URL是开发者用来接收和响应微信消息和事件的接口URL
(必须以http://或https://开头,分别支持80端口和443端口)

Token:可任意填写,用作生成签名(必须为英文或数字,长度为3-32字符)
该签名在后边会用到,这里暂时随便填个内容也可以

接口信息配置.png

接下来我们需要了解的是微信与我们的服务器交互的过程:

当我们在微信app上,给公众号发送一条内容的时候,实际会发送到微信的服务器上,此时微信的服务器就会对内容进行封装成某种格式的数据比如xml格式,再转发到我们配置好的URL上,所以该URL实际就是我们处理数据的一个请求路径。所以该URL必须是能暴露给外界访问的一个公网地址,不能使用内网地址,生产环境可以申请腾讯云,阿里云服务器等,但是在开发环境中可以暂时利用一些软件来完成内网穿透,便于修改和测试,如NATAPP,花生壳等软件,使用起来也很方便,在本地安装对应的软件,配置运行后,直接使用软件分配的临时域名来访问本地应用即可,只是偶尔会存在网络不稳定的情况。这里不详细介绍如何使用了,具体教程可参考软件官网。

交互流程.png

在开发的过程中,我们会经常使用到微信公众号提供给开发者的开发文档
具体地址:https://mp.weixin.qq.com/wiki
大家打开后可以选择"接入指南",参考微信提供的一些帮助信息。

3.搭建本地应用(java/python/php等语言均可)

基本概念都了解过后,我们马上就要开始开发了,因此需要先提供好一个应用,接下来就可以在该应用上添加公众号相关的功能了。

本文项目使用java语言,SpringMVC+Spring+MyBatis框架

4.URL接入验证

我们需要先来了解一下接入的过程是怎么样的。下图是微信官方对接入过程的介绍。

图片.png

由以上介绍可知,当我们填入url与token的值,并提交后,微信会发送一个get请求到我们填写的url上,并且携带4个参数,而signature参数结合了开发者填写的token参数和请求中的timestamp参数、nonce参数来做的加密签名,我们在后台需要对该签名进行校验,看是否合法。实际上,我们发现微信带过来的4个参数中并没有带token参数,仅有signature是和token有关的,所以我们应该在本地应用中也准备一个和填入的token相同的参数,再通过微信传入的timestamp与nonce做相同算法的加密操作,若结果与微信传入的signature相同,即为合法,则原样返回echostr参数,代表接入成功,否则不做处理,则接入失败。

详细流程可参考微信官方提供的逻辑流程图,我们的应用需要以该流程图的步骤来实现。

图片.png

代码示例:

@Controller
public class WeChatController {
        /**
         * 微信URL接入验证
         * @param signature
         * @param timestamp
         * @param nonce
         * @param echostr
         * @return
         */
        @RequestMapping(value="/weChat",method= RequestMethod.GET)
        @ResponseBody
        public String validate(String signature,String timestamp,String nonce,String echostr){
            //1. 将token、timestamp、nonce三个参数进行字典序排序
            String[] arr = {timestamp,nonce,WeChatUtil.TOKEN};
            Arrays.sort(arr);
            //2. 将三个参数字符串拼接成一个字符串进行sha1加密
            StringBuilder sb = new StringBuilder();
            for (String temp : arr) {
               sb.append(temp);
            }
            //3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
            if(SecurityUtil.SHA1(sb.toString()).equals(signature)){
                //接入成功
                return echostr;
            }
            //接入失败
            return null;
        }
}

备注:

  1. 代码中WeChatUtil.TOKEN是一个常量,常量值必须要和我们在页面上填入的token值相同,通常可以抽取到配置文件中来注入值比较灵活。
    2.SecurityUtil是一个工具类,提供了sha1加密的方法。

接入成功后即可根据开发文档实现一些小案例了。文章暂时使用的是测试号来做开发,后续有些高级功能权限不够可能会改成正式公众号来进行开发。

WechatIMG7.jpeg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容