微信开发的相关实现

2022年9月15日 16点热度 0人点赞

使用java语言实现微信开发,与web服务器交互,实现了web显示,微信输入信息,网络上现在给出的官方demo都是php版本的,现在我采用了java进行了实现。

工具/原料

  • 笔记本,手机,myeclipse

方法/步骤

  1. 1

    先你得建立一个微信公众号,这个可以去微信公众平台注册,因为我只是进行学习加测试,我最后申请的是订阅号,而不是面向企业应用的服务号,所以这是做微信开发最基本的一部。登录微信公众平台进行注册,注册界面如图:

  2. 2

    现在我已经挂入了公网,你可以查找建立的公众号来关注信息,进而发送消息。但是你的电脑关机的话,公网就结束,你发送的消息也就无法返回相应结果了(因为电脑是服务器)。微信图形界面大题如下:

  3. 3

    需要的解决一个特别大的问题,那就是公网问题以及微信端口只支持80端口问题,如果只是用简单的花生壳去映射的话,这个端口问题还是很难解决的,现在来解决这个问题。

    方式一:使用软件ngrok去映射。下面是我映射后的截图相当于我把本地地址localhost映射映射到公网地址上了。

  4. 4

    方式二:当然你也可以不使用这种映射,你可以考虑一下让别人代理你的应用程序,比如百度云BAE,新浪云SAE,阿里云,其中百度云,阿里云收费,新浪云有一段时间免费,我测试的新浪云SAE,测试成功了,如果不想使用ngrok,嫌这个麻烦,你也可以考虑新浪云代理你的应用。

  5. 5

    除了上面的东西的话,那就是微信端的代码了,代码我用的myeclipse工具,写的是java代码,不是c++,python,注意微信的开发可以采用python,java,php进行,官网提供的是php案例的哦。现在是我调通的之前用的测试代码,足够调通基本功能。已经足够了解微信开发,后面无非就是数据库的添加,以及几个jsp界面的问题,再找美工调一调,绝对会很好的。下面提供微信开发之后的管理平台如图:

  6. 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稍微有点理解的基础上来写的,另外代码已经提供了,所以想做的话,就自己多花点时间去学习,要知道有些东西还是得靠自己的努力才能真正明白的。我也是这两天学的微信的简单接口,也只是入门学习,共同努力吧。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论