>  기사  >  Java  >  Java+WeChat 공개 계정 개발 프로세스 2단계에 대한 자세한 설명

Java+WeChat 공개 계정 개발 프로세스 2단계에 대한 자세한 설명

php是最好的语言
php是最好的语言원래의
2018-08-10 14:50:342668검색

이전 기사에서는 Java 언어로 WeChat 공개 플랫폼을 개발하는 첫 번째 부분을 요약했습니다. - 환경 구축 및 개발 액세스, 이 기사에서는 메시지 수신 및 응답을 요약합니다.

WeChat 공개 플랫폼에 연결하면 WeChat은 확인 방법으로 Get 요청을 보냅니다. 그런 다음 메시지를 받으면 WeChat에서 Post 요청을 보내고 XML 형식으로 데이터를 보내고 받습니다.

WeChat에서 보낸 일반 문자 메시지의 XML 패키지 구조를 살펴보세요.

                                                                                           ;

1348831860

Content>

1234567890123456

공식 문서 설명:

Java+WeChat 공개 계정 개발 프로세스 2단계에 대한 자세한 설명이해한 후 코드 입력을 시작하세요:

1.

수신된 XML 형식을 다음으로 변환합니다. 컬렉션 개체(Map)

Util 패키지 아래에 새 MessageUtil 도구 클래스를 만듭니다.

Java+WeChat 공개 계정 개발 프로세스 2단계에 대한 자세한 설명Convert 수신된 XML 형식을 Map 형식으로 변환하려면 dom4j라는 jar 패키지가 필요합니다. 그리고 이를 Web-INF 아래의 lib 패키지에 배치합니다. 필요한 모든 jar 패키지는 기사 마지막 부분에 배치하겠습니다. dom4j jar 패키지의 도움으로 XML 형식을 Map 객체 형식으로 변환하는 메서드를 작성할 수 있습니다. 이 메서드는 다음과 같이 구현됩니다.

/**
	 * 新建方法,将接收到的XML格式,转化为Map对象
	 * @param request 将request对象,通过参数传入
	 * @return 返回转换后的Map对象
	 */
	public static Map<String, String> xmlToMap(HttpServletRequest request) 
			throws IOException, DocumentException{
		Map<String, String> map = new HashMap<String, String>();
		//从dom4j的jar包中,拿到SAXReader对象。
		SAXReader reader = new SAXReader();
		InputStream is = request.getInputStream();//从request中,获取输入流
		Document doc =  reader.read(is);//从reader对象中,读取输入流
		Element root = doc.getRootElement();//获取XML文档的根元素
		List<Element> list = root.elements();//获得根元素下的所有子节点
		for (Element e : list) {
			map.put(e.getName(), e.getText());//遍历list对象,并将结果保存到集合中
		}
		is.close();
		return map;
	}

2,

위 메서드와 유사하게 메서드를 작성해야 합니다. 메시지 객체를 XML로 변환합니다.

여기서는 여전히 jar 패키지인 xstream.jar을 사용해야 합니다. 가져오기 방법은 dom4j와 동일합니다. (또 한 가지 주의할 점은 이전에 가져온 xstream이 1.4 버전이었는데 응답 메시지에 항상 내용이 부족해서 여러 번 시도한 끝에 jar 패키지 버전을 1.3으로 변경했더니 응답 메시지가 성공했다는 점을 설명하고 싶습니다. 구체적인 이유는 일시적으로 알 수 없습니다. 시간 낭비를 피하기 위해 나중에 배울 사람들에게 이 함정을 알려주십시오.)

물론, 먼저 엔터티에 메시지 객체를 전달하기 위한 새로운 엔터티 클래스 TextMessage를 만들어야 합니다. 클래스는 WeChat에서 보낸 6개의 매개변수에 해당하며 해당 Get/Set 메소드와 빈 매개변수/전체 매개변수 구성을 제공합니다. 이에 대해서는 여기서 자세히 설명하지 않습니다.

private String ToUserName;//开发者微信号
private String FromUserName;//发送方账号
private Long CreateTime;//消息创建时间
private String MsgType;//消息类型
private String Content;//文本消息内容
private String MsgId;//消息id,64位整型

다음으로 변환하는 메소드를 작성합니다. 이 문자 메시지 클래스의 객체를 XML 형식으로 반환합니다.

/**
* 将文本消息对象转化成XML格式
* @param message 文本消息对象
* @return 返回转换后的XML格式
*/
public static String textMessageToXml(TextMessage message){
	XStream xs = new XStream();
	//由于转换后xml根节点默认为class类,需转化为<xml>
	xs.alias("xml", message.getClass());
	return xs.toXML(message);
}

3.

위의 두 가지 처리 방법을 작성한 후 [메시지 수신 및 응답]을 구현해 보겠습니다.

원래 서블릿으로 돌아가서 doPost 방법을 작성합니다. :

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		try {
			//将request请求,传到Message工具类的转换方法中,返回接收到的Map对象
			Map<String, String> map = MessageUtil.xmlToMap(request);
			//从集合中,获取XML各个节点的内容
			String ToUserName = map.get("ToUserName");
			String FromUserName = map.get("FromUserName");
			String CreateTime = map.get("CreateTime");
			String MsgType = map.get("MsgType");
			String Content = map.get("Content");
			String MsgId = map.get("MsgId");
			if(MsgType.equals("text")){//判断消息类型是否是文本消息(text)
				TextMessage message = new TextMessage();
                //原来【接收消息用户】变为回复时【发送消息用户】
				message.setFromUserName(ToUserName);
				message.setToUserName(FromUserName);
				message.setMsgType("text");
				message.setCreateTime(new Date().getTime());//创建当前时间为消息时间
				message.setContent("您好,"+FromUserName+"\n我是:"+ToUserName
				+"\n您发送的消息类型为:"+MsgType+"\n您发送的时间为"+CreateTime
				+"\n我回复的时间为:"+message.getCreateTime()+"\n您发送的内容是:"+Content);
				//调用Message工具类,将对象转为XML字符串
                str = MessageUtil.textMessageToXml(message); 
				System.out.println(str);
				out.print(str);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
		} catch (DocumentException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
	}

이렇게 해서 문자 수신 및 응답이 성공적으로 완료되었습니다.

Java+WeChat 공개 계정 개발 프로세스 2단계에 대한 자세한 설명프로젝트에 필요한 Jar 패키지:

링크: https://pan.baidu.com/s/1n7WXoDXN97AwQPjgiyz5gw 비밀번호: m5ne

관련 권장 사항:

WeChat 공개 개발을 위한 Java 그래픽 코드 예 플랫폼

WeChat 공개 계정 결제 개발(자바) 사례에 대한 자세한 설명

위 내용은 Java+WeChat 공개 계정 개발 프로세스 2단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.