Java微信号开发基础篇

来源:互联网 发布:殷素素 俞岱岩 知乎 编辑:程序博客网 时间:2024/04/29 10:27

有两种开发模式,编辑模式和开发者模式,编辑模式就是简单的网上直接像word写文档一样,下面就说一下开发者模式。


一 环境搭建

  1. 申请一个微信公众号
  2. 外网映射工具(开发调试用)
  3. 在官网实现开发者模式接入

二 消息的接收与响应

微信客户端发送数据,先包装成xml文件的格式,提交到servlet,在服务端通过解析获得请求数据,在后台进行处理后,把结果再次包装成xml通过PrintWriter的方式给客户端。
如以下一个自己写的逻辑,客户端发送“1”,“2”文本内容回复不同的内容,关注该公众号,获取位置信息等event同样也回复不同内容:

if(MessageUtil.MESSAGE_TEXT.equals(msgType)){                if("1".equals(content)){                    message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.firstMenu());                }else if("2".equals(content)){                    message = MessageUtil.initNewsMessage(toUserName, fromUserName);                }            }else if(MessageUtil.MESSAGE_EVNET.equals(msgType)){                String eventType = map.get("Event");                if(MessageUtil.MESSAGE_SUBSCRIBE.equals(eventType)){                    message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText());                }else if(MessageUtil.MESSAGE_CLICK.equals(eventType)){                    message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText());                }            }else if(MessageUtil.MESSAGE_LOCATION.equals(msgType)){                String label = map.get("Label");                message = MessageUtil.initText(toUserName, fromUserName, label);            }

为了方便,这里可以数据封装到类中,再通过xstream将对象解析成xml,这时就要在“开发者文档”中根据相应的xml数据结构创建类(字段的大小写很重要),而且在解析成xml的时候要注意标签的替换(因为要符合微信官方规定的结构)。


三 素材管理接口

通过调用相应的接口,可以实现素材的上传,得到一个该素材的ID,这样就可以给客户端回复图片,语言等消息了,而不再是简单的文本消息。

接口的提交有两种方式,返回的是json数据格式:

  • 不带参数的get方式,比如说获取票据access_token,获取和删除自定义菜单
  • 带参数的post方式,比如说创建,生成自定义菜单。

要注意的一点是:文件的上传和自定义菜单的创建都是Post请求,但文件上传是以流的形式,而Post请求是以String提交给服务端的。

实例代码:

/*     * 生成Menu     */    public static int createMenu(String token, String menu) throws Exception {        int result = 0;        String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);        JSONObject jsonObject = doPost(url, menu);        if(jsonObject != null) {            result = jsonObject.getInt("errcode");        }        return result;    }

其中doPost方法为:

/*     * post,将组装的参数提交到接口地址     * 需要提交参数时调用     */    public static JSONObject doPost(String url, String outStr) throws Exception {        DefaultHttpClient httpClient = new DefaultHttpClient();        HttpPost httpPost = new HttpPost(url);        JSONObject jsonObject = null;        // 将传过来的参数加进去        httpPost.setEntity(new StringEntity(outStr, "utf-8"));        HttpResponse response = httpClient.execute(httpPost);        String result = EntityUtils.toString(response.getEntity(), "utf-8");        jsonObject = JSONObject.fromObject(result);        return jsonObject;    }
0 0
原创粉丝点击