Maison > Applet WeChat > Développement WeChat > le corps du texte

Résumé de l'expérience dans le développement de menus personnalisés pour les comptes publics WeChat

高洛峰
Libérer: 2017-03-22 16:10:45
original
1925 Les gens l'ont consulté

Cet article partage le résumé de l'expérience de développement de menus personnalisés pour les comptes publics 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;
        }
    }
Copier après la connexion

/**

* Le bouton de type de clic est similaire au type d'entrée = 'bouton' Spécifiez la clé pour traiter l'entreprise correspondante en fonction de la clé capturée

*

.*/

public class ClickButton extends Button {

type de chaîne privée ;

clé de chaîne privée ;

chaîne publique getType() {

type de retour ;

}

public void setType(String type) {

this.type = type;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

}

3 Créer un bouton qui correspond au type. Pour parler franchement, cela signifie créer un conteneur de menu principal

/**

* Bouton de type composé

*

*/

public class ComplexButton extends Button {

bouton privé[ ] sub_button;

bouton public[] getSub_button() {

return sub_button;

}

public void setSub_button( Button[] sub_button) {

this.sub_button = sub_button;

}

}

4 Créez une classe de menu pour contenir trois menus principaux

/**

*Menu

*/

public class Menu {

bouton privé[] bouton;

bouton public[] getButton() {

bouton de retour ;

}

public void setButton(Bouton Bouton[]) {

this.button = bouton;

}

}

5 Créez le jeton de classe d'informations d'identification d'appel pour préparer l'exécution de la méthode principale pour appeler l'interface Tencent

/**

*Bon d'achat

*

*/

public class Token {

//Identifiant d'accès à l'interface

private String accessToken;

// Période de validité des informations d'identification, unité : secondes

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;

}

}

Je décris uniquement la classe dans le code suivant. Voir les commentaires pour les fonctions de code spécifiques.

6 Préparez-vous à appeler l'interface Tencent

(1) Créez une classe d'outils commune

/**

*Outils généraux

*

*/

classe publique CommonUtil {

journal de l'enregistreur statique privé = LoggerFactory.getLogger(CommonUtil.class);

/**

* Obtenir les informations d'identification d'accès à l'interface

*

* Informations d'identification @param appid

* Clé @param appsecret

* @return

*/

jeton statique public getToken (String appid, String appsecret ) {

// Acquisition d'informations d'identification (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);

// Lancer une requête GET pour obtenir les informations d'identification

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) {

// Échec de l'obtention du jeton

token = null;

}

>

jeton de retour ;

}

/**

* Envoyer la requête https

*

* @param requestUrl adresse de requête

* @param requestMethod méthode de requête (GET, POST)

* @param outputStr données soumises

* @return JSONObject (obtenir la valeur d'attribut de l'objet json via JSONObject.get(key))

*/

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

JSONObject jsonObject = null;

try {

// Créez un objet SSLContext et initialisez-le avec le gestionnaire de confiance que nous avons spécifié

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

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

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

// Récupère l'objet SSLSocketFactory à partir de l'objet SSLContext ci-dessus

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = new URL( requestUrl);

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

conn.setSSLSocketFactory(ssf);

conn.setDoOutput(true);

conn.setDoInput (true);

conn.setUseCaches(false);

// Définir la méthode de requête (GET/POST)

conn.setRequestMethod(requestMethod);

// Écrit des données dans le flux de sortie lorsque outputStr n'est pas nul

if (null != outputStr) {

OutputStream outputStream = conn.getOutputStream();

// Faites attention au format d'encodage

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

outputStream.close();

}

// Lire le contenu renvoyé à partir du flux d'entrée

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

}

// Libérer les ressources

bufferedReader.close() ;

inputStreamReader.close();

inputStream.close();

inputStream = null;

conn.disconnect( );

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

} catch (ConnectException ce) {

log.error("Délai d'expiration de la connexion : {} ", ce);

} catch (Exception e) {

log.error("https request exception: {}", e);

}

return jsonObject ;

}

}

(2) Créer un gestionnaire de confiance

package com.test.util;

importer java.security.cert.CertificateException;

importer java.security.cert.X509Certificate;

importer javax.net.ssl.X509TrustManager;

/**

*Gestionnaire de confiance

*

*/

classe publique implémentée par MyX509TrustManager > }

// Vérifier le certificat côté serveur

public void checkServerTrusted (chaîne X509Certificate[], String authType) lance CertificateException {

🎜>

// Renvoie un tableau de certificats X509 de confiance

public 7 Après avoir terminé le travail ci-dessus, vous pouvez créer un menu personnalisé. Créez une classe de gestion de menu personnalisée. Attribuez appId et appSecret et exécutez la méthode principale, c'est fait.

package com.test.menu;

importer org.slf4j.Logger;

importer org.slf4j.LoggerFactory;

importer net.sf. json.JSONObject;

importer com.test.bean.Button;

importer com.test.bean.ComplexButton;

importer com.test.bean.Menu;

importer com.test.bean.Token;

importer com.test.bean.ViewButton;

importer com.test.util.CommonUtil;

/**

*Cours de gestionnaire de menus

*

*/

classe publique MenuManager {

journal de l'enregistreur statique privé = LoggerFactory.getLogger(MenuManager.class);

/**

* Définir la structure du menu

* @return

*/

Menu statique privé getMenu() {

//Définir le sous-menu

ViewButton btn1 = new ViewButton();

btn1.setName( " Sous-menu 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 ("vue");

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

ViewButton btn4 = new ViewButton();

btn4 .setName("Sous-menu 4");

btn4.setType("view");

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

ComplexButton mainBtn1 = new ComplexButton();

mainBtn1.setName("Menu principal 1");

mainBtn1.setSub_button(new Button[] { btn1, btn2});/ /WeChat stipule jusqu'à cinq sous-menus

ComplexButton mainBtn2 = new ComplexButton();

mainBtn2.setName("Main Menu 2");

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

ComplexButton mainBtn3 = new ComplexButton();

mainBtn3.setName("Menu principal 3");

mainBtn3 .setSub_button(nouveau bouton [] {btn4});

Menu menu = new Menu();

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

return menu;

}

public static void main(String[] args) {

// Le seul identifiant pour le compte public

1


String appId = "";

//Clé de certificat unique du compte public

String appSecret = "";

// Appelez l'interface pour obtenir les identifiants

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

if (null != token) {

// Créer un menu

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

// Juger le résultat de la création du menu

if (result )

log.info("Menu créé avec succès!");

else

log.info("Échec de la création du menu!");

}

}

/**

* Créer un menu

*

* @param menu instance de menu

* @param accessToken identifiant

* @return true success faux échoué

*/

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

// Convertit l'objet menu en chaîne json

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

// Lancer une requête POST pour créer un menu

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("Échec de la création du menu errcode :{} errmsg:{}", errorCode, errorMsg);

}

}

résultat de retour;

}

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!