使用java语言实现微信开发,与web服务器交互,实现了web显示,微信输入信息,网络上现在给出的官方demo都是php版本的,现在我采用了java进行了实现。
方法/步骤
-
1
先你得建立一个微信公众号,这个可以去微信公众平台注册,因为我只是进行学习加测试,我最后申请的是订阅号,而不是面向企业应用的服务号,所以这是做微信开发最基本的一部。登录微信公众平台进行注册,注册界面如图:
-
2
现在我已经挂入了公网,你可以查找建立的公众号来关注信息,进而发送消息。但是你的电脑关机的话,公网就结束,你发送的消息也就无法返回相应结果了(因为电脑是服务器)。微信图形界面大题如下:
-
3
需要的解决一个特别大的问题,那就是公网问题以及微信端口只支持80端口问题,如果只是用简单的花生壳去映射的话,这个端口问题还是很难解决的,现在来解决这个问题。
方式一:使用软件ngrok去映射。下面是我映射后的截图相当于我把本地地址localhost映射映射到公网地址上了。
-
4
方式二:当然你也可以不使用这种映射,你可以考虑一下让别人代理你的应用程序,比如百度云BAE,新浪云SAE,阿里云,其中百度云,阿里云收费,新浪云有一段时间免费,我测试的新浪云SAE,测试成功了,如果不想使用ngrok,嫌这个麻烦,你也可以考虑新浪云代理你的应用。
-
5
除了上面的东西的话,那就是微信端的代码了,代码我用的myeclipse工具,写的是java代码,不是c++,python,注意微信的开发可以采用python,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;
}
}
END
注意事项
-
其实你真正想做的话,还是得去看相关文档,只看我这个有可能你也不太明白,我是建立在你对微信的平台api稍微有点理解的基础上来写的,另外代码已经提供了,所以想做的话,就自己多花点时间去学习,要知道有些东西还是得靠自己的努力才能真正明白的。我也是这两天学的微信的简单接口,也只是入门学习,共同努力吧。
文章评论