首页 > 其他分享 >【fastweixin框架教程7】微信企业号自定义菜单接口开发

【fastweixin框架教程7】微信企业号自定义菜单接口开发

时间:2023-04-05 10:04:32浏览次数:47  
标签:自定义 微信 QYMenuButton add import new fastweixin com ListButton


  下面这个类我对fastweixin 框架的简单封装调用,大家可以参考,如果需要QYAPIConfigExt和MainServernSupport,请参考本教程以前几篇文章


   应用可以在会话界面底部设置自定义菜单,菜单项可按需设定,并可为其设置响应动作。用户可以通过点击菜单项,收到你设定的消息。企业号支持自定义菜单调起扫一扫、发图片、发地理位置等能力。

  菜单分为两类,VIEW和Click,具体可以参考《柳峰微信公众平台开发教程》

  本文目标:

  1、实现菜单的删除和增加

  2、实现微信OAuth验证的对接。

  说明:微信OAuth有两种实现一种就是我注释的那段用StringBuilder 拼URL 或者直接调用原框架的OauthAPI 辅助生成URL。

  

package com.nsjs;

import java.awt.List;
import java.util.ArrayList;

import com.fastwixinextend.QYAPIConfigExt;

import com.github.sd4324530.fastweixin.api.OauthAPI;
import com.github.sd4324530.fastweixin.api.config.ApiConfig;
import com.github.sd4324530.fastweixin.api.entity.Menu;
import com.github.sd4324530.fastweixin.api.enums.OauthScope;
import com.github.sd4324530.fastweixin.company.api.QYMenuAPI;
import com.github.sd4324530.fastweixin.company.api.entity.QYMenu;
import com.github.sd4324530.fastweixin.company.api.entity.QYMenuButton;
import com.github.sd4324530.fastweixin.company.api.enums.QYMenuType;
import com.github.sd4324530.fastweixin.company.api.enums.QYResultType;
import com.github.sd4324530.fastweixin.company.api.response.GetQYMenuResponse;

public class MenuManager {

    public QYAPIConfigExt config = null;

    public QYAPIConfigExt initConfig() {
        if (config == null) {
            config = new QYAPIConfigExt(MainServernSupport.getCropId(), MainServernSupport.getAPPSecret(),
                   ", System.currentTimeMillis());
        }
        return config;
    }

    public QYAPIConfigExt initConfig(String CropId, String APPSecret, String AccessToken, long AccessTokenTime) {
        QYAPIConfigExt config;
        config = new QYAPIConfigExt(CropId, APPSecret, AccessToken, AccessTokenTime);
        return config;
    }

    public void listMenu() {
        QYMenuAPI menuAPI = new QYMenuAPI(initConfig());
        GetQYMenuResponse response = menuAPI.list(MainServernSupport.getAgentID());
        QYMenu menu = response.getMenu();

    }

    public void deleteMenu() {
        QYMenuAPI menuAPI = new QYMenuAPI(initConfig());
        QYResultType resultType = menuAPI.delete(MainServernSupport.getAgentID());

    }

    /**
     * 定义菜单结构
     *
     * @return
     */
    private String createMenu() {

        // StringBuilder url = new StringBuilder();
        // url.append("https://open.weixin.qq.com/connect/oauth2/authorize?");
        // url.append("appid=" + MainServernSupport.getCropId());
        // url.append("&redirect_uri=").append("");
        // url.append("&response_type=").append("code");
        // url.append("&scope").append("snsapi_base");
        // url.append("&state=").append(MainServernSupport.getCropId());
        // url.append("#wechat_redirect");
        OauthAPI oauthAPI = new OauthAPI(config);
        String pageUrl = oauthAPI.getOauthPageUrl(",
                OauthScope.SNSAPI_BASE, MainServernSupport.getToken());

        QYMenuButton btn11 = new QYMenuButton();
        btn11.setName("项目1");
        btn11.setType(QYMenuType.VIEW);

        btn11.setUrl(pageUrl);
        btn11.setKey("项目1");

        pageUrl = oauthAPI.getOauthPageUrl("",
                OauthScope.SNSAPI_BASE, MainServernSupport.getToken());
        QYMenuButton btn12 = new QYMenuButton();
        btn12.setName("项目2");
        btn12.setType(QYMenuType.VIEW);
        btn12.setUrl(pageUrl);
        btn12.setKey("项目2");

        pageUrl = oauthAPI.getOauthPageUrl(",
                OauthScope.SNSAPI_BASE, MainServernSupport.getToken());
        QYMenuButton btn13 = new QYMenuButton();
        btn13.setName("项目3");
        btn13.setType(QYMenuType.VIEW);
        btn13.setUrl(pageUrl);
        btn13.setKey("项目3");

        QYMenuButton btn21 = new QYMenuButton();
        btn21.setName("项目4");
        btn21.setType(QYMenuType.CLICK);
        btn21.setKey("项目4");

        QYMenuButton btn22 = new QYMenuButton();
        btn22.setName("项目5");
        btn22.setType(QYMenuType.CLICK);
        btn22.setKey("项目5");

        QYMenuButton btn23 = new QYMenuButton();
        btn23.setName("项目6");
        btn23.setType(QYMenuType.CLICK);
        btn23.setKey("项目6");

        QYMenuButton btn31 = new QYMenuButton();
        btn31.setName("报表");
        btn31.setType(QYMenuType.CLICK);
        btn31.setKey("报表");

        QYMenuButton btn32 = new QYMenuButton();
        btn32.setName("项目8");
        btn32.setType(QYMenuType.CLICK);
        btn32.setKey("项目8");

        QYMenuButton btn33 = new QYMenuButton();
        btn33.setName("项目9");
        btn33.setType(QYMenuType.CLICK);
        btn33.setKey("项目9");

        QYMenuButton mainBtn1 = new QYMenuButton();
        mainBtn1.setName("项目11");
        ArrayList<QYMenuButton> ListButton = new ArrayList<QYMenuButton>();
        ListButton.add(btn11);
        ListButton.add(btn12);
        ListButton.add(btn13);
        mainBtn1.setSubButton(ListButton);

        QYMenuButton mainBtn2 = new QYMenuButton();
        mainBtn2.setName("项目22");

        ListButton = new ArrayList<QYMenuButton>();
        ListButton.add(btn21);
        ListButton.add(btn22);
        ListButton.add(btn23);
        mainBtn2.setSubButton(ListButton);

        QYMenuButton mainBtn3 = new QYMenuButton();
        mainBtn3.setName("项目33");
        mainBtn3.setType(QYMenuType.VIEW);
        pageUrl = oauthAPI.getOauthPageUrl(",
                OauthScope.SNSAPI_BASE, MainServernSupport.getToken());
        mainBtn3.setUrl(pageUrl);
        ListButton = new ArrayList<QYMenuButton>();
        ListButton.add(btn31);
         ListButton.add(btn32);
        ListButton.add(btn33);
        mainBtn3.setSubButton(ListButton);

        QYMenu menu = new QYMenu();

        ArrayList<QYMenuButton> MenuButtonList = new ArrayList<QYMenuButton>();
        MenuButtonList.add(mainBtn1);
        MenuButtonList.add(mainBtn2);
        MenuButtonList.add(mainBtn3);

        menu.setButton(MenuButtonList);
        QYMenuAPI menuAPI = new QYMenuAPI(initConfig());
        QYResultType resultType = menuAPI.create(menu, MainServernSupport.getAgentID());
        return resultType.getDescription();
    }

    public static void main(String[] args) {
        MenuManager menuManager = new MenuManager();
        menuManager.deleteMenu();
        menuManager.createMenu();
        menuManager.listMenu();

    }

}


标签:自定义,微信,QYMenuButton,add,import,new,fastweixin,com,ListButton
From: https://blog.51cto.com/u_696257/6170238

相关文章

  • Abp自定义模块种子数据
    模块的初始化或者系统的基本运行需要一些基础数据,可以利用ABP提供的种子数据基础上设置进行数据播种。自定义模块自定义模块可以定义自己的DataSeeder,例如数据字典:publicinterfaceIDataDictionaryDataSeeder{TaskSeedAsync(stringname,stringvalue);}定义......
  • 01_微信公众号_话题_提取链接_一行一个
    nodejscheerio提取超链接import{log}from"console";import{readFileSync,readdirSync,lstatSync,createWriteStream,mkdirSync,statSync,}from"fs";import{basename,join,resolve}from"path";import{load......
  • Js/Jquery获取自定义属性的方法
    html:<spanid="item"data-test='test'></span>方法一、原生JS的getAttribute获取自定义属性设置属性.setAttribute("属性","值")获取属性.getAttribute("属性")varspan=document.getElementById('item').ge......
  • 使用内网穿透调试微信小程序
    随意购买一个,登陆后台,选择隧道管理下载客户端点击bat批处理文件输入隧道id回车即可进入微信小程序编程工具将这个勾给勾上,然后修改HTTP_REQUEST_URL即可创作不易,如果能够解决您的问题,请给我点个赞,谢谢......
  • Android 手把手教您自定义ViewGroup(一)
    本文出自:【张鸿洋的博客】最近由于工作的变动,导致的博客的更新计划有点被打乱,希望可以尽快脉动回来~今天给大家带来一篇自定义ViewGroup的教程,说白了,就是教大家如何自定义ViewGroup,如果你对自定义ViewGroup还不是很了解,或者正想学习如何自定义,那么你可以好好看看这篇博客。1、......
  • 软件著作权申请-注意事项(微信小程序)
    开发的硬件环境:PC电脑内存:8GCPU:i565003.2GHz硬盘:1T显卡:GTX1080ti运行的硬件环境:安卓手机开发该软件的操作系统:Windows10专业版软件开发环境/开发工具:UnityC#VisualStudio该软件的运行平台/操作系统:安卓操作系统5.0及以上软件运行支撑环境/支持软......
  • 深入理解Magento – 第七章 – 自定义Magento系统配置
    深入理解Magento作者:AlanStorm翻译:HailongZhang第七章–自定义Magento系统配置Magento拥有十分强大的后台管理系统。作为一名开发人员,这套后台管理系统可以让你的用户简单直接的配置Magento系统或者你创建的模块。和Magento的其他功能一样,你第一次使用这套管理系统的时候可......
  • android 评分条 RatingBar 使用及自定义
    一、先上效果图片:  第一个是自定义;  第二个是原生的: 二、atingBarRatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndica......
  • Halo自定义部分扩展
    简介Halo是一款现代化的开源博客/CMS系统,前端由Vue,后端java开发的。我选择的原因是因为是java开发的,所以方便我自定义的扩展。MinIO扩展在我们写博客的时候经常会用到图片,Halo支持多种文件存储方式。这里我选择了MinIO,但是在使用的过程中发现了一个小的问题,它上传的文件是按照......
  • 第六篇:自定义集合类型和结构体取代类
    第六篇:自定义集合类型和结构体取代类目录第六篇:自定义集合类型和结构体取代类一、自定义集合类型二、结构体取代类1make和new的区别2结构体取代类一、自定义集合类型集合是一个重要的数据结构,其中,集合中的元素不能重复;集合中的元素无序排列,由于go中没有集合元素,我们可以通过m......