本次要讲述的是一个本人完整微信服务号开发的经验分享,微信服务号的做品:请搜索微信号:zjaisino
,名称:爱信诺Aisino一站式服务平台。(这里声明,这不是打广告,只是为了方便各位开花攻城狮朋友配合下面的文章理解)。
注:微信服务号的开发能够用的语言有不少,如Java、PHP、ASP.NET、Ruby、Python、Note.js
均可以,我是一名Java
攻城狮,因此下面介绍的开发语言是JAVA
,言归正传,Let's gohtml
订阅号,天天一次推送消息,可是高级权限很少。
服务号,每个月四次推送消息,可是高级权限多。
因此推广用途请使用订阅号,服务用途请使用服务号。前端
AppID
和AppSecret
这两个是公众号后台的参数。access_token
是公众号的全局惟一票据,公众号调用各接口时都需使用access_token
,由上面两个参数处理获得(注意:处理好7200s
的时效性)。OpenID
这是业务处理最核心的参数,(是你的微信跟这个微信号之间的一个惟一的ID
,注意不管你是否关注,这个ID
都是不变的,并且已经存在)。数据库
咱们要处理本身的业务,有本身的后台工程是必须的,可是如何将微信服务号跟咱们的工程创建接入关系呢json
URL
填写咱们的工程的一个action
Token
填写跟咱们工程里面设置的Token
参数内容同样便可
开始接入(端口要是80!)api
点击提交的时候,其实微信服务器是往你填写的action
的传输方式是get
不是post
,因此代码里根据这个去处理,返回他须要的签名检验结果便可,这样就接入完成了。服务器
大体分两种:
一种是:文本(Text
),一种是:事件(Event
)
文本交互,俗称关键字交互
事件交互,里面的种类就挺多,如LOCATION
(定位),SCAN
(再次关注),subscribe
(关注),还有就是菜单的EventKey
的响应了等等。
正如你关注的时候,我给你回复的东西就是在subscribe
的时候处理的,给你返回微信
你输入关键字的时候,好比输入100
,我是这么回复给你的框架
这里举得两个例子就是你遇到事件或者关键字的时候,你能够如何处理,具体回复等其余业务操做,请参照自身要求。jsp
消息格式有不少种,不过最经常使用的以下三种
回复文本工具
回复多图文
回复多客服,便可轻松打开多客服功能 so easy!
记得写个工具类来存放这些消息格式的工具方法!
服务号的菜单,大菜单能够有三个,大菜单里面的子菜单最多五个。
菜单的类型两种:一种是Click
菜单,一种是Url
菜单。
顾名思义Click
菜单就是点击会传EventKey
给咱们工程,Url
菜单就是直接超连接跳转性质。
如何生成菜单?
往下Look
/** * 组装菜单数据 * * @return 返回一个菜单对象 */ public static Menu getMenu(String serverUrl) { //ChildButton是子菜单对象 ChildButton btn11 = new ChildButton(); btn11.setName("个税计算"); //若是设置type是view,那必须设置url,不要设置key btn11.setType("view"); btn11.setUrl(serverUrl+"gongzishouru.jsp"); ChildButton btn12 = new ChildButton(); btn12.setName("发票查询"); btn12.setType("view"); btn12.setUrl(serverUrl+"ds_dishuifapiao_search.jsp"); ChildButton btn13 = new ChildButton(); btn13.setName("服务预定"); btn13.setType("click"); btn13.setKey("13"); ChildButton btn14 = new ChildButton(); btn14.setName("个人派单"); btn14.setType("click"); btn14.setKey("14"); ChildButton btn15 = new ChildButton(); btn15.setName("个人帐户"); btn15.setType("click"); btn15.setKey("15"); ChildButton btn21 = new ChildButton(); btn21.setName("福利专区"); btn21.setType("click"); btn21.setKey("21"); ChildButton btn22 = new ChildButton(); btn22.setName("最新资讯"); btn22.setType("click"); btn22.setKey("22"); ChildButton btn23 = new ChildButton(); btn23.setName("财税动态"); btn23.setType("click"); btn23.setKey("23"); ChildButton btn24 = new ChildButton(); btn24.setName("会计职场"); btn24.setType("click"); btn24.setKey("24"); ChildButton btn25 = new ChildButton(); btn25.setName("常见问题"); btn25.setType("click"); btn25.setKey("25"); ChildButton btn31 = new ChildButton(); btn31.setName("诺诺介绍"); btn31.setType("view"); btn31.setUrl(serverUrl+"nuonuojieshao.jsp"); ChildButton btn32 = new ChildButton(); btn32.setName("卡换盘专栏"); btn32.setType("view"); btn32.setUrl(serverUrl+"CardChangeDish.jsp"); ChildButton btn33 = new ChildButton(); btn33.setName("产品展现"); btn33.setType("view"); btn33.setUrl(serverUrl+"chanpinzhanshi.jsp"); ChildButton btn34 = new ChildButton(); btn34.setName("网点查询"); btn34.setType("view"); btn34.setUrl(serverUrl+"wangdianchaxun.jsp"); ChildButton btn35 = new ChildButton(); btn35.setName("个人积分"); btn35.setType("click"); btn35.setKey("35"); //ComplexButton是一级菜单,能够经过setSub_button的方式添加多个子菜单 ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("诺诺服务"); mainBtn1.setSub_button(new ChildButton[] { btn11, btn12, btn13, btn14, btn15}); ComplexButton mainBtn2 = new ComplexButton(); mainBtn2.setName("诺诺资讯"); mainBtn2.setSub_button(new ChildButton[] { btn21, btn22, btn23, btn24, btn25}); ComplexButton mainBtn3 = new ComplexButton(); mainBtn3.setName("关于诺诺"); mainBtn3.setSub_button(new ChildButton[] { btn31, btn32, btn33, btn34, btn35}); //Menu是菜单对象,将全部一级菜单塞入便可 Menu menu = new Menu(); menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 }); return menu; }
/** * 建立菜单 */ private static void createMenu(String serverUrl) { // 调用接口建立菜单的json并上传到微信,返回值是结果代码,0表示成功。 int result = WeixinUtil.createMenu(FastCreateWeixinMenu.getMenu(serverUrl), accessToken); // 判断菜单建立结果 if (0 == result) System.out.println("菜单建立成功!"); else System.out.println("菜单建立失败,错误码:" + result); }
菜单生成搞定!
这是咱们最关心的问题,很简单,就是我一开头提到的openID
,这个参数能够在用户跟工程有任何交互的时候,均可以获取获得,咱们能够把openID
跟咱们的业务用户ID
,作个登陆绑定的操做,其实就是把两个参数造成一条数据存到数据库的关系表中便可。
还有一种就是所谓的网页获取用户信息openID
(若是你的操做比较复杂不推荐这种作法)。
微信里面打开的界面能够分为三种:
第一种:就是相似你平时点开的微信文章,里面含有点击文字关注公众号的那种页面。(获取方式,让运营在公众号的腾讯平台里面写好,而后把url
发给你,你放到回复的图文中便可)
(小细节不少人不知道:文章的内容保存或发布后,再改动里面的内容他的url
是不变的)O(∩_∩)O哈哈~
第二种:就是咱们本身工程的html
,jsp
这个作前端的人作个手机自适应就行了。
第三种:就是如今市面上比较火的易企秀第三方炫酷的效果界面,直接作好把url
拿过来便可,很简单。
在咱们关注了这个微信号以后,变成了他粉丝。咱们能够对这些粉丝进行分组,也能够经过请求获取这个微信号的全部的分组状况,跟具体某个用户的所在分组状况。(特别注意:在运营在创建分组的时候,千万不要随便创建或者删除以前的分组,由于分组的ID
是相似于数据库表的递增索引
同样,用了一次就没了,也就是你删掉了一个分组,再建一个跟他名字如出一辙的分组,不要意思他的分组的ID
是已经不是原来的ID
了,切记)!!!
微信公众号里面能够有方法生成带参数的二维码,当咱们扫描二维码的时候,咱们的工程能够获取用户所扫描的二维码中的参数,从而来根据这个参数去作一些业务操做,如将用户直接扫描后分组,等其余操做。
JAVA
Web
工程会搭建,Tomcat
服务器会部署,数据库熟悉,前端Js
,Jsp
熟悉,Spring MVC
框架的使用等
说了这么多,我相信你们多多少少已经对微信服务号的开发流程有个系统性的开发轮廓了,写这边文章是对本身经验的分享,也是对过去的一种总结,后续会不间断的发表关于Android
,微信
,iOS
,Java
相关技术的文章,有兴趣的朋友们敬请关注!感谢你们阅读。