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

java 4 2016-02-29 13:03
女装

前言:

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

正文:

微信号的选择

订阅号,每天一次推送消息,但是高级权限不多。
服务号,每月四次推送消息,但是高级权限多。
所以推广用途请使用订阅号,服务用途请使用服务号。

关键参数理解

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

服务号接入工程

我们要处理自己的业务,有自己的后台工程是必须的,但是如何将微信服务号跟我们的工程建立接入关系呢


URL填写我们的工程的一个action
Token填写跟我们工程里面设置的Token参数内容一样即可
开始接入(端口要是80!)

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

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

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


你输入关键字的时候,比如输入100,我是这么回复给你的


这里举得两个例子就是你遇到事件或者关键字的时候,你可以如何处理,具体回复等其他业务操作,请参照自身要求。

回复用户的信息格式

消息格式有很多种,不过最常用的如下三种
回复文本


回复多图文


回复多客服,即可轻松打开多客服功能 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哈哈~
第二种:就是我们自己工程的htmljsp这个做前端的人做个手机自适应就好了。
第三种:就是现在市面上比较火的易企秀第三方炫酷的效果界面,直接做好把url拿过来即可,很简单。

微信服务号的关注用户

在我们关注了这个微信号之后,变成了他粉丝。我们可以对这些粉丝进行分组,也可以通过请求获取这个微信号的所有的分组情况,跟具体某个用户的所在分组情况。(特别注意:在运营在建立分组的时候,千万不要随便建立或者删除之前的分组,因为分组的ID是类似于数据库表的递增索引一样,用了一次就没了,也就是你删掉了一个分组,再建一个跟他名字一模一样的分组,不要意思他的分组的ID是已经不是原来的ID了,切记)!!!

二维码

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

所需要的技能

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

总结:

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

女装
文章评论