Maison  >  Article  >  Applet WeChat  >  Introduction détaillée à la création et à la suppression de menus personnalisés dans le développement de la plateforme publique WeChat

Introduction détaillée à la création et à la suppression de menus personnalisés dans le développement de la plateforme publique WeChat

高洛峰
高洛峰original
2017-03-22 16:45:313357parcourir

Lors de la création de menus, les données sont transmises sur la base de JSON, donc JSON est utilisé. Téléchargez le package correspondant Cliquez pour télécharger :

Le document de développement de la plateforme publique contient des instructions :

Veuillez noter. :

1. Le menu personnalisé peut inclure jusqu'à 3 menus de premier niveau, et chaque menu de premier niveau peut contenir jusqu'à 5 menus de deuxième niveau.
2. Le menu de premier niveau peut contenir jusqu'à 4 caractères chinois, et le menu de deuxième niveau peut contenir jusqu'à 7 caractères chinois. Les parties supplémentaires seront remplacées par "...".
3. Après avoir créé un menu personnalisé, il faudra 24 heures au client WeChat pour l'afficher en raison de la mise en cache du client WeChat. Lors des tests, vous pouvez essayer de ne plus suivre le compte public et de le suivre à nouveau, et vous pourrez voir l'effet après la création.

L'interface de menu personnalisée peut implémenter plusieurs types de boutons, comme suit :

1. Clic : événement push de clic Une fois que l'utilisateur a cliqué sur le bouton de type de clic, le serveur WeChat envoie un message push. un message via l'interface de message Une structure de type événement
est donnée aux développeurs (se référer au Guide de l'interface de message), avec la valeur clé renseignée par le développeur dans le bouton. Les développeurs peuvent interagir avec les utilisateurs en personnalisant la valeur clé. de
;
2. Afficher : URL de saut Une fois que l'utilisateur a cliqué sur le bouton de type d'affichage, le client WeChat ouvrira l'URL de la page Web renseignée par le développeur dans le bouton
. interface d'autorisation de page Web pour obtenir les informations de base de l'utilisateur pour obtenir les informations de base de l'utilisateur.
3. scancode_push : une fois que l'utilisateur a cliqué sur le bouton dans l'événement push du code de numérisation, le client WeChat lancera l'outil d'analyse. Après avoir terminé l'opération de numérisation du code, le résultat de l'analyse sera affiché
(s'il s'agit d'un scancode_push). URL, il entrera l'URL), et le résultat de la numérisation du code QR sera envoyé au développeur, qui pourra envoyer des messages.
4. scancode_waitmsg : scannez le code pour envoyer l'événement et afficher la boîte de dialogue "Réception de message". Une fois que l'utilisateur a cliqué sur le bouton, le client WeChat lancera l'outil d'analyse
après avoir terminé l'opération de numérisation du code. , le résultat du code d'analyse sera affiché. Transmettez-le au développeur, rangez l'outil d'analyse en même temps, puis affichez la boîte de dialogue "Message
Réception", et vous pourrez alors recevoir un message de le développeur.
5. pic_sysphoto : une fois que le système apparaît pour prendre des photos et envoyer des photos. Une fois que l'utilisateur a cliqué sur le bouton, le client WeChat appellera la caméra système,
enverra les photos prises. au développeur et transmettez l'événement au développeur, et rangez la caméra système en même temps, et vous pourrez alors recevoir un message du développeur
.
6. pic_photo_or_album : Une fois que l'utilisateur a cliqué sur le bouton pour prendre une photo ou envoyer une photo vers un album, le client WeChat affichera un sélecteur
permettant à l'utilisateur de choisir "prendre une photo" ou "sélectionner parmi l'album du téléphone portable". Une fois que l'utilisateur a choisi, il passera par les deux autres processus.
7. pic_weixin : Une fois que l'expéditeur de l'album photo WeChat apparaît et que l'utilisateur clique sur le bouton, le client WeChat appellera l'album photo WeChat. Après avoir terminé l'opération de sélection
, les photos sélectionnées seront envoyées au. le serveur du développeur et l'événement sera transmis aux développeurs, si vous fermez l'album photo en même temps, vous pourrez recevoir un message de l'expéditeur
plus tard.
8. location_select : Une fois que l'utilisateur a cliqué sur le bouton du sélecteur d'emplacement géographique contextuel, le client WeChat appellera l'outil de sélection d'emplacement
Après avoir terminé l'opération de sélection, l'emplacement géographique sélectionné sera envoyé. au serveur du développeur. En même temps, masquez l'emplacement et sélectionnez l'outil
, et vous pourrez recevoir un message du développeur.
9. media_id : Une fois que l'utilisateur a cliqué sur le bouton de type
media_id pour envoyer un message (sauf message texte), le serveur WeChat fournira à l'utilisateur le matériel correspondant à l'ID de matériel permanent renseigné par le développeur. Le type de matériel permanent
Le type peut être des images, de l'audio, de la vidéo, des messages graphiques. Attention : l'identifiant permanent du matériel doit être un identifiant légal obtenu après le téléchargement via l'interface "Gestion du matériel/Ajouter du matériel permanent"
. 10. view_limited : accédez à l'URL de l'image et du message texte. Une fois que l'utilisateur a cliqué sur le bouton de type view_limited,
le client WeChat ouvrira l'URL de l'image et du message texte correspondant à l'ID de matériau permanent renseigné par le développeur dans le bouton. . Le type de matériau permanent ne prend en charge que les images et le texte
Message. Attention : l'identifiant matériel permanent doit être un identifiant légal obtenu après téléchargement via l'interface « Gestion du matériel/Ajouter du matériel permanent ».

Veuillez noter que tous les événements de 3 à 8 ne prennent en charge que WeChat iPhone 5.4.1 ou supérieur, et Android 5.4 ou supérieur. Utilisateurs de WeChat Il n'y aura aucune réponse après avoir cliqué sur l'ancienne version de WeChat. Les push d’événements pour développeurs ne peuvent pas être reçus normalement. 9 et 10 sont des types d'événements spécialement préparés pour les comptes d'abonnement de plateformes tierces qui n'ont pas été certifiées par WeChat (en particulier, ceux qui n'ont pas réussi la certification de qualification. Ils n'ont pas de poussée d'événement et leurs capacités sont relativement limitées). Autres types de comptes publics Pas besoin d'utiliser.

1. Étant donné que le menu personnalisé utilise la méthode de requête http, le protocole https doit être utilisé. Écrivez une classe de méthode pour traiter les données https et json.

Créez une nouvelle classe sous le package com.cc.wechat.util :

---CommonUtil.java :

package com.cc.wechat.util;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
 
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
 
/**
 * 公众平台通用接口工具类
 * @author ICHN
 * 2015-09-04
 */
public class CommonUtil {
 
    /**
     * 发起https请求并获取结果
     * @param requestUrl 请求地址
     * @param requestMethod 请求方式(GET、POST)
     * @param outputStr  提交的数据
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
     */
    public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
         
        StringBuffer sb = new StringBuffer();
         
        // 创建SSLContext对象,并使用我们指定的信任管理器初始化
        TrustManager[] tm = {new MyX509TrustManager()};
         
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
             
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();
             
            URL url = new URL(requestUrl);
            HttpsURLConnection httpsUrlConnection = (HttpsURLConnection)url.openConnection();
            httpsUrlConnection.setSSLSocketFactory(ssf);
            httpsUrlConnection.setDoInput(true);
            httpsUrlConnection.setDoOutput(true);
            httpsUrlConnection.setUseCaches(false);
            // 设置请求方式(GET/POST)
            httpsUrlConnection.setRequestMethod(requestMethod);
             
            //对请求方式进行判断 equalsIgnoreCase不区分大小写
            if("GET".equalsIgnoreCase(requestMethod)) {
                //建立连接
                httpsUrlConnection.connect();
            }
             
            //当有数据需要提交时
            if(null != outputStr) {
                OutputStream os = httpsUrlConnection.getOutputStream();
                // 注意编码格式,防止中文乱码
                os.write(outputStr.getBytes("UTF-8"));
                os.close();
            }
             
            //将返回的输入流转换成字符串
            InputStream is = httpsUrlConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
             
            String strLine = null;
             
            while((strLine = br.readLine()) != null) {
                sb.append(strLine);
            }
             
            br.close();
            isr.close();
             
            //释放资源
            is.close();
            is = null;
             
        } catch (Exception e) {
            e.printStackTrace();
        }
         
        return sb.toString();
    }
}

2. Définir différents types de boutons , Extrayez les variables communes et écrivez-les dans une classe.

Créez des classes associées sous le package com.cc.wechat.menu :

1 ---Button.java :

package com.cc.wechat.menu;
 
/**
 * 菜单按钮
 * @author ICHN
 */
public class Button {
 
    //菜单标题,不超过16个字节,子菜单不超过40个字节
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

2 ---ClickButton java :

package com.cc.wechat.menu;
 
/**
 * click类型按钮
 * @author ICHN
 *
 */
public class ClickButton extends Button{
 
    //菜单的响应动作类型 
    private String type;
    //菜单KEY值,用于消息接口推送,不超过128字节 
    private String key;
     
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
}

3 ---ComplexButton.java :

package com.cc.wechat.menu;
 
/**
 * 二级菜单数组
 * 个数应为1~5个
 * @author ICHN
 *
 */
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 ---Menu.java :

package com.cc.wechat.menu;
 
/**
 * 菜单
 * @author ICHN
 *
 */
public class Menu {
 
    private Button[] button;
 
    public Button[] getButton() {
        return button;
    }
 
    public void setButton(Button[] button) {
        this.button = button;
    }
}

5 ---ViewButton .java :

package com.cc.wechat.menu;
 
/**
 * view类型按钮
 * @author ICHN
 *
 */
public class ViewButton extends Button {
 
    //菜单的响应动作类型 
    private String type;
    //网页链接,用户点击菜单可打开链接,不超过256字节
    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;
    }
}

3. Créez un nouveau dossier source de test test, créez-y un package com.cc.wechat.test et écrivez les classes associées pour créer des menus dans ce package.

Écrivez une classe pour obtenir access_token :

---GetAccessToken.java :

package com.cc.wechat.test;
 
import com.cc.wechat.util.CommonUtil;
 
/**
 * 获取access_token
 * @author ICHN
 * 测试账号的appID和appsecret
 * 
 * access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。
 * 开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。
 * access_token的有效期目前为2个小时,需定时刷新,
 * 重复获取将导致上次获取的access_token失效
 */
public class GetAccessToken {
 
    public static void main(String[] args) {
         
        //打印出access_token
        System.out.println(CommonUtil.httpsRequest(
        "&secret=此处填写appsecret", 
        "GET",
         null
         )
        );
    }
}

2. Créer et supprimer des menus :

---MenuTest.java :

package com.cc.wechat.test;
 
import net.sf.json.JSONObject;
 
import com.cc.wechat.menu.Button;
import com.cc.wechat.menu.ClickButton;
import com.cc.wechat.menu.ComplexButton;
import com.cc.wechat.menu.Menu;
import com.cc.wechat.util.CommonUtil;
/**
 * 执行菜单的创建
 * @author ICHN
 *
 */
public class MenuTest {
 
    public static void main(String[] args) {
        /**
         * 按钮类型就两种:
         * click类型
         * view类型
         */
         
        /**
         *click类型
         * 二级菜单1
         * 所包含的二级菜单:
         *             clickButton_11
         *             ...
         * 可以定义5个
         */
        ClickButton clickButton_11 = new ClickButton();
        //设置按钮名称
        clickButton_11.setName("");
        //设置按钮类别 尊照微信开发文档给出的定义
        clickButton_11.setType("");
        //设置按钮key值
        clickButton_11.setKey("");
         
        //.....可以定义5个.....
         
        /**
         * 二级菜单2
         * 所包含的二级菜单:
         *         clickButton_21
         *      ...
         */
        ClickButton clickButton_21 = new ClickButton();
        clickButton_21.setName("");
        clickButton_21.setType("");
        clickButton_21.setKey("");
         
        /**
         * 定义一个一级菜单数组,
         * 个数应为1~3个
         */
        ClickButton button_3 = new ClickButton();
        button_3.setName("");
        button_3.setType("");
        button_3.setKey("");
         
        /**
         * 上面的二级菜单定义好后,
         * 用一个带二级菜单的按钮(ComplexButton)装起来
         */
         
        //一级菜单1
        ComplexButton complexButton1 = new ComplexButton();
        complexButton1.setName("一级菜单1");
        complexButton1.setSub_button(new Button[] {clickButton_11});
         
        //一级菜单2
        ComplexButton complexButton2 = new ComplexButton();
        complexButton2.setName("");
        complexButton2.setSub_button(new Button[] {clickButton_21});
         
        //一级菜单3定义在上面
         
        //用一个menu(相当于总菜单,在最外层)来把上面的菜单装起来
        Menu menu = new Menu();
        menu.setButton(new Button[] {complexButton1, complexButton2, button_3});
         
        //把menu转换为json数组
        String jsonMenu = JSONObject.fromObject(menu).toString();
         
        /**
         * 创建和删除都是采用https协议
         * http请求方式:POST(请使用https协议)
         */
        //创建菜单接口
        //https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
        String createRequest = CommonUtil.httpsRequest(
                //requestUrl
                "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=此处填写上面GetAccessToken类获取的access_token", 
                //requestMethod
                "POST", 
                //outputStr
                jsonMenu
            );
         
        //打印出创建状态信息(同时执行创建)
        //System.out.println(createRequest);
         
        //删除菜单接口
        //https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
        String deleteResult = CommonUtil.httpsRequest(
                "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=此处填写上面GetAccessToken类获取的access_token", 
                "POST", 
                jsonMenu
            );
         
        //打印出删除状态信息(同时执行删除)
        System.out.println(deleteResult);
    }
}

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!

Déclaration:
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