微信服务号开发的完整人性化版攻略

前言:

本次要讲述的是一个本人完整微信服务号开发的经验分享,微信服务号的做品:请搜索微信号:zjaisino,名称:爱信诺Aisino一站式服务平台。(这里声明,这不是打广告,只是为了方便各位开花攻城狮朋友配合下面的文章理解)。
注:微信服务号的开发能够用的语言有不少,如Java、PHP、ASP.NET、Ruby、Python、Note.js均可以,我是一名Java攻城狮,因此下面介绍的开发语言是JAVA,言归正传,Let's gohtml

正文:

微信号的选择

订阅号,天天一次推送消息,可是高级权限很少。
服务号,每个月四次推送消息,可是高级权限多。
因此推广用途请使用订阅号,服务用途请使用服务号。前端

关键参数理解

AppIDAppSecret这两个是公众号后台的参数。
access_token是公众号的全局惟一票据,公众号调用各接口时都需使用access_token,由上面两个参数处理获得(注意:处理好7200s的时效性)。
OpenID这是业务处理最核心的参数,(是你的微信跟这个微信号之间的一个惟一的ID,注意不管你是否关注,这个ID都是不变的,并且已经存在)。数据库

服务号接入工程

咱们要处理本身的业务,有本身的后台工程是必须的,可是如何将微信服务号跟咱们的工程创建接入关系呢json

clipboard.png
URL填写咱们的工程的一个action
Token填写跟咱们工程里面设置的Token参数内容同样便可
开始接入(端口要是80!)api

clipboard.png

点击提交的时候,其实微信服务器是往你填写的action的传输方式是get不是post,因此代码里根据这个去处理,返回他须要的签名检验结果便可,这样就接入完成了。服务器

用户跟工程的交互方式种类

大体分两种:
一种是:文本(Text),一种是:事件(Event
文本交互,俗称关键字交互
事件交互,里面的种类就挺多,如LOCATION(定位),SCAN(再次关注),subscribe(关注),还有就是菜单的EventKey的响应了等等。
正如你关注的时候,我给你回复的东西就是在subscribe的时候处理的,给你返回微信

clipboard.png
你输入关键字的时候,好比输入100,我是这么回复给你的框架

clipboard.png
这里举得两个例子就是你遇到事件或者关键字的时候,你能够如何处理,具体回复等其余业务操做,请参照自身要求。jsp

回复用户的信息格式

消息格式有不少种,不过最经常使用的以下三种
回复文本工具

clipboard.png
回复多图文

clipboard.png
回复多客服,便可轻松打开多客服功能 so easy!
clipboard.png
记得写个工具类来存放这些消息格式的工具方法!

菜单分析

服务号的菜单,大菜单能够有三个,大菜单里面的子菜单最多五个。
菜单的类型两种:一种是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哈哈~
第二种:就是咱们本身工程的htmljsp这个作前端的人作个手机自适应就行了。
第三种:就是如今市面上比较火的易企秀第三方炫酷的效果界面,直接作好把url拿过来便可,很简单。

微信服务号的关注用户

在咱们关注了这个微信号以后,变成了他粉丝。咱们能够对这些粉丝进行分组,也能够经过请求获取这个微信号的全部的分组状况,跟具体某个用户的所在分组状况。(特别注意:在运营在创建分组的时候,千万不要随便创建或者删除以前的分组,由于分组的ID是相似于数据库表的递增索引同样,用了一次就没了,也就是你删掉了一个分组,再建一个跟他名字如出一辙的分组,不要意思他的分组的ID是已经不是原来的ID了,切记)!!!

二维码

微信公众号里面能够有方法生成带参数的二维码,当咱们扫描二维码的时候,咱们的工程能够获取用户所扫描的二维码中的参数,从而来根据这个参数去作一些业务操做,如将用户直接扫描后分组,等其余操做。

所须要的技能

JAVA Web工程会搭建,Tomcat服务器会部署,数据库熟悉,前端JsJsp熟悉,Spring MVC框架的使用等

总结:

说了这么多,我相信你们多多少少已经对微信服务号的开发流程有个系统性的开发轮廓了,写这边文章是对本身经验的分享,也是对过去的一种总结,后续会不间断的发表关于Android微信iOSJava相关技术的文章,有兴趣的朋友们敬请关注!感谢你们阅读。

相关文章
相关标签/搜索