精华内容
下载资源
问答
  • 微信公众平台官网:https://mp.weixin.qq.com 文章目录 一、注册公众号 二、了解公众号管理页面 三、必备开发者工具的使用 1.开发者文档 2.在线接口调试工具 3.web开发者...
  • 接入微信公众号开发的第一步,万事开头难,走好第一步,后面的路就更宽广。 1.公众平台测试帐号的使用 登录微信公众平台,由于很多开发人员并没有认证的的微信公众号,所以比较折中的方式是使用公众平台测试帐号...
  • 主要介绍了Vue开发Html5微信公众号的步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 今天来说一下微信公众号底部的菜单设置 设置更改公众号底部的菜单有两种方式:1、通过Java代码调取微信提供的接口进行设置。 2、直接在微信公众号平台用json数据设置。 这两种方式都比较简单。个人采取的一般是第...

    今天来说一下微信公众号底部的菜单设置

    设置更改公众号底部的菜单有两种方式:1、通过Java代码调取微信提供的接口进行设置。

    2、直接在微信公众号平台用json数据设置

    这两种方式都比较简单。个人采取的一般是第二种方式。

    一、Java代码调取微信接口进行设置直接上代码

    1、定义APPID,APPSECRET的ConstantWeChat常量类

    public class ConstantWeChat {
        public static final String APPID = "";
    
        public static final String APPSECRET = "";
    }

    2、通用微信接口类CommonWechatUtil类,获取accesstoken

    public class CommonWechatUtil {
        private static Logger log = LoggerFactory.getLogger(CommonWechatUtil.class);
        // 凭证获取(GET)
        public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    /**
         * 获取接口访问凭证
         *
         * @param appid 凭证
         * @param appsecret 密钥
         * @return
         */
        public static AccessToken getToken(String appid, String appsecret) {
            AccessToken token = null;
            String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
            // 发起GET请求获取凭证
            JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
            if (null != jsonObject) {
                try {
                    token = new AccessToken();
                    token.setAccessToken(jsonObject.getString("access_token"));
                    token.setExpiresIn(jsonObject.getInt("expires_in"));
                } catch (JSONException e) {
                    token = null;
                    // 获取token失败
                    log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
                }
            }
            return token;
        }
    }

    3、调用创建菜单的接口CommonWechatUtil类中的方法createMenu

    // 菜单创建(POST) 限100(次/天)
        public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
        
    /**
         * 创建菜单
         *
         * @param menu 菜单实例
         * @param accessToken 有效的access_token
         * @return 0表示成功,其他值表示失败
         */
        public static int createMenu(Menu menu, String accessToken) {
            int result = 0;
    
            // 拼装创建菜单的url
            String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);
            // 将菜单对象转换成json字符串
            String jsonMenu = JSONObject.fromObject(menu).toString();
            // 调用接口创建菜单
            JSONObject jsonObject = httpsRequest(url, "POST", jsonMenu);
    
            if (null != jsonObject) {
                if (0 != jsonObject.getInt("errcode")) {
                    result = jsonObject.getInt("errcode");
                    log.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
                }
            }
    
            return result;
        }
    

    4、组装菜单getMenu方法

    /**
         * 组装菜单数据
         *
         * @return
         * @throws UnsupportedEncodingException
         */
        private static Menu getMenu() {
    
    
            ViewButton btn11 = new ViewButton();
            btn11.setName("开启");
            btn11.setType("view");
            btn11.setUrl("http://www.baidu.com");
    
            ViewButton btn21 = new ViewButton();
            btn21.setName("关闭");
            btn21.setType("view");
            btn21.setUrl("http://www.baidu.com");
    
            ViewButton btn31 = new ViewButton();
            btn31.setName("谢谢");
            btn31.setType("view");
            btn31.setUrl("https://www.baidu.com");
    
            ViewButton btn41 = new ViewButton();
            btn41.setName("关注");
            btn41.setType("view");
            btn41.setUrl("https://www.baidu.com");
    
            CommonButton btn12 = new CommonButton();
            btn12.setName("赞");
            btn12.setType("click");
            btn12.setKey("return_content");
    
            ComplexButton mainBtn1 = new ComplexButton();
            mainBtn1.setName("菜单1");
            mainBtn1.setSub_button(new BasicButton[] { btn11, btn21,btn31});
    
            ComplexButton mainBtn2 = new ComplexButton();
            mainBtn2.setName("菜单2");
            mainBtn2.setSub_button(new BasicButton[] { btn41, btn12 });
    
            /**
    
             *在某个一级菜单下没有二级菜单的情况,menu应该这样定义:<br>
             * menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 });
             */
            Menu menu = new Menu();
            menu.setButton(new BasicButton[] { mainBtn1, mainBtn2});
    
            return menu;
        }

    5、编写创建菜单的方法

    @Service("menuService")
    public class MenuServiceImpl implements MenuService {
        private static final Logger LOGGER = LoggerFactory.getLogger(MenuServiceImpl.class);
    
        //    @Override
        public static Boolean createMenu() {
            // 第三方用户唯一凭证
            String appId = ConstantWeChat.APPID;
            // 第三方用户唯一凭证密钥
            String appSecret = ConstantWeChat.APPSECRET;
            // 调用接口获取access_token
            AccessToken at = CommonWechatUtil.getToken(appId, appSecret);
            if (null != at) {
                // 调用接口创建菜单
                int result = CommonWechatUtil.createMenu(getMenu(), at.getAccessToken());
                // 判断菜单创建结果
                if (0 == result){
                    LOGGER.info("菜单创建成功!");
                    return true;
                }
                else{
                    LOGGER.info("菜单创建失败,错误码:" + result);
                    return false;
                }
            }
            return false;
        }

    6、main方法执行creatmenu方法

     public static void main(String[] args) {
            createMenu();
        }

    以上就是第一种创建菜单的方法。

    二、通过json的body体创建菜单

    1、前往微信公众平台接口测试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token

    填写正确的配置信息

    返回结果200代表返回成功,获取到access_token赋值粘贴下来。如果不是200,请根据对应的错误码查询错误。

    2、获取到access_token之后,重新选择自定义菜单

    将json数据放在body体中,按自己的实际情况修改json

    {
     "button": [
     {
      "name": "菜单1", 
      "type": "view", 
      "url": "http://www.baidu.com"
     }, 
     {
      "name": "菜单2", 
      "type": "view", 
      "url": "http://www.baidu.com"
     },
     {
      "name": "菜单3", 
      "sub_button": [
      {
       "key": "text", 
       "name": "回复图文", 
       "type": "click"
      }, 
      {
       "name": "博客", 
       "type": "view", 
       "url": "http://www.baidu.com"
      }
      ]
     }
     ]
    }

    3、点击检查问题,返回值为200即代表菜单生成成功

     

    注意:上述过程都执行完毕,没有问题的情况下,如果进入微信公众号测试号中,菜单没有更改。取消关注,重新关注一下就会发现菜单已经更改成功!

     

    展开全文
  • 最近微信公众号开发了菜单关联小程序功能,实现代码如下   /** * 自定义菜单工具类 * @author why * */ public class MenuUtil { private static Logger logger = Logger.getLogger(MenuUtil.class);// 日志 //创建...
  • 我们知道,微信公众号开发分订阅号和服务号,而个人只能申请订阅号,订阅号不能设置菜单,无形中只能通过关键字回复实现,比如我回复帮助,就返回帮助信息,如果我回复电影霍元甲,就返回霍元甲电影详细链接,这些都...
  • 根据微信公众号开发官方文档: 获取用户信息步骤如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步:拉取用户信息(需scope为...
  • 主要为大家详细介绍了Java微信公众号安全模式消息解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java微信公众号开发毕业论文,农业微信推广平台,大概功能如下: (1)知识库查询,通过回复微信公众号或选择菜单查询相关农业知识; (2)新闻的推送和热点公告的通知,主要为与农业政策相关的信息和专家用户工作的...
  • 微信公众号开发环境架构,本地测试natapp外网映射神器 开发基于微信公众号的应用最大的痛苦之处就是调试问题,每次实现一个功能后都需要部署到一个公网服务器进行测试,因为微信用户每次向公众号发起请求时,微信...
  • SpringBoot微信公众号开发

    千人学习 2019-06-02 10:48:56
    通过热门框架spring boot来学习微信公众号开发,帮助同学们快速入门微信公众号开发
  • 微信公众号服务号开发中服务器配置 参考见:http://www.qchcloud.cn/tn/article/31 微信公众号服务号开发中服务器配置: 微信开发中所有服务器配置是以get请求请求你所配置的服务器的地址。 @ResponseBody @...

    微信公众号服务号开发中服务器配置
    参考见:http://www.qchcloud.cn/tn/article/31

    微信公众号服务号开发中服务器配置:

    微信开发中所有服务器配置是以get请求请求你所配置的服务器的地址。

    @ResponseBody
    @RequestMapping(value = "api/wx/callback", method = RequestMethod.GET)
    public void callback(HttpServletRequest request, HttpServletResponse response) {
        try {
            request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        // 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数
        String signature = request.getParameter("signature");// 微信加密签名(token、timestamp、nonce。)
        String timestamp = request.getParameter("timestamp");// 时间戳
        String nonce = request.getParameter("nonce");// 随机数
        String echostr = request.getParameter("echostr");// 随机字符串
        //PrintWriter out = response.getWriter();
    
    展开全文
  • 采用bootstrap开发的一组微信公众号界面,采用VUE动态绑定数据。界面美观,并且可以兼容各种版本。
  • 本文实例讲述了微信公众号点击菜单即可打开并登录微站的实现方法。分享给大家供大家参考。...这里已经提到,必须要拥有高级接口的权限(服务号、企业号),开启了开发者模式。 1.设置回调地址 在微信公
  • 适用于微信公众号客服管理本地开发,新建客服账号上传头像。
  • 当普通微信用户向公众号发送消息或者与微信公众号进行互动触发某些事件时,微信服务器将会把这些消息或者事件以XML数据包格式POST到开发者在微信公众号管理平台中配置的服务器地址URL上,本工程对消息与事件处理进行...
  • 微信公众号开发完整代码
  • 由于我用的是微信公众号的测试进行登录授权。所以接下来我用的的就是用的自己的测试资源进行授权。 首先前往微信的接口文档找到获取用户基本信息。 然后根据微信官方提供的接口,请求方式为get方式,微信...

     

    接下来就是微信的登录授权

    微信的登录授权有两种方式。一种是微信开发者平台微信你登陆授权。一种是微信公众平台的微信登录授权。由于我用的是微信公众号的测试号进行登录授权。所以接下来我用的的就是用的自己的测试号资源进行授权。

    首先前往微信的接口文档找到获取用户基本信息

    然后根据微信官方提供的接口,请求方式为get方式,微信会给你返回一个userInfo信息。这个时候就可以根据json格式的userInfo信息获取该用户的基本信息

    大概的流程就是这样

    最后附上代码。

    1、首先配置自己的服务器,微信测试号所给的配置信息,发送的方式为get方式返回值为json格式的数据

    public static final String APPID="";//填写自己的appid
    	public static final String APPSECRET="";//填写自己appsecret
    	
    	public static JSONObject doGetJson(String url) throws ClientProtocolException, IOException{
    		 JSONObject jsonObject = null;
    	        DefaultHttpClient client = new DefaultHttpClient();
    	        HttpGet httpGet = new HttpGet(url);
    	        HttpResponse response = client.execute(httpGet);//发送请求
    	        HttpEntity entity = response.getEntity();
    	        if(entity !=null) {
    	            String result = EntityUtils.toString(entity, "UTF-8");
    	            jsonObject = JSONObject.fromObject(result);
    	        }
    	        httpGet.releaseConnection();//释放连接
    	        return jsonObject;
    	}

    2、其次自己编写一个servlet层,负责进入登录授权模式

    @WebServlet("/wxLogin")
    public class LoginContorller extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("this is wxLogin----------");
    		System.out.println("in /WxAuth/wxLogin");
            //回调地址 
    		//http://xxx.xx.xx.xx 是我服务器的地址 。当然有域名可以www.****.com
            String backUrl = "http://www.****.com/WxAuth/callBack";
            String url = "https://open.weixin.qq.com/connect/oauth2/authorize?"
                    + "appid=" + AuthUtil.APPID
                    + "&redirect_uri=" + URLEncoder.encode(backUrl)
                    + "&response_type=code"
                    + "&scope=snsapi_userinfo"
                    + "&state=STATE"
                    + "#wechat_redirect";
    //        重定向用户请求到微信授权URL
    			resp.sendRedirect(url);
    	}
    
    	
    
    }

    3、进入对应的servlet后,向微信官网发出请求,与微信进行对接,然后微信会返回登录用户的个人信息,你用一个backurl地址进行回调处理。

    @WebServlet("/callBack")
    public class CallBackController extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("this is callBack=====");
    		 //1. 获取微信回调请求中的code  
            System.out.println("in WxAuth/callBack");
            String code = request.getParameter("code");
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?"
                        + "appid=" + AuthUtil.APPID
                        + "&secret=" + AuthUtil.APPSECRET
                        + "&code=" + code
                        + "&grant_type=authorization_code";
            //2. 向微信发出请求,带上APPSCECRET和code,获取openid和access_toekn
            JSONObject jsonObject = AuthUtil.doGetJson(url);
            String openid = jsonObject.getString("openid");
            String token = jsonObject.getString("access_token");
            //4. 获取用户信息
            String infoUrl = "https://api.weixin.qq.com/sns/userinfo?"
                            + "access_token=" + token
                            + "&openid=" + openid
                            + "&lang=zh_CN";
            JSONObject userInfo = AuthUtil.doGetJson(infoUrl);
            System.out.println(userInfo);
            request.setAttribute("userInfo", userInfo);
            request.getRequestDispatcher("success.jsp").forward(request, response);
    	}
    	
    }

    4、最后所获取的个人信息就在JSONObject userInfo = AuthUtil.doGetJson(infoUrl);中
           你可以打印查看这些信息包括什么。 System.out.println(userInfo);

    主要包括的就是这些字段

    5、项目完工以后,就需要将项目打成war包放在公网服务器上,因为本地运行起来,微信是访问不到loacalhost的地址的。所以放在公网tomcat中,然后重启服务器,通过域名进行访问该项目。

    浏览器访问

    此时浏览器访问会提示你跳转到微信中访问。由于微信测试号的限制,你只能在关注了测试号公众号才能进行访问,获取点击登录人的个人信息。

    至此为止,用户点击登录就可以获取该用户的基本信息了,你可以把用户登陆过的信息保存到自己的数据库之中,便可以及时查看那些用户的唯一中:openid

    展开全文
  • springboot开发微信公众号之消息回复

    热门讨论 2017-12-08 16:09:42
    服务器端采用springBoot开发微信公众号功能,实现与用户的交互,返回用户输入的内容
  • 微信公众号H5页面

    2018-11-06 18:08:41
    模仿微信公众平台做的简单静态页面,里面包含了用户列表,标签设计,关注回复等功能
  • 微信公众号后台逻辑图,手机 服务器 自己服务器交互流程图
  • 界面简单清新,可以直接用,简单修改即可使用,政府微信公众号手机网站模板,政府微信公众号手机网站模板
  • java 微信公众号开发入门 DEMO 可直接跑起来的 大家可以直接下载,然后练习一下。java 微信公众号开发入门 DEMO 可直接跑起来的 大家可以直接下载,然后练习一下。
  • 快捷生成json格式的微信公众号自定义菜单;Quickly generate the WeChat public custom menu in json format
  • springboot实现微信公众号模版消息推送,用的是构架:springboot+redis,详细教程:https://blog.csdn.net/chenhongming888/article/details/95173079
  • 微信公众号后台服务SaaS,支持微信公众平台(订阅号,服务号,企业号,小程序)。 支持多个微信公众号配置 动态更新配置 本项目仍在不断迭代开发中,遇到问题请提问题,谢谢配合。 软件架构 本项目基于Spring Boot...
  • 你可以快速搭建一个订阅号/服务号应用,支持被动回复,主动回复,设置菜单,素材管理,用户管理等
  • C#开发微信公众号实现消息自动回复

    热门讨论 2015-09-24 23:08:33
    作为计算机学院的学生的学生,时刻在打计算机学院官网的主意,前段时间我的一个好基友在我面前炫耀他的能够查课表的公众号(服务模拟登录返回数据),把我眼红得,所以我暗自下决心,自己一定要弄个微信公众号来玩...
  • 微信公众号共有三种,服务号、订阅号、企业号。它们在获取AccessToken上各有不同。接下来通过本文给大家介绍python利用微信公众号实现报警功能,感兴趣的朋友一起看看吧
  • 接口信息配置是用来与微信官网接口进行信息交互。 其中的url就是你在代码中需要发送token令牌进行验证。微信会验证你填写的token令牌跟代码是否一致。填写接口配置信息,此信息需要你有自己的服务器资源,填写的...

    接下来就是配置接口信息。接口信息配置是用来与微信官网接口进行信息交互。

    其中的url就是你在代码中需要发送token令牌进行验证。微信会验证你填写的token令牌跟代码是否一致。填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证。

    1.签名加密工具类SignUtil

    /**
         * 校验签名
         * @param signature 签名
         * @param timestamp 时间戳
         * @param nonce 随机数
         * @return 布尔值
         */
        public static boolean checkSignature(String signature,String timestamp,String nonce){
            String checktext = null;
            if (null != signature) {
                //对ToKen,timestamp,nonce 按字典排序
                String[] paramArr = new String[]{token,timestamp,nonce};
                Arrays.sort(paramArr);
                //将排序后的结果拼成一个字符串
                String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);
    
                try {
                    MessageDigest md = MessageDigest.getInstance("SHA-1");
                    //对接后的字符串进行sha1加密
                    byte[] digest = md.digest(content.toString().getBytes());
                    checktext = byteToStr(digest);
                } catch (NoSuchAlgorithmException e){
                    e.printStackTrace();
                }
            }
            //将加密后的字符串与signature进行对比
            return checktext !=null ? checktext.equals(signature.toUpperCase()) : false;
        }

    2.响应服务器资源WechatIndexController.java

    @RestController
    @RequestMapping("/index")
    public class WechatIndexController {
        private static final Logger LOGGER = LoggerFactory.getLogger(WechatIndexController.class);
        @Autowired
        private MessageService messageService;
    
        @RequestMapping(method = RequestMethod.GET)
        public void get(HttpServletRequest request, HttpServletResponse response) {
            // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
            String signature = request.getParameter("signature");
            // 时间戳
            String timestamp = request.getParameter("timestamp");
            // 随机数
            String nonce = request.getParameter("nonce");
            // 随机字符串
            String echostr = request.getParameter("echostr");
    
            PrintWriter out = null;
            try {
                out = response.getWriter();
                // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败
                if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                    out.print(echostr);
                }
            } catch (IOException e) {
                e.printStackTrace();
                LOGGER.error(e.getMessage());
            } finally {
                out.close();
                out = null;
            }
        }
    }

    我用的是springboot,并且有自己的云服务器阿里云,所以直接将这个项目打成jar包,放在阿里云中运行。

    当然也可以用内网穿透,直接本地运行项目,使用Ngrok或者花生壳就可以。

    运行成功之后,正确填写url和token,就会提示配置成功!

    以上步骤完成后就可以正式的开发,在代码中完善你的功能!

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,962
精华内容 14,384
关键字:

微信公众号服务号开发