1、先你得建立一个微信公众号,这个可以去微信公众平台注册,因为我只是进行学习加测试,我最后申请的是订阅号,而不是面向企业应用的服务号,所以这是做微信开发最基本的一部。登录微信公众平台进行注册,注册界面如图:
2、现在我已经挂入了公网,你可以查找建立的公众号来关注信息,进而发送消息。但是你的电脑关机的话,公网就结束,你发送的消息也就无法返回相应结果了(因为电脑是服务器)。微信图形界面大题如下:
3、需要的解决一个特别大的问题,那就是公网问题以及微信端口只支持80端口问题,如果只是用简单的花生壳去映射的话,这个端口问题还是很难解决的,现在来解决这个问题。方式一:使用软件ngrok去映射。下面是我映射后的截图相当于我把本地地址localhost映射映射到公网地址上了。
4、方式二:当然你也可以不使用这种映射,你可以考虑一下让别人代理你的应用程序,比如百度云BAE,新浪云SAE,阿里云,其中百度云,阿里云收费,新浪云有一段时间免费,我测试的新浪云SAE,测试成功了,如果不想使用ngrok,嫌这个麻烦,你也可以考虑新浪云代理你的应用。
5、除了上面的挥响裢鲮东西的话,那就是微信端的代码了,代码我用的myeclipse工具,写的是java代码,不是c++,python,注意微信的开发可以采用pytho荏鱿胫协n,java,php进行,官网提供的是php案例的哦。现在是我调通的之前用的测试代码,足够调通基本功能。已经足够了解微信开发,后面无非就是数据库的添加,以及几个jsp界面的问题,再找美工调一调,绝对会很好的。下面提供微信开发之后的管理平台如图:
6、服务器端核心代码服务类CoreService的源代码package com.cashion.course.service;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.cashion.course.message.resp.TextMessage;import com.cashion.course.util.MessageUtil;public class CoreService { /** * 处理微信发来的请求 * * @param request * @return */ private static boolean flag = false; public static Map<String,Boolean> flagMap = new HashMap<String,Boolean>(); public static String processRequest(HttpServletRequest request) { String respMessage = null; try { // 默认返回的文本消息内容 String respContent = "请求处理异常,请稍候尝试!"; // xml请求解析 Map<String, String> requestMap = MessageUtil.parseXml(request); // 发送方帐号(open_id) String fromUserName = requestMap.get("FromUserName"); // 公众帐号 String toUserName = requestMap.get("ToUserName"); // 消息类型 String msgType = requestMap.get("MsgType"); //消息内容 String content = requestMap.get("Content"); System.out.println(fromUserName+" "+toUserName+" "+msgType); // 回复文本消息 TextMessage textMessage = new TextMessage(); textMessage.setToUserName(fromUserName); textMessage.setFromUserName(toUserName); textMessage.setCreateTime(new Date().getTime()); textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); textMessage.setFuncFlag(0); // 文本消息 //List<String> list = MessageUtil.usersList; //Map<String,Boolean> flagMap = MessageUtil.flagMap; if(flagMap.containsKey(fromUserName)){//如果存在这个用户, System.out.println("系统存在了这个微信用户"); if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { //if(flag) // respContent = "你发送的消息已上墙"; if(content.equals("上墙")){ flag = true; flagMap.put(fromUserName, flag); respContent = "上墙成功,你可以发送消息了"; }else{ //respContent = "消息可以上弹幕"; flag = flagMap.get(fromUserName); if(!flag) respContent = "你必须先发送上墙才拥有发送消息的权限"; else respContent = "你发送的消息已上墙"; } } }else{ flag = false; flagMap.put(fromUserName, flag); } /*if(list.contains(fromUserName)){ System.out.println("这个对应的标志位出来了"); }else{ flag = false; if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { //if(flag) // respContent = "你发送的消息已上墙"; if(content.equals("上墙")){ flag = true; respContent = "上墙成功,你可以发送消息了"; }else{ //respContent = "消息可以上弹幕"; if(!flag) respContent = "你必须先发送上墙才拥有发送消息的权限"; else respContent = "你发送的消息已上墙"; } } }*/ if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { //if(flag) // respContent = "你发送的消息已上墙"; if(content.equals("上墙")){ flag = true; respContent = "上墙成功,你可以发送消息了"; }else{ //respContent = "消息可以上弹幕"; if(!flag) respContent = "你必须先发送上墙才拥有发送消息的权限"; else respContent = "你发送的消息已上墙"; } } // 图片消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { respContent = "您发送的是图片消息!"; } // 地理位置消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { respContent = "您发送的是地理位置消息!"; } // 链接消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { respContent = "您发送的是链接消息!"; } // 音频消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { respContent = "您发送的是音频消息!"; } // 事件推送 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) { // 事件类型 String eventType = requestMap.get("Event"); // 订阅 if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { respContent = "谢谢您的关注!"; } // 取消订阅 else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) { // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息 } // 自定义菜单点击事件 else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) { // TODO 自定义菜单权没有开放,暂不处理该类消息 } } textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } catch (Exception e) { e.printStackTrace(); } return respMessage; }}