Heim  >  Artikel  >  WeChat-Applet  >  Zusammenfassung der Erfahrungen bei der Entwicklung benutzerdefinierter Menüs für öffentliche WeChat-Konten

Zusammenfassung der Erfahrungen bei der Entwicklung benutzerdefinierter Menüs für öffentliche WeChat-Konten

高洛峰
高洛峰Original
2017-03-22 16:10:451975Durchsuche

Dieser Artikel enthält eine Zusammenfassung der Erfahrungen bei der Entwicklung benutzerdefinierter Menüs für öffentliche WeChat-Konten

    开发公司的微信公众账号,在没人指导没有人商量的情况下没少查资料、逛论坛。其中有多少酸甜苦辣,相信能进来看见我的帖子的能体会的到。一年多来为了应付公司的各种需求没时间整理,今天我就把详细的流程写下来供同样遇到问题的参考。微信公众账号几种分类相信大家都有了解。 订阅号我表示无能为力。除非你能认证通过。废话少说开撸。
     
    自定义菜单操作流程其实很简单 ,就是执行一段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;
        }
    }

/**

* Die Schaltfläche „Klicktyp“ ähnelt dem Eingabetyp = „Schaltfläche“. Geben Sie den Schlüssel an, um das entsprechende Geschäft basierend auf dem erfassten Schlüssel zu verarbeiten*/

öffentliche Klasse ClickButton erweitert Button {

privater String-Typ;

privater String-Schlüssel;

öffentlicher String getType() {

Rückgabetyp;

}

public void setType(String type) {

this.type = type;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

}

3 Erstellen Sie eine Schaltfläche, die dem Typ entspricht. Vereinfacht ausgedrückt bedeutet dies, dass Sie einen Hauptmenücontainer

/**

* Schaltfläche „Verbindungstyp“

*

*/

öffentliche Klasse „ComplexButton erweitert 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 Erstellen Sie eine Menüklasse für drei Hauptmenüs

/**

* Menü

*/

public class Menu {

private Button[] button;

public Button[] getButton() {

Return-Taste;

}

public void setButton(Button[] button) {

this.button = button;

}

}

5 Erstellen Sie das Token der aufrufenden Anmeldeinformationsklasse, um die Ausführung der Hauptmethode zum Aufrufen der Tencent-Schnittstelle vorzubereiten

/**

* Gutschein

*

*/

public class Token {

//Anmeldeinformationen für den Schnittstellenzugriff

private String accessToken;

// Gültigkeitsdauer der Anmeldeinformationen, Einheit: Sekunden

private int ExpiresIn ;

public String getAccessToken() {

return accessToken;

}

public void setAccessToken(String accessToken) {

this .accessToken = accessToken;

}

public int getExpiresIn() {

return expiresIn;

}

public void setExpiresIn( int ExpiresIn) {

this.expiresIn = ExpiresIn;

}

}

Ich beschreibe die Klasse nur im folgenden Code. Siehe Kommentare für bestimmte Codefunktionen.

6 Bereiten Sie den Aufruf der Tencent-Schnittstelle vor

(1) Erstellen Sie eine gemeinsame Werkzeugklasse

/**

* Allgemeine Werkzeuge

*

*/

öffentliche Klasse CommonUtil {

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

/**

* Anmeldeinformationen für den Schnittstellenzugriff abrufen

*

* @param appid-Anmeldeinformationen

* @param appsecret key

* @return

*/

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

// Zugangsdatenerfassung (GET)

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

Token token = null;

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

// Initiieren Sie eine GET-Anfrage, um Anmeldeinformationen zu erhalten

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

if (null != jsonObject) {

try {

token = new Token();

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

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

} Catch (JSONException e) {

// Token konnte nicht abgerufen werden

token = null;

}

}

return token;

}

/**

* https-Anfrage senden

*

* @param requestUrl-Anfrageadresse

* @param requestMethod-Anfragemethode (GET, POST)

* @param outputStr übermittelte Daten

* @return JSONObject (rufen Sie den Attributwert des JSON-Objekts über JSONObject.get(key) ab)

*/

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

JSONObject jsonObject = null;

try {

// Erstellen Sie ein SSLContext-Objekt und initialisieren Sie es mit dem von uns angegebenen Trust-Manager

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

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

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

// Holen Sie sich das SSLSocketFactory-Objekt aus dem obigen SSLContext-Objekt

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = neue URL( requestUrl);

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

conn.setSSLSocketFactory(ssf);

conn.setDoOutput(true);

conn.setDoInput (true);

conn.setUseCaches(false);

// Anforderungsmethode festlegen (GET/POST)

conn.setRequestMethod(requestMethod);

// Daten in den Ausgabestream schreiben, wenn OutputStr nicht null ist

if (null != OutputStr) {

OutputStream outputStream = conn.getOutputStream();

// Achten Sie auf das Codierungsformat

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

outputStream.close();

}

// Den zurückgegebenen Inhalt aus dem Eingabestream lesen

InputStream inputStream = conn.getInputStream();

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

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String str = null;

StringBuffer buffer = new StringBuffer();

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

buffer.append(str);

}

// Ressourcen freigeben

bufferedReader.close() ;

inputStreamReader.close();

inputStream.close();

inputStream = null;

conn.disconnect( );

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

} Catch (ConnectException ce) {

log.error("Connection timeout: {} ce);

return jsonObject ;

}

}

(2) Trust Manager erstellen

Paket com.test.util;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

/**

* Trust Manager

*

*/

öffentliche Klasse MyX509TrustManager implementiert >

}

// Serverseitiges Zertifikat prüfen

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

}

// Gibt ein Array vertrauenswürdiger X509-Zertifikate zurück

public 7 Nach Abschluss der oben genannten Arbeiten können Sie ein benutzerdefiniertes Menü erstellen. Erstellen Sie eine benutzerdefinierte Menüverwaltungsklasse. AppId und appSecret zuweisen und die Hauptmethode ausführen, fertig.

Paket com.test.menu;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import 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;

/**

* Menümanagerklasse

*

*/

public class MenuManager {

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

/**

* Menüstruktur definieren

* @return

*/

private static Menu getMenu() {

//Untermenü definieren

ViewButton btn1 = new ViewButton();

btn1.setName( " Untermenü 1");

btn1.setType("view");

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

ViewButton btn2 = new ViewButton();

btn2.setName("Submenu 2");

btn2.setType("view");

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

ViewButton btn3 = new ViewButton();

btn3.setName("Submenu 3");

btn3.setType ("view");

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

ViewButton btn4 = new ViewButton();

btn4 .setName("Submenu 4");

btn4.setType("view");

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

ComplexButton mainBtn1 = new ComplexButton();

mainBtn1.setName("Hauptmenü 1");

mainBtn1.setSub_button(new Button[] { btn1, btn2});/ /WeChat legt bis zu fünf Untermenüs fest

ComplexButton mainBtn2 = new ComplexButton();

mainBtn2.setName("Main Menu 2");

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

ComplexButton mainBtn3 = new ComplexButton();

mainBtn3.setName("Main Menu 3");

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

Menu menu = new Menu();

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

Return-Menü;

}

public static void main(String[] args) {

// Der einzige Berechtigungsnachweis für öffentliches Konto

1


String appId = "";

//Eindeutiger Zertifikatsschlüssel des öffentlichen Kontos

String appSecret = "";

// Schnittstelle aufrufen, um die Anmeldeinformationen zu erhalten

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

if (null != token) {

// Menü erstellen

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

// Ergebnis der Menüerstellung beurteilen

if (result )

log.info("Menü erfolgreich erstellt!");

else

log.info("Menüerstellung fehlgeschlagen!");

}

}

/**

* Menü erstellen

*

* @param-Menü-Menüinstanz

* @param accessToken-Anmeldeinformationen

* @return true success false fehlgeschlagen

*/

public static boolean createMenu(Menu menu, String accessToken) {

boolean result = 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);

// Konvertieren Sie das Menüobjekt in einen JSON-String

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

// Initiieren Sie eine POST-Anfrage, um ein Menü zu erstellen

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("Fehler beim Erstellen des Menüs errcode:{} errmsg:{}", errorCode, errorMsg);

}

}

Ergebnis zurückgeben;

}

}

Das obige ist der detaillierte Inhalt vonZusammenfassung der Erfahrungen bei der Entwicklung benutzerdefinierter Menüs für öffentliche WeChat-Konten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn