>  기사  >  위챗 애플릿  >  위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명

위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-26 14:08:422241검색

매개변수 이름

http://www.php.cn/wiki/835.html" target="_blank">width="346" valign="top" style="word-break:break-all">  描述
appId 应用ID 登录微信公众号管理平台可查询
timestamp  必填,生成签名的时间戳 
nonceStr 必填,生成签名的随机串 
signature 必填,签名,见附录1 

의 매개변수는 이전 장에서 아주 명확하게 설명했습니다. 테이블을 만드는 이유는 성공하고 싶기 때문입니다. WeChatjsapi에 액세스하세요. 이 네 가지 매개변수는 자격 증명으로, 열려면 네 개의 열쇠가 있어야 하는 문과 같습니다. 그 중 하나는 필수입니다. .

다음의 경우는 java의 servlet으로 만든 점프 페이지를 사용하며, SpringMVC은 사용하지 않고 컨트롤러 경로로 대체할 수 있습니다.

WxJsAPIServlet 코드:

package com.test;

import java.io.IOException;

java.io.PrintWriter 가져오기;

java.util.가져오기;

javax.servlet.ServletException 가져오기;

javax.servlet.http.HttpServlet 가져오기;

가져오기 javax.servlet.http.HttpServletRequest;

가져오기 javax.servlet.http.HttpServletResponse;

가져오기 com.test.util.JsapiTicketUtil;

com.test.util 가져오기 .Sign;

공개 클래스 WxJsAPIServlet 확장 HttpServlet {

/**

     * 객체의 생성자.

     */

    공개 WxJsAPIServlet( ) {

        super();

    }

/**

     * 서블릿 파기. 

     */

    public void destroy() {

        super.destroy(); // 로그에 '파기' 문자열을 넣습니다

        // 여기에 코드를 입력하세요

    }

    /**

     * 서블릿의 doGet 메소드. 

     *

     * 이 메서드는 양식의 태그 값 메서드가 get과 같을 때 호출됩니다.

     * 

     * @param 클라이언트가 서버에 보내는 요청

     * @param 응답 서버가 클라이언트에 보내는 응답

     * @throws ServletException 오류가 발생한 경우

     * 오류가 발생한 경우 @throws IOException

     */

    public void doGet(HttpServletRequest 요청, HttpServletResponse 응답)

            ServletException, IOException 발생 {

        System.out.println("wxJSAPI========== ==========");

        String jsapi_ticket =JsapiTicketUtil.getJSApiTicket();;

        Map map = Sign.sign(jsapi_ticket, "http://www.vxzsk.com/weChat/wxJsAPIServlet");

        문자열 타임스탬프 = map.get("timestamp");

        문자열 nonceStr = map.get("nonceStr");

        String signature = map.get("signature");

        String appId = "应용Id";

        요청 .setAttribute("appId", appId);

        request.setAttribute("timestamp", timestamp);

        request.setAttribute("signature",signature);

request.setAttribute("nonceStr", nonceStr);

        request.getRequestDispatcher("jsapi/jsapi.jsp").forward(요청, 응답);

    }

    /**

     * 서블릿의 doPost 메소드. 

     *

     * 이 메소드는 양식의 태그 값 메소드가 post와 같을 때 호출됩니다.

     *

     * @param 요청은 클라이언트가 서버로 보내는 요청입니다

     * @param 응답 서버에서 클라이언트로 보내는 응답

     * @throws ServletException 오류가 발생한 경우

     * @throws IOException 오류가 발생한 경우

     * /

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            ServletException, IOException 발생 {

      this.doGet(요청, 응답);

       }

/**

     * 서블릿 초기화. 

     *

     * 오류가 발생하면 @throws ServletException 

     */

    public void init() 에서 ServletException이 발생함 {

       // 여기에 코드를 입력하세요

    }

}

第44行是生成 jsapi_ticket的工具类,下面有贴流工具类的代码。

第45行 Sign类의 기호 방법,把表格中의 最后三个参数封装放到Map集信中了. 。

第49行appId替换成你自己的应用id,如果不知道应用id 可登陆微信公众平台管理中心查询。

servlet对应的web.xml代码

    This is the description of my J2EE component

    display-name>This is the display name of my J2EE component

    WxJsAPIServlet

    com.test.WxJsAPIServlet

  

    WxJsAPIServlet

    /wxJsAPIServlet

  

    이것은 내 J2EE 구성요소 설명    디스플레이- name>이것은 내 J2EE 구성요소    WxJsAPIServlet    com의 표시 이름입니다. test.WxJsAPIServlet  
    WxJsAPIServlet> ;    /wxJsAPIServlet  生成签name算法类Sign代码:
jsapi_ticket 매개변수를 생성하는 도구 클래스 JsapiTicketUtil 코드

package com.test.util;

/***

* V자형 지식베이스 www.vxzsk.com

*/

import java.util.UUID;

java.util.Map 가져오기;

java.util.HashMap 가져오기;

java.util.Formatter 가져오기;

java.security.MessageDigest 가져오기 ;

가져오기 java.security.NoSuchAlgorithmException;

가져오기 java.io.UnsupportedEncodingException;  

  public class Sign {

    public static Map sign(String jsapi_ticket, String url) {

        Map ret = new HashMap();

        String nonce_str = create_nonce_str();

        문자열 타임스탬프 = create_timestamp();

        문자열 string1 ;

        문자열 서명 = "";

        //注意这里参数name必须全part 小写 且必须有序

        string1 = "jsapi_ticket=" + jsapi_ticket +

"&noncestr=" + nonce_str +

                  "×tamp=" + timestamp +

                "&url=" + url;

        System.out.print ln(문자열1);

        시도

        {

            MessageDigest crypt = MessageDigest.getInstance("SHA-1");

            crypt. 재설정 ();

            crypt.up날짜(string1.getBytes("UTF-8"));

            서명 = byteToHex(crypt.digest() );

        }

        catch (NoSuchAlgorithmException e)

        {

           e.printStackTrace();

        }

        catch (UnsupportedEncodingException e)

        {

            e.printStackTrace();

        }

        ret.put("url", url);

        ret.put("jsapi_ticket", jsapi_ticket);

        ret.put("nonceStr", nonce_str);

        ret.put("timestamp", timestamp) ;

        ret.put("signature", signature);

        return ret;

    }

    private static String String byteToHex (최종 바이트[] 해시) {

        Formatter formatter = new Formatter();

       (byte b : hash)

        {

            formatter.format("%02x", b);

        }

문자열 결과 = formatter.toString();

formatter.close();

반환 결과;

}

private static String create_nonce_str () {

return UUID.randomUUID().toString();

}

private static String create_timestamp() {

return Long.toStr ing (System.currentTimeMillis() / 1000);

}

public static void main(String[] args) {

String jsapi_ticket = JsapiTicketUtil .getJSApiTicket();

                  // URL은 동적으로 얻어야 ​​하며 하드코딩할 수 없습니다. /url은 요청한

액션

또는 컨트롤러 주소이며 메소드는 jsapi Map ret = sign(jsapi_ticket, url)

for (Map.Entry 항목: ret.entrySet()) {

System.out.println(entry.getKey() + ", " + Entry.getValue());

}

};

}

package com.test.util;

import java.io.BufferedReader;

java.io.IOException 가져오기;

java.io.InputStreamReader 가져오기;

java.net.MalformedURLException 가져오기;

java.net.URL 가져오기;

java.net.URLConnection 가져오기;

net.sf.json.JSONObject;

com.test.weixin.TestAcessToken;

공용 클래스 JsapiTicketUtil 가져오기{

    /***

* 요청 받기 시뮬레이션

* @param url

* @param charset

* @param timeout

* @return

*/

     public static String sendGet(String url, String charset, int timeout)

      {

        문자열 결과 = "";

        시도

        {

          URL u = 새 URL(url);

          시도

          {

            URLConnection 연결 = u.openConnection();

            conn.connect();

           conn.setConnectTimeout(timeout);

            BufferedReader in = new BufferedReader(new Input StreamReader(conn.getInputStream (), 문자 집합));

            String line="";

           동안 ((line = in.readLine()) != null)

            {

              결과 = 결과 + 라인;

            }

            in.close();

          } catch (IOException e) {

            결과 반환;

          }

        }

        catch (MalformedURLException e)

        {

          반환 결과;

        }

        반환 결과;

      }

     공용 정적 문자열 getAccessToken (){

            String appid="你公众号基本设置里的应用id";//应용 ID

            String appSecret="你公众号基本设置里的应用密钥";//(应용密钥)

            문자열 url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+"";

            문자열 backData=TestAcessToken.sendGet(url, "utf-8", 10000);

            String accessToken = (String) JSONObject.fromObject(backData).get("access_token");  

            return accessToken;

     }

    public static String getJSApiTicket(){ 

//토큰 가져오기

String acess_token= JsapiTicketUtil.getAccessToken();

String urlStr = "https://api.weixin.qq.com/cgi-bin/ticket/ getticket?access_token="+acess_token+"&type=jsapi";

String backData=TestAcessToken.sendGet(urlStr, "utf-8", 10000);

String ticket = (String) JSONObject .fromObject(backData).get("ticket");

티켓 반환

}

public static void main(String[] args) {

String jsapiTicket = JsapiTicketUtil.getJSApiTicket();

System.out.println("WeChat jsapi 호출 티켓은 다음과 같습니다. "+jsapiTicket);

}

}

위 코드에는 access_token을 얻는 방법이 있으니, 매개변수를 직접 변경해주세요

jsapi.jsp 코드

문자열 경로 = request.getContextPath();

문자열 basePath = request.getScheme()+"://"+request.getServerName()+":"+request .getServerPort()+path+"/";

%>

HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

  head>

    ">

    

微信jsapi测试-V型知识库

    뷰포트" content="width=320.1,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">

   < ;script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"> 스크립트> 

  

  

  

欢迎来到微信jsapi测试界면-V型知识库 h3>

  

     

timestamp:${ timestamp}

  

     

nonceStr:${ nonceStr}

  

     

서명:${ 서명}

  

     

appId:${ appId}

  

    onclick="uploadImg();"/>  

    获取当前位置" onclick="getLocation();"/>  

  

  

  wx.config({  

    디버그: true, // 开启调试模式, 调用的所有api的返回值会在客户端alert Publish 来,若要查看传入的参数,可以在pc端打开,参数信息会communicalog打出,仅在pc端时才会打印。  

    appId: '${appId}', // 必填,公众号的唯一标识  

    타임스탬프: '${ timestamp}' , // 必填,生成签名的时间戳  

    nonceStr: '${ nonceStr}', // 必填,生成签名 随机串  

    서명: '${ signature}' ,// 必填,签name,见附录1  

    jsApiList: ['chooseImage','getLocation','openLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2  

});  

wx.ready(function(){  

    alert("ready");  

});  

wx.error(function (res) {

  alert("调用微信jsapi返回的状态:"+res.errMsg);

});

function uploadImg() {  

    wx.checkJsApi({  

        jsApiList: ['chooseImage','openLocation','getLocation'], // 需要检测的JS接口列表,所有JS接口列表见附录2,  

        성공: 함수(res) {  

            // 以键值对船의 모양이 式返回,可用的api值true,不可为false  

                                                                                                                             .chooseImage ({

개수

: 1, // 기본값 9

SizeType: ['원본', '압축'], // 가능 원본 사진인지 압축 차트인지 지정, 기본값은 둘 다

sourceType: ['album', 'camera'], // 소스가 앨범인지 카메라인지 지정할 수 있으며 기본값은 둘 다

성공: function (res ) {

var localIds = res.localIds; // 선택한 사진의 로컬 ID 목록을 반환하며, localId는 src

속성으로 표시될 수 있습니다.

img 태그

이미지

Alert(localIds) } }); 🎜> }  

});  

}

function getLocation() {

var latitude = ""; = "";

wx.getLocation({

type: 'gcj02', // 기본값은 wgs84의 GPS 좌표입니다. openLocation에 대해 화성 좌표를 직접 반환하려면, 'gcj02'를 전달할 수 있습니다

Success: function (res) {

            latitude = res.latitude; // 위도, 부동 소수점 수, 범위는 90 ~ -90입니다.                          ~               위도 부동 소수점 수, 범위는 90 ~ -90입니다.

var speed = res.speed; // 초당 미터 단위의 속도

var Accuracy = res.accuracy; // 위치 정확도

wx .openLocation( {

                                                                                                                  위도, // 위도, 부동소수점수, 범위는 90~-90입니다.

이름: '현재 위치', // 위치 이름

주소: ' currentLocation', // 주소 세부 정보

축척: 26, //

지도

확대/축소 수준, 모양 값, 범위는 1~28입니다. 기본값은 최대입니다.

Infourl: '' // 하이퍼링크 를 클릭하면 위치 인터페이스 하단에서

})

}

테스트 시나리오: WeChat 공식 계정을 열고 메뉴를 클릭하여 요청 서블릿 주소로 응답한 후 jsapi.jsp 인터페이스 링크 주소로 이동하면 인터페이스가 나타납니다. WeChat jsapi를 성공적으로 호출하려면 창 정보가 실패했으므로 다음 코드가 필요합니다.

WeChatServlet은 WeChat에 연결된 서블릿입니다. 확실하지 않은 학생들은 WeChat 개발 튜토리얼을 배울 수 있습니다.

package com.test;

import java.io.IOException;

java.io.PrintWriter 가져오기;

java.util.Date 가져오기;

java.util.Map 가져오기;

javax.servlet.ServletException 가져오기;

javax.servlet.http.HttpServlet 가져오기;

javax.servlet.http.HttpServletRequest 가져오기;

javax.servlet.http.HttpServletResponse;

com.test.message.resp.TextMessage 가져오기;

import com.test.util.MessageUtil;

/**

* 핵심 요청 처리 클래스

* doGet 메소드에 weixinTest가 있습니다. 이는 공공 관리 플랫폼에서 직접 설정한 토큰입니다.

*/

공개 클래스 WeChatServlet은 HttpServlet 확장 {

    비공개 정적 최종 긴 serialVersionUID = 1508798736675904038L;

    /**

* 요청이 WeChat 서버에서 오는지 확인

*/

    public void doGet(HttpServletRequest request, HttpServletResponse response) throw ServletException, IOException {

        System.out.println(" v w w www.vxzsk.com ");

// 微信 加密 签名 签名 String signature = request.getParameter ("signature ");

시스템. out.println("微信加密签namesignature:------------"+signature);

        / 时间戳

        문자열 타임스탬프 = request.getParameter("timestamp");

        System.out.println("时间戳timestamp:-- ------"+timestamp);

        // 随机数

        String nonce = request.getParameter("nonce");

        System.out.println ("随机数nonce:-------------------------"+nonce);

        / 随机

字符串

        String echostr = request.getParameter("echostr");

        System.out.println("随机字符串echostr:------------ ----------"+echostr);

        //System.out.println("token------ ----:"+token);

        PrintWriter out = response.getWriter();

        // 过检验signature对请求进行校验,若校验成功则原样返回echostr ,表示接入成功,否则接入失败

        if (SignUtil.checkSignature("weixinTest" , signature, timestamp, nonce)) {

           out.print(echostr );

           //System.out.println("这是:"+echostr);

        }

        out.close();

        out = null;

    }

    /**

* 위챗 서버에서 보낸 메시지 처리

* 글 상단에 예제 소스코드 다운로드 링크가 있습니다

*/

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

        System.out .println("V型知识库하라创www.vxzsk.com");

        System.out.println("微信服务器发来消息------------");

        // 将请求、响应的编码均设置为UTF-8(防止中文乱码)

        request.setCharacterEncoding("UTF-8");

        응답. setCharacterEncoding("UTF-8");

String respMessage = null;

try{

//xml 요청 구문 분석

Map requestMap = MessageUtil.parse Xml(request);/ / WeChat에서 보낸 xml 형식을 받습니다. 🎜>

String toUserName = requestMap.get("ToUserName");

//메시지 유형

String msgType = requestMap.get("MsgType ");

//메시지 생성 시간

String createTime = requestMap.get("CreateTime");

//WeChat 서버에서 게시한 콘텐츠

String weixinContent = requestMap.get ("Content");

System.out.println("공개 계정 사용자가 보낸 문자 메시지 내용: "+weixinContent);

//다음 이전 장인 자체 캡슐화 도구 클래스

if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {//텍스트 유형 사용자 응답 "hh"를 사용합니다. WeChat은 자동으로 이 메시지에 응답합니다

/ /줄 바꿈 문자 메시지로 답장 > textMessage.setCreateTime(new Date().getTime());

textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);

textMessage.setFuncFlag(0);

//사용자에게 응답 개행 문자열 n은 개행을 나타냅니다.

                        StringBuffer   buffer   =   new   StringBuffer();                                                                                's' 's'를 사용합니다. ‐ to ‐n‐은 줄 바꿈을 나타냅니다.

buffer.append("환영합니다").append("n");

buffer.append("WeChat jsapi 테스트 인터페이스").append("nn");

buffer.append("이 메시지는 'hh'라는 단어로 답장하면 표시될 수 있습니다.");

}

else

{

buffer.append("안녕하세요. 저는 V자 지식 베이스입니다.");

}

textMessage. setContent(buffer.toString());

respMessage = MessageUtil.textMessageToXml(textMessage);//xml 형식으로 변환

}

//응답 응답 메시지

PrintWriter out = response.getWriter();

out.print(respMessage); out.close();

}catch(예외 e) {

e.printStackTrace();

}

}

}

MessageUtil 도구 클래스

package com.test.util;

import java.io.InputStream;

java.io.Writer 가져오기;

java.util.HashMap 가져오기;

java.util.List 가져오기;

java.util.Map 가져오기;

javax.servlet.http 가져오기. HttpServletRequest;

import org.dom4j.문서;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

com.test.message.resp.Article 가져오기;

com.test.message.resp.MusicMessage 가져오기;

com.test.message.resp.NewsMessage 가져오기;

com.test.message.resp.TextMessage 가져오기;

com.thoughtworks.xstream.XStream 가져오기;

com.thoughtworks.xstream.core.util.QuickWriter 가져오기 ;

com.thoughtworks.xstream.io.HierarchicalStreamWriter 가져오기;

com.thoughtworks.xstream.io.xml.PrettyPrintWriter 가져오기;

com.thoughtworks.xstream 가져오기. io.xml.XppDriver;

/**

* 메시지 도구 수업

*/

공개 클래스 MessageUtil {

    /**

* 반환 메시지 유형: 텍스트

*/

public static final String RESP_MESSAGE_TYPE_TEXT = "text";

    /**

* 반환 메시지 유형: 음악

*/

    public static final String RESP_MESSAGE_TYPE_MUSIC = "music";

    /**

* 반환 메시지 유형: 그래픽

*/

    public static final String RESP_MESSAGE_TYPE_NEWS = "news";

    /**

* 요청 메시지 유형: 텍스트

*/

    public static final String REQ_MESSAGE_TYPE_TEXT = "text";

    /**

* 요청 메시지 유형: 사진

*/

    공개 정적 최종 문자열 REQ_MESSAGE_TYPE_IMAGE = "image";

    /**

* 요청 메시지 유형: 링크

*/

공개 정적 최종 문자열 REQ_MESSAGE_TYPE_LINK = "링크";

    /**

* 요청 메시지 유형: 지리적 위치

*/

    공개 정적 최종 문자열 REQ_MESSAGE_TYPE_LOCATION = "위치";

    /**

* 요청 메시지 유형: 오디오

*/

    public static final String REQ_MESSAGE_TYPE_VOICE = "voice";

    /**

* 요청 메시지 유형: 푸시

*/

    public static final String REQ_MESSAGE_TYPE_EVENT = "event";

    /**

* 이벤트 종류 : 구독

*/

    공개 정적 최종 문자열 EVENT_TYPE_SUBSCRIBE = "구독";

    /**

* 이벤트 종류 : unsubscribe (unsubscribe)

*/

공개 정적 최종 문자열 EVENT_TYPE_UNSUBSCRIBE = "구독 취소";

    /**

* 이벤트 종류 : CLICK ( 맞춤 메뉴 클릭 이벤트)

*/

    공개 정적 최종 문자열 EVENT_TYPE_CLICK = "클릭";

    /**

     * 解析微信发来的请求(XML)

     * 

     * @param 요청

     * @return

     * @throws 예외

*/

@SuppressWarnings("unchecked")

public static MapparseXml(HttpServletRequest request) throws Exception {

// 구문 분석함 결과는 HashMap

Map map = new HashMap();

// 요청에서 입력 스트림 가져오기

InputStream inputStream = request.getInputStream();

//입력 스트림 읽기

SAXReader reader = new SAXReader();

문서 문서 = reader.read(inputStream) ;

// xml 루트 요소 가져오기

Element root = document.getRootElement();

// 루트 요소의 모든 하위 노드 가져오기

List elementList = root.elements();

// 모든 하위 노드 순회

for (Element e : elementList) {

map.put( e.getName( ), e.getText());

}

// 리소스 해제

inputStream.close();

inputStream = null;

반환 맵;

}

/**

* xml로 변환된 문자 메시지 객체

* @param textMessage 문자 메시지 객체

* @return xml

*/

public static String textMessageToXml(TextMessage textMessage) {

xstream .alias("xml", textMessage.getClass());

return xstream.toXML(textMessage);

}

/**

* xml로 변환된 음악 메시지 객체

* @param musicMessage 음악 메시지 객체

* @return xml

*/

public static String musicMessageToXml(MusicMessage musicMessage) {

xstream.alias("xml", musicMessage.getClass());

return xstream.toXML( musicMessage);

}

/**

* 그래픽 메시지 객체를 xml로 변환

* @param newsMessage 그래픽 메시지 객체

* @return xml

*/

public static String newsMessageToXml(NewsMessage newsMessage) {

xstream.alias(" xml", newsMessage .getClass());

xstream.alias("item", new Article().getClass());

return xstream.toXML(newsMessage);

}

/**

* CDATA 블록을 지원하도록 xstream 확장

* @date

*/

private static XStream xstream = new XStream(new XppDriver() {

public HierarchicalStreamWriter createWriter(Writer out ) {

새로운 PrettyPrintWriter(out) 반환 {

               // 对所有xml节点的转换本增加CDATA标记

               부울 cdata = true;

                @SuppressWarnings("선택 해제됨")

               public void startNode(String name, Class clazz) {

                   super.startNode(name, clazz);

               }

                protected void writeText( QuickWriter 작성자, 문자열 텍스트) {

                   if (cdata) {

                     writer.write("

                      writer.write(text) ;

                       writer.write(" ]]>");

                    } 그렇지 않으면 {

                    writer.write(text);

                   }

               }

            } ;

        }

    });

}

TextMessage代码

package com.test.message.resp;

public class TextMessage extends BaseMessage {

    // 回复的消息内容

    private String Content;

    public String getContent() {

        return Content;

    }

    public void setContent(String content) {

        Content = content;

    }

}

패키지 com.test.message.resp;
공개 클래스 TextMessage는 BaseMessage를 확장합니다. >    private String Content;    public String getContent() {        return Content;    }    public void setContent(String content) {         콘텐츠 = content;    }}BaseMessage代码

package com.test.message.resp;

/**

 * 消息基类(公众帐号 -> 普通用户)

 */

public class BaseMessage {

    // 接收方帐号(收到的OpenID)

    private String ToUserName;

    // 开发者微信号

    private String FromUserName;

    // 消息创建时间 (整型)

    private long CreateTime;

    // 消息类型(text/music/news)

    private String MsgType;

    // 位0x0001被标志时,星标刚收到的消息

    private int FuncFlag;

    public String getToUserName() {

        return ToUserName;

    }

    public void setToUserName(String toUserName) {

        ToUserName = toUserName;

    }

    public String getFromUserName() {

        return FromUserName;

    }

    public void setFromUserName(String fromUserName) {

        FromUserName = fromUserName;

    }

    public long getCreateTime() {

        return CreateTime;

    }

    public void setCreateTime(long createTime) {

        CreateTime = createTime;

    }

    public String getMsgType() {

        return MsgType;

    }

    public void setMsgType(String msgType) {

        MsgType = msgType;

    }

    public int getFuncFlag() {

        return FuncFlag;

    }

    public void setFuncFlag(int funcFlag) {

        FuncFlag = funcFlag;

    }

}

효과는 다음과 같습니다.

위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명

위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명

위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명

위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명

위 내용은 위챗에서 개발한 위챗 jsapi, java의 사전접속방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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