微信开发的相关实现

2025-09-28 10:36:53

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;

}

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢