>  기사  >  위챗 애플릿  >  WeChat 공개 계정을 위한 맞춤형 메뉴 개발 경험 요약

WeChat 공개 계정을 위한 맞춤형 메뉴 개발 경험 요약

高洛峰
高洛峰원래의
2017-03-22 16:10:451963검색

이 기사는 WeChat 공개 계정용 사용자 정의 메뉴 개발 경험 요약을 공유합니다

    开发公司的微信公众账号,在没人指导没有人商量的情况下没少查资料、逛论坛。其中有多少酸甜苦辣,相信能进来看见我的帖子的能体会的到。一年多来为了应付公司的各种需求没时间整理,今天我就把详细的流程写下来供同样遇到问题的参考。微信公众账号几种分类相信大家都有了解。 订阅号我表示无能为力。除非你能认证通过。废话少说开撸。
     
    自定义菜单操作流程其实很简单 ,就是执行一段Java程序 将你公众账号的appid和封装的菜单发送到腾讯服务器,腾讯服务器会根据你请求参数appid和封装的菜单添加到对应的公众账号,一定要罗嗦一句, 在Java 程序中执行一次 main 方法就可以,下次修改重新执行,不过会有缓存,取消重新关注就可以了。
    1 新建按钮基类   
        public class Button {
            //按钮名称
            private String name;
         
            public String getName() {
                return name;
            }
         
            public void setName(String name) {
                this.name = name;
            }
        }
    2,根据业务需求新建不同的按钮类 
         
    /**
     * view类型的按钮  点击跳转链接
     * 
     */
    public class ViewButton extends Button {
        private String type;
        private String url;
     
        public String getType() {
            return type;
        }
     
        public void setType(String type) {
            this.type = type;
        }
     
        public String getUrl() {
            return url;
        }
     
        public void setUrl(String url) {
            this.url = url;
        }
    }

/**

* 클릭형 버튼은 입력형 = '버튼'과 유사하게 캡쳐된 키를 기준으로 해당 업무를 처리합니다.*/

public class ClickButton은 Button을 확장합니다 {

비공개 문자열 유형;

비공개 문자열 키;

공개 문자열 getType() {

반환 유형;

}

공개 무효 setType(문자열 유형) {

this.type = 유형;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

}

3 유형과 일치하는 버튼을 만들려면 직설적으로 기본 메뉴 컨테이너

/**

* 복합형 버튼

*

*/

public class ComplexButton extends Button {

private Button[] sub_button ;

public Button[] getSub_button() {

return sub_button;

}

public void setSub_button(Button[] sub_button) {

this.sub_button = sub_button;

}

}

4 3개의 메인 메뉴를 담는 메뉴 클래스 생성

/* *

* 메뉴

*/

공개 클래스 메뉴 {

비공개 버튼[] 버튼;

공개 버튼[] getButton() {

복귀 버튼 ;

}

public void setButton(Button[] 버튼) {

this.button = 버튼;

}

}

5 Tencent 인터페이스

/**

* 상품권

*

*/

공개 클래스를 호출하기 위한 기본 메소드 실행을 준비하기 위해 호출 자격 증명 클래스 토큰을 생성합니다. 토큰 {

//인터페이스 액세스 자격 증명

private String accessToken;

// 자격 증명 유효 기간, 단위: 초

private intexpiresIn;

public String getAccessToken( ) {

return accessToken;

}

public void setAccessToken(String accessToken) {

this.accessToken = accessToken;

}

public int getExpiresIn() {

returnexpiresIn;

}

public void setExpiresIn(intexpiresIn) {

this .expiresIn =expiresIn;

}

}

다음 코드에서는 클래스만 설명합니다. 특정 코드 기능에 대한 설명을 참조하세요.

6 Tencent 인터페이스 호출 준비

(1) 공통 도구 클래스 생성

/**

* 일반 도구

*

*/

public class CommonUtil {

private static Logger log = LoggerFactory.getLogger(CommonUtil.class);

/**

* 인터페이스 액세스 자격 증명 가져오기

*

* @param appid 자격 증명

* @param appsecret key

* @return

*/

public static Token getToken(String appid, String appsecret ) {

// 자격증명 취득(GET)

String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET ";

토큰 토큰 = null;

String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);

// 자격 증명을 얻기 위해 GET 요청 시작

JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);

if (null != jsonObject) {

try {

토큰 = 새 토큰();

token.setAccessToken(jsonObject.getString("access_token"));

token.setExpiresIn(jsonObject.getInt("expires_in") );

} catch (JSONException e) {

// 토큰

획득 실패 토큰 = null;

}

}

토큰 반환;

}

/**

* https 요청 보내기

*

* @param requestUrl 요청 주소

* @param requestMethod 요청 메소드(GET, POST)

* @param outputStr 제출된 데이터

* @return JSONObject (JSONObject.get(key)를 통해 json 객체의 속성 값을 가져옴)

*/

public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr ) {

JSONObject jsonObject = null;

try {

// SSLContext 객체를 생성하고 지정한 신뢰 관리자로 초기화합니다.

TrustManager[ ] tm = { new MyX509TrustManager() };

SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");

sslContext.init(null, tm, new java.security .SecureRandom( ));

// 위의 SSLContext 객체에서 SSLSocketFactory 객체를 가져옵니다.

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = 새 URL( requestUrl);

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

conn.setSSLSocketFactory(ssf);

conn.setDoOutput(true);

conn.setDoInput (true);

conn.setUseCaches(false);

// 요청 방법 설정(GET/POST)

conn.setRequestMethod(requestMethod);

// outputStr이 null이 아닌 경우 출력 스트림에 데이터 쓰기

if (null != outputStr) {

OutputStream outputStream = conn.getOutputStream();

// 인코딩 형식에 주의하세요

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

}

// 입력 스트림에서 반환된 콘텐츠를 읽습니다.

InputStream inputStream = conn.getInputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8") ;

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String str = null;

StringBuffer 버퍼 = new StringBuffer();

while (( str = bufferedReader.readLine()) != null) {

buffer.append(str);

}

// 리소스 해제

bufferedReader .close() ;

inputStreamReader.close();

inputStream.close();

inputStream = null;

conn.disconnect() ;

jsonObject = JSONObject.fromObject(buffer.toString());

} catch (ConnectException ce) {

log.error("연결 시간 초과: {}" , ce);

} catch(예외 e) {

log.error("https 요청 예외: {}", e);

}

return jsonObject ;

}

}

(2) 신뢰 관리자 생성

package com.test.util;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

/**

* 신뢰관리자

*

*/

public class MyX509TrustManager Implements > }

// 서버측 인증서 확인

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

}

// 신뢰할 수 있는 X509 인증서 배열을 반환합니다

public 7 위 작업을 완료한 후 사용자 정의 메뉴를 생성할 수 있습니다. 사용자 정의 메뉴 관리 클래스를 만듭니다. appId 및 appSecret을 할당하고 기본 메서드를 실행합니다.

패키지 com.test.menu;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

net.sf를 가져옵니다. json.JSONObject;

import com.test.bean.Button;

import com.test.bean.ComplexButton;

import com.test.bean.Menu;

import com.test.bean.Token;

import com.test.bean.ViewButton;

import com.test.util.CommonUtil;

/**

* 메뉴 매니저 클래스

*

*/

공용 클래스 MenuManager {

개인 정적 로거 로그 = LoggerFactory.getLogger(MenuManager.class);

/**

* 메뉴 구조 정의

* @return

*/

private static Menu getMenu() {

//하위 메뉴 정의

ViewButton btn1 = new ViewButton();

btn1.setName( " 하위 메뉴 1");

btn1.setType("view");

btn1.setUrl("http://www.baidu.com");

ViewButton btn2 = new ViewButton();

btn2.setName("하위 메뉴 2");

btn2.setType("view");

btn2.setUrl("http ://www.baidu.com");

ViewButton btn3 = new ViewButton();

btn3.setName("하위 메뉴 3");

btn3.setType ("view");

btn3.setUrl("http://www.baidu.com");

ViewButton btn4 = new ViewButton();

btn4 .setName("하위 메뉴 4");

btn4.setType("view");

btn4.setUrl("http://www.baidu.com" );

ComplexButton mainBtn1 = new ComplexButton();

mainBtn1.setName("메인 메뉴 1");

mainBtn1.setSub_button(new Button[] { btn1, btn2});/ /WeChat은 최대 5개의 하위 메뉴를 규정합니다

ComplexButton mainBtn2 = new ComplexButton();

mainBtn2.setName("Main Menu 2");

mainBtn2 .setSub_button(new Button [] { btn3});

ComplexButton mainBtn3 = new ComplexButton();

mainBtn3.setName("메인 메뉴 3");

mainBtn3 .setSub_button(new Button [] {btn4});

메뉴 메뉴 = new Menu();

menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });

return menu;

}

public static void main(String[] args) {

// 공개 계정의 유일한 자격 증명

1


String appId = "";

//공개 계정 고유 인증서 키

String appSecret = "";

// 자격 증명을 얻기 위해 인터페이스를 호출합니다.

Token token = CommonUtil.getToken(appId, appSecret);

if (null != token) {

// 메뉴 생성

boolean result = createMenu(getMenu(), token.getAccessToken());

// 메뉴 생성 결과 판단

if (result )

log.info("메뉴가 생성되었습니다!");

else

log.info("메뉴 생성에 실패했습니다!");

}

}

/**

* 메뉴 만들기

*

* @param 메뉴 메뉴 인스턴스

* @param accessToken 자격 증명

* @return 진정한 성공 거짓 실패

*/

public static boolean createMenu(메뉴 메뉴, String accessToken) {

부울 결과 = false ;

String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";

String url = menu_create_url.replace(" ACCESS_TOKEN", accessToken);

// 메뉴 객체를 json 문자열로 변환

String jsonMenu = JSONObject.fromObject(menu).toString();

// 메뉴 생성을 위한 POST 요청 시작

JSONObject jsonObject = CommonUtil.httpsRequest(url, "POST", jsonMenu);

if (null != jsonObject) {

int errorCode = jsonObject.getInt("errcode");

String errorMsg = jsonObject.getString("errmsg");

if (0 == errorCode) {

result = true ;

} else {

result = false;

log.error("메뉴 오류 코드를 생성하지 못했습니다:{} errmsg:{}", errorCode, errorMsg);

}

}

결과 반환;

}

}

위 내용은 WeChat 공개 계정을 위한 맞춤형 메뉴 개발 경험 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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