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

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

Aug 10, 2018 pm 02:50 PM

이전 기사에서는 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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? 회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? Apr 19, 2025 pm 04:51 PM

일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

맵 구조를 사용하여 시스템 도킹에서 필드 매핑 문제를 단순화하는 방법은 무엇입니까? 맵 구조를 사용하여 시스템 도킹에서 필드 매핑 문제를 단순화하는 방법은 무엇입니까? Apr 19, 2025 pm 06:21 PM

시스템 도킹의 필드 매핑 처리 시스템 도킹을 수행 할 때 어려운 문제가 발생합니다. 시스템의 인터페이스 필드를 효과적으로 매핑하는 방법 ...

데이터베이스 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 얻는 방법은 무엇입니까? 데이터베이스 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 얻는 방법은 무엇입니까? Apr 19, 2025 pm 11:42 PM

데이터베이스 작업에 MyBatis-Plus 또는 기타 ORM 프레임 워크를 사용하는 경우 엔티티 클래스의 속성 이름을 기반으로 쿼리 조건을 구성해야합니다. 매번 수동으로 ...

Intellij Idea는 로그를 출력하지 않고 스프링 부팅 프로젝트의 포트 번호를 어떻게 식별합니까? Intellij Idea는 로그를 출력하지 않고 스프링 부팅 프로젝트의 포트 번호를 어떻게 식별합니까? Apr 19, 2025 pm 11:45 PM

IntellijideAultimate 버전을 사용하여 봄을 시작하십시오 ...

분류를 구현하고 그룹의 일관성을 유지하기 위해 이름을 숫자로 변환하려면 어떻게합니까? 분류를 구현하고 그룹의 일관성을 유지하기 위해 이름을 숫자로 변환하려면 어떻게합니까? Apr 19, 2025 pm 11:30 PM

많은 응용 프로그램 시나리오에서 정렬을 구현하기 위해 이름으로 이름을 변환하는 솔루션, 사용자는 그룹으로, 특히 하나로 분류해야 할 수도 있습니다.

Java 객체를 어레이로 안전하게 변환하는 방법은 무엇입니까? Java 객체를 어레이로 안전하게 변환하는 방법은 무엇입니까? Apr 19, 2025 pm 11:33 PM

Java 객체 및 배열의 ​​변환 : 캐스트 유형 변환의 위험과 올바른 방법에 대한 심층적 인 논의 많은 Java 초보자가 객체를 배열로 변환 할 것입니다 ...

데이터베이스 쿼리에 tkmyBatis를 사용할 때 엔티티 클래스 변수 이름 빌드 쿼리 조건을 우아하게 얻는 방법은 무엇입니까? 데이터베이스 쿼리에 tkmyBatis를 사용할 때 엔티티 클래스 변수 이름 빌드 쿼리 조건을 우아하게 얻는 방법은 무엇입니까? Apr 19, 2025 pm 09:51 PM

데이터베이스 쿼리에 tkmyBatis를 사용하는 경우 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 가져 오는 방법이 일반적인 문제입니다. 이 기사는 고정 될 것입니다 ...

Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Apr 19, 2025 pm 11:36 PM

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.

See all articles