WeChat Development API를 사용하여 서버에 연결하는 방법, 아래에서 소개하겠습니다.
1. 설명
*이 예제는 WeChat 개발 문서에 따라 개발되고 시연됩니다 : http://mp.weixin.qq.com/wiki/home/index.html 최신 버전 (4/3/2016 5:34:36 pm).
* 편집 플랫폼 : myeclipse10.7+win32+jdk1.7+tomcat7.0
* 서버 : Alibaba Cloud Windows Server 2008 64bits
* 플랫폼 요구 사항 : 서블릿 사용 주석지, 플랫폼 요구 사항 : J2EE6.0+, JDK6.0+, Tomcat7.0+
* 데모는 API 구문 분석에 더 중점을 둡니다.
* 테스트 지침을 위해 각 테스트 사례는 독립적이며 다른 방법에 의존하지 않습니다. 포장을 많이 고려하지 마십시오.
* 시연은 API 요구 사항에 따라 가능한 한 많이 수행됩니다. 목적 : 문서가 어떻게 사용되는지 이해하고 한 예에서 학습의 효과를 달성하고 다른 예제에 적용합니다.
* 지식 요구 사항 : Solid Java Foundation, HTTP 네트워크 커뮤니케이션 지식 이해, Javaweb, JSON 분석에 대한 충분한 이해
* 현재 시간 : 4/3/2016 5:32:57 PM, 이번에는 우세합니다.
2. 원본 문서 (초록)
문서 주소 : http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
WeChat Public 플랫폼의 개발에 액세스하려면 개발자는 다음 단계를 따라야합니다.
1. 서버 구성을 채우십시오
2. 서버 주소의 유효성을 확인하십시오
3. 인터페이스 문서를 기반으로 비즈니스 로직을 구현하십시오
3. 문서 이해
서버 주소의 유효성을 확인하십시오
1. API는 다음과 같이 소개됩니다.
개발자가 정보를 제출 한 후 WeChat 서버는 채워진 서버 주소 URL에 GET 요청을 보냅니다. GET 요청에는 서명, 타임 스탬프, Nonce, Echostr의 네 가지 매개 변수가 있습니다.
개발자는 서명을 확인하여 요청을 확인합니다 (아래에 확인 방법이 있음).
GET 요청이 WeChat 서버에서 나오는지 확인하면 Echostr 매개 변수 컨텐츠를 그대로 반환하면 액세스가 적용되어 개발자가되었습니다. 그렇지 않으면 액세스가 실패합니다.
암호화/점검 프로세스는 다음과 같습니다.
1) 토큰, 타임 스탬프 및 Nonce의 사전 순서 정렬
2) SHA1 암호화를 위해 3 개의 매개 변수 문자열을 하나의 문자열로 스플 라이스
3) 개발자가 얻은 문자열은 서명과 비교하여 WeChat에서 시작된 요청을 식별 할 수 있습니다.
2. 이해하십시오
이는 요청이 "get"모드에 있고 요청에 액세스하면 서명, 타임 스탬프, Nonce, Echostr의 네 가지 매개 변수를 반환합니다.
이 매개 변수를 수락 한 다음 처리해야합니다. 확인이 성공하면 수신 된 "echostr"가 반환됩니다. 그렇지 않으면 확인이 실패합니다.
검증 방법은 허용 된 3 개의 매개 변수 토큰, 타임 스탬프 및 비 세를 정렬 한 다음 SHA1 암호화를 정렬하고 마지막으로 서명과 비교하는 것입니다.
*암호화 된 문자열은 서명과 비교할 수 있습니다. 그것이 [API가 그것을 명확하게 설명하지 않을 수있는 경우] 동일하다면 "echostr"를 반환하고 성공적으로 확인하십시오.
3. 실현
httpservlet을 구현하고 doget 메소드를 과부하시키기 위해 서블릿 코어 스터글을 만듭니다.
매개 변수 준비
// 글로벌 토큰을 설정하면 개발자가 직접 설정합니다. API는 다음과 같은 방식으로 설명합니다. Token은 개발자가 의지에 따라 작성할 수 있습니다. // 생성 서명으로 사용됩니다 (토큰은 보안을 확인하기 위해 인터페이스 URL에 포함 된 토큰과 비교됩니다) 문자열 토큰 = "wgyscsf"; // API 설명에 따라 위의 4 개의 파라미터 문자열 서명 = Req.GetParameter ( "Signature")를 얻습니다. String timestamp = req.getParameter ( "timestamp"); 문자열 nonce = req.getParameter ( "nonce"); 문자열 echostr = req.getParameter ( "echostr");
API가 언급 한 세 단계에 따른 작업
// 1 단계 : 토큰, 타임 스탬프, nonce string [] parms = new String [] {Token, timestamp, nonce}; // 배열 배열에서 사전을 정렬 해야하는 문자열을 배열 (parms)에 정렬해야합니다. SHA1 암호화 [Baidu : Java SHA1 암호화] // 문자열 문자열 parmsstring = ""; // 여기에서 null이 될 수는 없습니다. for (int i = 0; i <parms.length; i ++) {parmsstring+= parms [i];} // SHA1 암호화 문자열 mparms = null; null; // 암호화 후 결과 ... //이 장소는 SHA1 암호화의 구현입니다. GET 요청은 WeChat 서버에서 나옵니다. Echostr 매개 변수 컨텐츠를 그대로 반환하면 액세스가 적용되어 개발자가 성공적으로 발생합니다. 그렇지 않으면 액세스가 실패합니다. *// 3 단계 : 개발자는 암호화 된 문자열을 얻고 서명과 비교하여 요청이 WeChat의 성공적인 액세스에서 비롯된 것을 식별 할 수 있습니다. system.out.println (tag + ":" + mparms + "--->" + signature); if (mparms.equals (signature)) {// system.out.println (tag + ":" + mparms + "---->" + signature); printwriter.write (echostr);} else {// 액세스 실패, // system.out.println (tag + "Access Evention");}를 다시 쓸 필요가 없습니다.4. 서버 구성을 채우십시오
1) 컨텐츠 서버 구성을 포함하여 주로 서버 및 WeChat 액세스 인터페이스입니다. WeChat 개발 플랫폼에 액세스하기 위해 자체 코드를 작성한 후 구성해야합니다.
2) 서버 작업 서버의 Tomcat을 열고 서면 코드를 WebApps 파일에 넣습니다.
3) WeChat 공공 플랫폼 운영
*WeChat 테스트 계정을 신청하십시오 (로그인으로 직접 스캔) : http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
*WECHAT 공개 플랫폼 테스트 번호를 열고 인터페이스 구성 정보를 구성하십시오. 구성은 다음과 같습니다
URL : http : // ip/weixinapidemo/coreservlet
토큰 : WGYSCSF
*제출, 구성 성공 및 실패를 제출할 때 상기시켜 줄 것입니다.
이 부분의 모든 작업 소스 코드는 직접 사용할 수 있습니다.
package com.gist.servlet; import java.io.ioexception; import java.io.printwriter; import java.security.messagedigest; import java.security.nosuchalgorithmexception; import java.util.arrays; import javax.servletexception; import javax javax.servlet.http.httpservlet; import javax.servlet.http.htttp.httpervletrequest; import javax.servlet.http.http.http.http.httpervletresponse;/*** @author gao yuan </n> 이메일 : [email protected] </n> 블로그. http://blog.csdn.net/wgyscsf </n> * 쓰기 기간 2016-4-3 4:34:05 pm */@webservlet ( "/coreservlet") public class coreservlet는 httpservlet {String tag = "coreservlet"; / * * 2 단계 : 개발자가 정보를 제출 한 후 서버 주소의 유효성을 확인하면 WeChat 서버는 채워진 서버 주소 URL에 GET 요청을 보냅니다. * GET 요청에는 서명, 타임 스탬프, Nonce, echoStr * 개발자가 서명을 확인하여 요청을 확인합니다 (아래에 확인 방법이 있음). GET 요청이 WeChat 서버에서 나오는지 확인하면 eCHOSTR 매개 변수 컨텐츠를 그대로 반환하십시오. 액세스가 적용되고 개발자가 성공적으로 발생합니다. 그렇지 않으면 액세스가 실패합니다. * * 암호화/점검 프로세스는 다음과 같습니다. 1. 1. 토큰, 타임 스탬프 및 Nonce 2의 사전 순서 순서 정렬 세 가지 매개 변수 문자열을 SHA1 암호화를위한 문자열로 스플 라이스. 시퀀스를 형성하는 변수. 이 방법은 알파벳 순서로 또는 소형 및 많은 순서로 소형에서 큰 시퀀스를 형성하는 것입니다. */ @override Protected Void doget (httpservletrequest req, httpservletrepsonse resp) servletexception, ioexception {// 인코딩 req.setcharacterencoding ( "utf-8"); resp.setContentType ( "html/text; charset = utf-8"); resp.setcharacterencoding ( "UTF-8"); // 출력 스트림 get stream printwriter printwriter = resp.getWriter (); // 글로벌 토큰을 설정하면 개발자가 직접 설정합니다. API는 다음을 설명합니다. 토큰은 개발자가 의지적으로 채울 수 있습니다. // 생성 서명으로 사용됩니다 (토큰은 보안을 확인하기 위해 인터페이스 URL에 포함 된 토큰과 비교됩니다) 문자열 토큰 = "WGYSCSF"; // API 설명에 따르면 위의 4 개의 매개 변수를 가져옵니다. string signature = req.getParameter ( "signature"); String timestamp = req.getParameter ( "timestamp"); 문자열 nonce = req.getParameter ( "nonce"); 문자열 echostr = req.getParameter ( "echostr"); // temp : 임시 인쇄, 반환 매개 변수 상황을 시청 // system.out.println (tag + ": 서명 :" + signature + ", timestamp :"// + timestamp + ", nonce :" + nonce + ", echostr :" + echostr); // API에서 언급 한 "암호화/검증 프로세스"에 따라 액세스합니다. 총 1 단계 : 정렬 사전 순서, 타임 스탬프, 3 개의 매개 변수 문자열 문자열 [] parms = new String [] {토큰, 타임 스탬프, nonce}; // 배열 배열에서 정렬 해야하는 문자열을 배열 (parms. 암호화 // 문자열 string parmsstring = ""; // 여기에서 null이 될 수는 없습니다. for (int i = 0; i <parms.length; i ++) {parmsstring+= parms [i]; } // SHA1 암호화 문자열 mparms = null; // 암호화 된 결과 MessageDigest 다이제스트 = null; try {digest = java.security.messagedigest.getinstance ( "sha"); } catch (nosuchalgorithmexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } digest.update (parmsstring.getBytes ()); 바이트 messageDigest [] = digest.digest (); // hex 문자열 생성 stringbuffer hexstring = new StringBuffer (); // 바이트 배열을 16 진수로 변환합니다 (int i = 0; i <messageDigest.length; i ++) {String ShaHex = integer.toHexString (messageDigest [i] & 0xff); if (shahex.length () <2) {hexstring.append (0); } hexstring.append (Shahex); } mparms = hexstring.toString (); // 암호화 결과/ * * API 요구 사항 : GET 요청이 WeChAT 서버에서 나온지 확인하면 eCHOSTR 매개 변수 컨텐츠를 그대로 반환하면 액세스가 효력을 발휘하여 개발자가되었습니다. 그렇지 않으면 액세스가 실패합니다. *// 3 단계 : 개발자는 암호화 된 문자열을 얻고 서명과 비교하여 요청이 WeChat의 성공적인 액세스에서 비롯된 것을 식별 할 수 있습니다. System.out.println (tag + ":" + mparms + "--->" + 서명); if (mparms.equals (signature)) {// system.out.println (tag + ":" + mparms + "---->" + signature); printwriter.write (echostr); } else {// 액세스 실패, // system.out.println (tag + "ac }} @override protected void dopost (httpservletrequest req, httpservletresponse resp) servletexception, ioexception {doget (req, resp); }}
Java Wechat Development API의 첫 번째 기사가 여기에 소개됩니다. 앞으로 업데이트 된 컨텐츠에 계속주의를 기울이기를 바랍니다. 감사합니다!