微信公众号(个人订阅号)

 公众号分类


1.  订阅号(个人)

2 服务号(公司-工商营业执照、个体户-工商营业执照)

3 企业号(公司-工商营业执照)

注册公众平台账号

1 个人只能注册订阅号 :https://mp.weixin.qq.com

2 订阅号 服务号 企业号 三者能使用的功能不相同

3 注册的账号需要跟微信号绑定(微信号需要绑定银行卡)
    3.1 注册地址: https://mp.weixin.qq.com/cgi-bin/readtemplate?t=register/step1_tmpl&lang=zh_CN
  3.2 注册需要邮箱激活

开通测试号

登录后找到开发者工具:

扫描二维码关注公众号,回复: 8321281 查看本文章

微信号、appID、appsecret这三个是开发项目中所用到的而且是唯一的

因为微信不能用IP直接访问的,需要进行ip映射绑定的域名

 

 配置内网穿透工具 

https://natapp.cn/

注册账号(需要绑定身份证和支付宝)

注册完点击购买隧道,选择免费隧道

 然后去首页下载客户端,选择自己的系统

 下载完解压后

 点击1分钟快速新手图文教程

 然后把config.ini放入下载客户端目录下:

把token配进config.ini中

运行exe文件

 

 配置项目的url地址 :

项目配置:

项目地址:https://github.com/chenjiahao12/wx01

项目目录:

 

application.yml项目相关的配置数据库连接,redis的配置

weixin4j.properties就是配置ID就是登陆微信公众号的那三个

 IndexController

package com.cjh.wx01.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Controller
@Slf4j
public class IndexController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping("/hello")
    @ResponseBody
    public Map<String, Object> hello() {
//        log.info("hello");
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("code", 0);
        map.put("message", "xyz");

        return map;
    }

    @RequestMapping("/toMain")
    public String toMain(Model model) {
//        log.info("toMain");
        Integer n = 1;
        String loginCount = stringRedisTemplate.opsForValue().get("loginCount");
        if (null != loginCount) {
            n = Integer.parseInt(loginCount) + 1;
        }
        stringRedisTemplate.opsForValue().set("loginCount", n.toString());

        model.addAttribute("now", new Date().toLocaleString()+",XXXXXYYYYYYzzzzAAAA");
        model.addAttribute("loginCount", n);

        return "main";
    }

    @RequestMapping("")
    public String toIndex() {
        return "index";
    }

    @RequestMapping("/toHello")
    public String toHello() {
        return "hello";
    }
}

启动项目:

因为我们配置了ip映射域名所有直接用域名访问项目:

 配置weixin接入Controller 

package com.cjh.wx01.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.weixin4j.spring.web.WeixinJieruController;

/**
 * 微信开发者接入
 */
@Controller
@RequestMapping("/weixin/jieru")
public class JieruController extends WeixinJieruController {
}

这样我们就可以进行开发了

 自定义菜单:

weixinController

package com.cjh.wx01.controller;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.weixin4j.Configuration;
import org.weixin4j.Weixin;
import org.weixin4j.WeixinBuilder;
import org.weixin4j.component.MenuComponent;
import org.weixin4j.factory.WeixinFactory;
import org.weixin4j.factory.defaults.DefaultWeixinFactory;
import org.weixin4j.model.base.Token;
import org.weixin4j.model.menu.Menu;
import org.weixin4j.model.menu.SingleButton;
import org.weixin4j.model.menu.ViewButton;
import org.weixin4j.spring.WeixinTemplate;
import sun.applet.Main;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/wx")
@Slf4j
public class WeixinController {


    @Autowired
    private WeixinTemplate weixinTemplate;

    @RequestMapping("/createMenu")
    @ResponseBody
    public Map<String, Object> createMenu(Model model, HttpServletRequest request) {


//        log.info("WeixinController.createMenu");
        String ctx = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
//        log.info("ctx=" + ctx);

        Map<String, Object> jsonData = new HashMap<String, Object>();
        jsonData.put("code", 0);
        jsonData.put("message", "微信菜单创建成功");
        try {
            Menu menu = new Menu();
            //创建菜单按钮
            List<SingleButton> buttons = new ArrayList<SingleButton>();
            menu.setButton(buttons);

            SingleButton btn1 = new ViewButton("主界面", ctx + "/");
            buttons.add(btn1);

            SingleButton btn2 = new ViewButton("界面Y", ctx + "/toHello");
            buttons.add(btn2);

            SingleButton btn3 = new ViewButton("界面X", ctx + "/toHello");
            buttons.add(btn2);

            //设置子菜单
            System.out.println(menu.toJSONObject().toString());

            //创建自定义菜单
            Weixin weixin = weixinTemplate.getWeixinFactory().getWeixin();
            MenuComponent menu1 = weixin.menu();
            menu1.create(menu);
            model.addAttribute("message", "微信菜单创建成功");
        } catch (Exception e) {
//            log.error(e.getMessage());
            jsonData.put("code", -1);
            jsonData.put("message", "微信菜单创建失败,原因:" + e.getMessage());
        }

        return jsonData;
    }


    @RequestMapping("/test1")
    @ResponseBody
    public Map<String, Object> test1() {
//        log.info("WeixinController.test1");
        Map<String, Object> jsonData = new HashMap<String, Object>();
        System.out.println("test");
        String s1 = Configuration.getProperty("weixin4j.message.handler.normal");
        String s2 = Configuration.getProperty("weixin4j.message.handler.event");

        jsonData.put("weixin4j.message.handler.normal", s1);
        jsonData.put("weixin4j.message.handler.event", s2);
        return jsonData;
    }

    public static void main(String[] args) throws Exception {
        Weixin weixin = new Weixin();
        weixin.base().token();
        Token token = weixin.getToken();
        System.out.println(token);
    }

}

需要接收weixin发送过来的token才能进行操作,而我们又是用redis来存储我们的token令牌的,所以我们需要开启vm,启动redis

./src/redis-service redis.conf

然后运行方法创建菜单:

 可以看到redis也存储了一个token令牌

 

进入我们自己的开发者中心,扫描关注一下,进入我们的订阅号就能看见我们的菜单了

 

weixin这个包里面主要是我们对接收的各类消息进行处理,以及我们redis的工具类



猜你喜欢

转载自www.cnblogs.com/chenjiahao9527/p/12102613.html