基于微信公众平台的应用系统开发模式研究
2016-10-18万春旭
万春旭
【摘 要】本文在介绍微信公众平台的类型与功能的基础上,同时给出了微信公众平台的申请与认证方法,重点论述了公众平台的开发模式与关键技术,包括消息响应模式、安全认证机制、消息封装与解析及自定义菜单的实现方法等主要内容。
【关键词】微信;公众平台;应用系统
微信,简称weChat。是时下最受关注的移动互联网产品。经过几年的发展,微信的注册用户数已超过6亿,成为移动互联网最重要的入口之一。
微信公众平台(以下简称“公众平台”),曾命名为“官号平台”和“媒体平台”,最终定位为“公众平台”。公众平台又可以分为三种类型:服务号、订阅号和企业号。订阅号,主要是为用户提供信息推送业务。服务号旨在为用户提供功能性服务,它可以自定义菜单并进行应用功能开发。企业号旨在帮助企业、政府机关、学校、医院等事业单位和非政府组织建立与员工、上下游合作伙伴及内部IT系统间的连接,并能有效地简化管理流程、提高信息的沟通和协同效率、提升对一线员工的服务及管理能力。
基于公众平台的应用系统开发,这几年得到了大家的追捧,发展迅猛。与传统的移动端APP比较,公众平开发有以下几个方面的优势:
(1)公众平台应用与APP能实现的功能基本相同;
(2)公众平台开发与平台无关,不用针对android与ios分别开发;
(3)公众平台推广简单,用户粘性大。只要提供二维码,用户扫描关注就能完成操作;
(4)公众平台的开发与维护成本低。
基于上面这些优点,目前公众平台开发成为软件业的一项发展最快的业务。
1 微信公众平台开发
微信公众平台开发是指,把企业推广和管理业务从传统的媒体和互联网移植到微信公众平台中,节省推广成本、增加用户粘性、方便客户操作。比较成功的应用案例有招商银行、南方航空、华为运动健康、广州公安等。
1.1 微信公众平台开发准备
企业要在开始着手公众平台开发以前,必须做好以下几个方面的准备工作。
1.1.1 申请企业独有的服务号或企业号
公共号申请分两个阶段完成。第一阶段:到微信公众号官网注册账号。注册时需要提供一个在用的电子邮箱、注册人身份证号、注册人手拿身份证的照片。注册信息需要经过腾讯公司审核,一般需要1~2天。这样注册的号只是个订阅号,只有信息推送功能,无法进行后台开发。第二阶段:账号认证,通过认证的公众号才是服务号或企业号。服务号和企业号才能进行深入的后台功能开发。账号认证需要提供企业营业执照、机构代码和企业的银行账号等信息,一次认证的费用为300元,有效期1年,一个企业(单位)最多可以认证5个公众号。在进行公众号功能开发时,可以提前对5个号的功能做好规划。公众号不针对个人开发。
1.1.2 租用与开发技术相符合的服务器
基于公共平台的应用系统需要不断地与微信服务器通讯,系统必须部署在接入Internet的网服务器上。选择服务器种类时,需要与系统的开发技术相配套,主要参考开发语言、数据库类型、将来的用户规模、系统维护方式等多方面。
1.2 微信公众平台开发模式
微信公众平台开发的主要依据是腾讯公司提供的“公众平台开发者文档”,这个文档随着微信版本的提升,内容也不断在更新完善。公众平台开发与传统的软件开发在模式上有很大的区别,公众平台开发类似与基于网络的编程,下面是公众平台开发模式的介绍。
1.2.1 消息的接收与响应模式
消息的接收与响应是用户与公共平台之间最常用的一种交互方式。参与消息交互的实体主要有3个:用户、微信服务器和公众账号服务器,这三者之间的消息交互流程如图1所示。
1)接收消息
当微信用户向公众号发消息时,微信服务器将POST消息的XML数据包发送到开发者填写的URL上。
2)发送消息
对于每一个POST请求,开发者在响应包中返回特定XML结构,并对该消息进行响应(支持回复文本、图片、图文、语音、视频、音乐)。
图1 公众平台的消息交互流程
1.2.2 消息结构的封装与处理
微信服务器与公众账号服务器交互的消息可分为3类:请求消息、事件和响应消息。微信服务器对每种消息数据采用XML格式封装。微信API文档给出了每一种消息的详细XML结构。下面给出的是文本消息的XML格式。这个XML文档中封装了消息的发送者、消息的接收者、消息创建时间、消息类型、消息内容、消息ID等信息。
各种编程语言都有现成的框架来完成XML格式文件的封装与解析。Java语言中最常用的XML处理开源框架有Dom4j和XStream,下面这段代码为XStream解析XML的核心代码。其他功能的具体实现方法可查找相关资料。
Map
InputStream is = request.getInputStream();//从请求中取得字节流格式的XML文件
SAXReader reader = new SAXReader;//生成一个用于SAXReader对像,该对象用于解析XML文档
Document document = reader.read(is);//把字节流格式的XML文件,解析成标准格式的XML文档
Elment root = document.getRootElement();//得到XML根元素
List
for(Element e : elementList )
map.put(e.getName(),e.getText());
is.close();
is = null;
2 获取接口访问凭证
公众平台为开发者提供了一系列接口,开发者通过调用这些接口能够实现创建自定义菜单、获取用户信息等功能。在调用这些接口时需要传入接口访问凭证access_token,开发者需要通过公众平台提供的获取凭证接口得到access_token。获取凭证接口的请求地址为:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET。这里的grant_type是授权类型,上传固定值client_credential即可。参数appid和secret是一个公众账号的唯一凭证和密钥。接口调用成功,返回一个如下格式JSON格式的结果:{"access_token":"ACCESS_TOKEN","expires_in":7200},acess_token就是我们需要的接口访问凭证,它是一个长度上百位的加密字符串,expires_in是凭证的有效期,单位是秒。
访问凭证以JSON格式封装,Java语言可以通过JSON-lib,将JSON字符串转换成Java对象,这样就可以方便地从对象中取到数据了。具体实现代码如下:
//将返回的JSON字符串转换成JSONObject对象
JSONObject jsonObject = JSONObject.fromObject(buffer.toString())
String accessToken = jsonObject.getString("access_token");//获取接口访问凭证
int expiresIn = jsonObject.getInt("expires_in");//获取凭证的有效期
3 自定义菜单的实现
前期工作都准备完成,取得了访问凭证后,就可以使用微信的各种接口,实现系统需要的各项功能,包括自定义菜单、获取用户信息、地理位置服务、语音识别等。其中,自定义菜单是所有基于微信公共号应用系统都必须实现的。
通过调用自定义菜单接口,能够实现菜单的创建、查询和删除。其中最重要的是菜单的创建,查询与删除用得相对较少。自定义菜单的菜单项本质上是一个按钮,按钮类型有click(点击事件)和view(访问网页)两种,两种按钮的属性不同。
表1 按钮类型属性说明
下面为JSON格式的菜单结构:
{"button":[{"type":"click","name":"点名","key":"count"},{"type":
"view","name":"名单","url":"http://58.30.21.64/sms/detail.jsp"}……}
用JSON格式封装好菜单结构后,需要发起HTTPS POST请求将菜单结构提交到https://api.weixin.qq.com/cgi-bin/menu/ceate?access_token=TOKEN。菜单创建的主要代码如下:
//菜单创建接口地址
String menuUrl = https://api.weixin.qq.com/cgi-bin/menu/ceate?access_token=TOKEN
URL url = new URL(menuUrl)
HttpsURLConnection httpUrl = (HttpsURLConnection)url.openConnection
();
//省略信息管理操作部分
……
httpUrl.setRequestMethod("POST"); //设置请求方式
//向输出流写菜单结构
OutputStream out = httpUrl.getOutputStream();
out.write(jsonMenu.getBytes("UTF-8"));
out.close();
自定义菜单创建完成后,由于微信客户端缓存的原因,需要24小时后才会在公众账号上展现出来。
4 结束语
微信公众平台开发本质上是按照微信服务器规定的流程和格式,调用微信服务器的各个高级接口,从而实现不同的平台功能。随着微信版本的不断提升,微信服务器的高级接口也在不断地扩展和更新。要开发公众平台系统,首先,要完成本文中所列的开发准备工作;其次,掌握XML文档与JSON文档的解析方法;最后,通过微信公众号后台深入研究每一个接口的使用方法。按照这3个步骤,开发基于微信公共平台的应用系统不是难事。
【参考文献】
[1]柳峰.微信公众平台应用开发方法、技巧与案例[M].机械工业出版社,2015: 52-126.
[2]微信公众平台开发者文档,http://mp.weixin.qq.com/wiki/home/index.html[OL].