`
stephen830
  • 浏览: 3010948 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

微信公众号平台api之验证、接收文本消息和自动回复文本消息

 
阅读更多

 

微信公众号平台api之验证、接收文本消息和自动回复文本消息

 

 

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.security.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.w3c.dom.*"%>
<%@ page import="javax.xml.parsers.*"%>
<%
	Enumeration parameterNames = request.getParameterNames();
	String parameterName = null;
	String parameterValue = null;
    while (parameterNames.hasMoreElements()) {
        parameterName = (String) parameterNames.nextElement();
        parameterValue = request.getParameter(parameterName);
        System.out.println("weixin_test-param:"+parameterName+"="+parameterValue);
    }
    
	
	String TOKEN = "这里填写您设置的TOKEN值";
	String echostr = request.getParameter("echostr");
	String signature = request.getParameter("signature");
	String timestamp = request.getParameter("timestamp");
	String nonce = request.getParameter("nonce");
	System.out.println("weixin_test:echostr="+echostr+",signature="+signature+",timestamp="+timestamp+",nonce="+nonce);
	List values = new ArrayList();
	values.add(TOKEN);
	values.add(timestamp);
	values.add(nonce);
	Collections.sort(values);
	StringBuffer content = new StringBuffer();
	for (int i = 0; i < values.size(); i++) {
		content.append(values.get(i));
	}
	MessageDigest md = MessageDigest.getInstance("SHA-1");
	byte[] b = md.digest(content.toString().getBytes("UTF-8"));
	String stmp = "";
	StringBuffer signInfo = new StringBuffer();
	for (int n = 0; n < b.length; n++) {
		stmp = Integer.toHexString(b[n] & 0XFF);
		if (stmp.length() == 1){
			signInfo.append("0");
			signInfo.append(stmp);
		}else{
			signInfo.append(stmp);
		}
	}
	
	
	System.out.println("weixin_test:signInfo="+signInfo+",signature="+signature);
	if(signInfo.toString().equals(signature)){
		out.clear();
		out.print(echostr);
		
		System.out.println("weixin_test(001):ok");
		
		//receive user's message from weixin platform
		BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
		String line = null;
        StringBuffer sb = new StringBuffer();
        while((line = br.readLine())!=null){
            sb.append(line);
        }
		System.out.println("weixin_message:"+sb.toString());
		
		//recieved message :text
		if(sb.length()>0){
			Element root=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(sb.toString().getBytes("UTF-8"))).getDocumentElement();
	    	NodeList nodes = root.getChildNodes();
	    	int count = nodes.getLength();
	    	String textContent = null;
	    	String FromUserName = null;
	    	String ToUserName = null;
	    	boolean isText = false;
	    	for(int i=0;i<count;i++){
	    		String nodeName = nodes.item(i).getNodeName();
	    		String nodeValue = nodes.item(i).getFirstChild().getNodeValue();
	    		if("MsgType".equals(nodeName) && "text".equals(nodeValue)){
	    			isText = true;
	    		}
	    		if("Content".equals(nodeName)){
	    			textContent = nodeValue;
	    		}
	    		if("FromUserName".equals(nodeName)){
	    			FromUserName = nodeValue;
	    		}
	    		if("ToUserName".equals(nodeName)){
	    			ToUserName = nodeValue;
	    		}
	    	}
	    	System.out.println("weixin_message:textContent="+textContent);
	    	
	    	//reply text message
	    	if(isText){
	    		StringBuffer replyInfo = new StringBuffer();
	    		Date d = new Date();
	    		long CreateTime = d.getTime()/1000;
	    		replyInfo.append("<xml>");
	    		replyInfo.append("<ToUserName>");
	    		replyInfo.append("<![CDATA[").append(FromUserName).append("]]>");
	    		replyInfo.append("</ToUserName>");
	    		replyInfo.append("<FromUserName>");
	    		replyInfo.append("<![CDATA[").append(ToUserName).append("]]>");
	    		replyInfo.append("</FromUserName>");
	    		replyInfo.append("<CreateTime>");
	    		replyInfo.append(CreateTime);
	    		replyInfo.append("</CreateTime>");
	    		replyInfo.append("<MsgType>");
	    		replyInfo.append("<![CDATA[text]]>");
	    		replyInfo.append("</MsgType>");
	    		replyInfo.append("<Content>");
	    		replyInfo.append("<![CDATA[hello,你好!]]>");
	    		replyInfo.append("</Content>");
	    		replyInfo.append("</xml>");
	    		out.clear();
	    		out.print(replyInfo.toString());
	    	}
    	}
		return;
	}else{
		System.out.println("weixin_test:err");
	}
%>

 

分享到:
评论

相关推荐

    微信公众号的开发文档.docx

    消息接收与发送:包括接收用户发送的消息(文本、图片、语音、视频等)、验证消息真实性、回复消息(文本、图片、语音、视频、图文等)等接口。 模板消息:允许开发者向用户发送模板化的消息,适用于订单通知、服务...

    一个简化版的微信公众号开发脚本示例,这个脚本将演示如何接收用户发送的消息并回复

    一个简化版的微信公众号开发脚本示例,这个脚本将演示如何接收用户发送的消息并回复。 请注意,微信公众号开发需要你在微信公众平台注册账号并获取必要的API密钥和Token。 注意: 脚本中的WECHAT_TOKEN需要你替换成...

    微信公众平台开发 实例 java 开发资料

    5. **消息处理**:掌握接收和响应用户消息的流程,包括文本、图片、语音、视频等多种消息类型,以及自定义菜单的点击事件处理。 6. **微信JSSDK**:了解JavaScript SDK的使用,实现微信内的网页分享、地理位置获取...

    基于websocket 的网页公共聊天时的实现

    服务器需要监听特定的WebSocket端口,接受新的连接,并对接收到的消息进行解析和响应。在公共聊天室场景中,服务器还需要管理用户的身份验证、消息广播(将一条消息发送给所有在线用户)以及可能的安全措施,比如...

    微信公众平台(asp.net版)

    3、接收微信发送的POST消息后,由DealPost进行消息处理。其中,DealXml类里进行消息初始封装,有2个参数,一个是MsgType,进行微信发送过来的消息类型判断另外一个是xn,进行根据MsgType判断产生其他各种类的参数...

    c# 微信接口,包括小程序,企业微信

    2. **消息与事件推送**:接收和发送消息,包括文本、图片、文件等类型,以及各种事件如关注、取消关注等。 3. **自定义菜单**:创建和管理企业微信的菜单,用户可以通过菜单触发相应的操作。 4. **应用管理**:创建...

    Go-微信网页版协议解析并使用Golang封装构建微信个人号机器人

    在Golang中,构建微信个人号机器人,首先需要对微信提供的API有深入理解,包括获取access_token、刷新access_token、发送消息(文本、图片、语音等)、接收消息、处理事件(如关注、取消关注、菜单点击)等。...

    微信企业号接口开发源码-Java

    2. **企业号API**:微信企业号提供了丰富的API接口,如发送消息(文本、图片、语音、视频等)、接收消息、管理成员、部门、标签、菜单等。开发者需要熟悉这些接口的使用方法和参数设置。 3. **消息与事件处理**:...

    java微信企业号接口测试,可直接整合使用

    Java微信企业号接口测试是开发微信企业应用的重要环节,它涉及到如何通过Java编程语言与微信提供的API进行交互,实现各种功能,如发送消息、接收消息、管理用户等。在这个过程中,开发者需要熟悉微信官方提供的SDK...

    Python使用微信接入图灵机器人过程解析

    要运行这个程序,你需要将`your api`替换为你的图灵API密钥,并启动`robot.start()`来监听和自动处理微信消息。`embed()`函数则确保程序不会立即退出,而是进入Python命令行模式,保持程序运行。 使用这个配置,你...

    微信企业号告警

    1. **获取Access Token**:通过CorpID和Secret向API发送GET请求来获取Access Token,这是一个重要的身份验证步骤。示例命令如下: ```bash curl ...

    pyWechatty

    3. **消息处理**:pyWechatty 提供了消息处理机制,可以接收来自微信的文本、图片、语音、视频等各种类型的消息,并根据预设规则进行回复。开发者可以通过编写回调函数来定义不同消息类型的处理逻辑。 4. **事件...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    1.3.4 “认我测”质检服务平台的设计和实现 8 1.4 本文的结构安排 8 第二章 多窗口类浏览器设计 11 2.1 多窗口类浏览器需求分析 11 2.1.1 Activity简介 11 2.1.2 Fragment简介 11 2.1.3 多窗口类浏览器需求 12 2.2 ...

Global site tag (gtag.js) - Google Analytics