06-Configuración del menú de la cuenta oficial de WeChat

06-Configuración del menú de la cuenta oficial de WeChat

Tabla de contenido

1.1. Información del mensaje abstracto

1.2. Configuración del menú


 

1. Menú de cuenta oficial de WeChat

 

Primero, antes de configurar el menú de la cuenta oficial de WeChat, debe comprender cómo la plataforma WeChat define la api del menú.

La URL de referencia de información detallada es la siguiente:

 

https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html

La solicitud de WeChat para ser llamado es la siguiente:

 

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

El parámetro access_token se obtuvo en la Sección 05, y usaremos el access_token sin timeout para realizar la llamada de solicitud.

 

Haga clic y vea ejemplos de solicitudes (para otros tipos, consulte los documentos oficiales)

{
    "button": [
        {
            "key": "1",
            "name": "一级菜单1",
            "type": "click"
        },
        {
            "name": "一级菜单2",
            "type": "view",
            "url": "http://www.baidu.com"
        },
        {
            "name": "菜单",
            "sub_button": [
                {
                    "name": "二级菜单",
                    "type": "view",
                    "url": "http://fanyi.youdao.com/"
                }
            ]
        }
    ]
}

La solicitud para crear un catálogo se puede dividir en 2 partes

  1. Información del mensaje abstracto (objetivación de la información del mensaje)
  2. Envíe una solicitud para modificar la estructura del directorio de la cuenta oficial

1.1. Información del mensaje abstracto

Antes de abstraer la información del mensaje, necesitamos analizar el mensaje.

En primer lugar, ya sea que el tipo sea clic o vista, hay un nombre, para que podamos extraer el público.

//这里讲下我为什么把这个类设置成抽象类
//当节点1(一级菜单1)和节点2(一级菜单2)是两种不同的类型。
//但是呢button中需要有两种不同的类型,所以就做了抽象类进行处理
public abstract class AbstractMenu {
    // 抽取出来的公共参数
    public String name;
    // get set方法省略
}

 

Entonces podemos abstraernos uno por uno según la situación desde el interior hacia el exterior.

 

  • Primero, primero creamos los objetos básicos de nivel inferior, que son objetos de vista y clic (si se establecen diferentes tipos, consulte la documentación detallada de la cuenta oficial de WeChat)

 

// 由于是测试 所以方法的命名是不符合规范的
public class ClickButten extends AbstractMenu {

    private String type= "click";

    private String key;
    
    // 省略get set方法
    
    public ClickButten(String name,String key) {
        super(name);
        this.key = key;
    }
}
public class ViewButten extends AbstractMenu {

    private String type = "view";

    private String url;
    
    // 省略get set方法
    
    public ViewButten(String name,String url) {
        super(name);
        this.url = url;
    }
}
  • Entonces estamos creando el objeto de submenú
public class SubButten extends AbstractMenu {

    List<AbstractMenu> sub_button = new ArrayList<AbstractMenu>();

    // 省略 get set方法
    
    public SubButten(String name) {
        super(name);
    }
}
  • Una vez creado el submenú, se crea el menú más grande

 

public class Button {

    List<AbstractMenu> button = new ArrayList<AbstractMenu>();
    // 省略 get set方法
}
  • El proceso de verificación final
@Test
void TestMenu(){
    Button button = new Button();
    button.getButton().add(new ClickButten("一级菜单1","1"));
    button.getButton().add(new ViewButten("一级菜单2","http://www.baidu.com"));
    SubButten  subButten = new SubButten("菜单");
    subButten.getSub_button().add(new ViewButten("二级菜单","http://fanyi.youdao.com/"));
    button.getButton().add(subButten);
    //这块被坑了 使用的api是 net.sf.json.JSONObject  我一直以为使用的是org.json(原生的json包)
    JSONObject jsonObject = JSONObject.fromObject(button);
    System.out.println(jsonObject.toString());
}

Utilice cartero para llamar a la modificación, y el diagrama de efectos se muestra a continuación.

 

1.2. Configuración del menú

Capaz de armar el mensaje de solicitud y luego llamar para enviar una intercesión.

void  Testpost() throws Exception {
        // 菜单的url进行拼接
        Button button = new Button();
        button.getButton().add(new ClickButten("一级菜单1","1"));
        button.getButton().add(new ViewButten("一级菜单2","http://www.baidu.com"));
        SubButten  subButten = new SubButten("菜单");
        subButten.getSub_button().add(new ViewButten("二级菜单","http://fanyi.youdao.com/"));
        button.getButton().add(subButten);
        //这块被坑了 使用的api是 net.sf.json.JSONObject  我一直以为使用的是org.json(原生的json包)
        JSONObject jsonObject = JSONObject.fromObject(button);

        String ACCESS_TOKEN ="42_lh4kVHJDHUTQtHfUxrjGqGfKTJKcpqO7jxGmhIwdncmOb9NH8YJ_GhNTDDxzMb1EBGqm
        SckUqs7mL6ozYr-f1JNnc3J7PmaGbnbXDl0BL6oBf9OMyGY3yensACdpnoF1zoMf2QxZArQUbVXOKYPbAEARFW";

        URL url = new URL(MENU_URL.replace("ACCESS_TOKEN",ACCESS_TOKEN));
        URLConnection urlConnection = url.openConnection();
       //设置为可以发送数据的状态
        urlConnection.setDoOutput(true);
        //获取输出流
        OutputStream outputStream = urlConnection.getOutputStream();
        // 这个地方要特别的注意,在发送给微信中含有中文的时候编码需要设置成utf-8否则会报错
        outputStream.write(jsonObject.toString().getBytes("utf-8"));
        outputStream.close();
        InputStream is = urlConnection.getInputStream();
        byte [] b = new  byte[1024];
        int len;
        StringBuilder sb = new StringBuilder();
        while((len=is.read(b))!= -1){
            sb.append(new String(b,0,len));
        }
        System.out.println(sb.toString());
    }

 

Nota: Una vez configurado el menú, cada vez que el usuario haga clic en el menú, se enviará un mensaje al servidor de fondo.

La siguiente figura muestra el mensaje enviado en segundo plano cuando hice clic en el botón. Necesitamos procesarlo de acuerdo con la información devuelta MsgType y EventKey.

{CreateTime=1614671191, EventKey=1, Event=CLICK, ToUserName=gh_7c94dc7e2130, FromUserName=orxnH5wNRLvz2DfNTopTGcL4y9ic, MsgType=event}

Nota: La información enviada es la que analicé y los datos reales enviados están en formato xml.

Supongo que te gusta

Origin blog.csdn.net/baidu_31572291/article/details/114337924
Recomendado
Clasificación