微信公众号配置
公众号是什么就不需要过多介绍了,现在应该已经遍布各个行业了,然后我们就直接说配置了
公众号分总共分为3类
-
订阅号
个人 -
服务号
公司-工商营业执照
个体户-工商营业执照 -
企业号
公司-工商营业执照
我们这里就演示个人的公众号开发了
我们先要用我们的邮箱进入官网注册一下账号
公众号官网: https://mp.weixin.qq.com
点击注册,然后点击订阅号,我们填好信息就注册成功了,就能看到我们页面了
然后点击开发者工具
选择我们的测试账号
这里我们需要用到了就是这3个ID
微信号、appID、appsecret
这3个号码就是我们需要在我们开发项目中需要用到的
然后由于我们的微信是不能直接用IP访问的,所以我们需要做IP映射绑定我们的域名
所以我们就需要做一个内网穿透,用一个域名来绑定我们的127.0.0.1,这里就用到了我们的内网穿透工具
natapp: https://natapp.cn/
注册账号需要绑定身份证和支付宝账号就Ok了
然后我们选择免费的就ok了,测试完全够用了
注册完点击购买隧道,选择免费隧道,点击免费购买就Ok了
购买完之后,我们就去首页下载客户端,选择你自己的系统,我这里是Windows64
具体详细步骤我们可以在官网查看
下载完后解压完文件夹里面就只有一个exe文件
然后我们还需要下载一个config.ini文件,进入我们的1分钟快速教程里面,找到我们的config.ini,点击详情下载文件
然后我们的config.ini丢进我们下载的客户端文件夹中
然后我们的token配置进去
然后点击exe文件启动,域名就配置好了
然后我们微信中URL项目地址就可以配置了,token就配置我们的weixin4j就好了,这是我们的工具类包,我们大部分的处理都是调用这个包里面的
项目配置
项目地址: https://github.com/yang-mou/wx01.git
我们实现微信开发的流程,我们手机发送请求到腾讯服务器,然后腾讯服务器再反应给我们
项目的架构
application就是你项目的相关配置,redis、数据等和以前一样的配置
weixin4j.properties的主要就是把我前面说的3个重要的ID配置进去
其实配置好之后开发就很简单了,因为后面的开发我们只需要导入一个weixin4j的pom依赖大部分的代码这个接口都帮我们实现了
项目中还引入了redis,用来存储微信发送的token令牌
<!--引入weixin4j的依赖-->
<dependency>
<groupId>org.weixin4j.spring.boot</groupId>
<artifactId>weixin4j-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
IndexController就是控制页面的跳转
package com.xy.wx01.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@Slf4j
public class IndexController {
@RequestMapping("")
public String toIndex(){
// log.info("aaa");
return "index";
}
@RequestMapping("/toHome")
public String toHome(){
return "home";
}
}
我们前面已经用内网穿透映射了域名,然后我们就可以直接用域名访问项目了
ReceiverController主要是用来接收微信服务器发送过来的消息,只需要实现一个接口即可
package com.xy.wx01.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.weixin4j.spring.web.WeixinJieruController;
/**
* 微信接入入口
*/
@Controller
@RequestMapping("/weixin/receiver")
public class ReceiverController extends WeixinJieruController {
}
然后我们就能进行开发了,我们返回到开发手册
我们今天就主要介绍一下自定义菜单,也就是我们微信公众号下面的操作菜单
WeixinController里面就是我们自定义菜单的代码
package com.xy.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.Weixin;
import org.weixin4j.WeixinException;
import org.weixin4j.component.MenuComponent;
import org.weixin4j.model.base.Token;
import org.weixin4j.model.menu.ClickButton;
import org.weixin4j.model.menu.Menu;
import org.weixin4j.model.menu.SingleButton;
import org.weixin4j.model.menu.ViewButton;
import org.weixin4j.spring.WeixinTemplate;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@Slf4j
@RequestMapping("/wx")
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);
System.out.println("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);
//http://tz3ydw.natappfree.cc/wx01/
SingleButton btn1 = new ViewButton("主界面X", ctx + "/");
buttons.add(btn1);
SingleButton btn2 = new ViewButton("Y界面", ctx + "/toHome");
buttons.add(btn2);
SingleButton btn3 = new ClickButton("界面Z", "hello click!");
buttons.add(btn3);
//设置子菜单
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());
System.err.println(e.getMessage());
jsonData.put("code", -1);
jsonData.put("message", "微信菜单创建失败,原因:" + e.getMessage());
}
return jsonData;
}
@RequestMapping("/deleteMenu")
@ResponseBody
public Map<String,Object> deleteMenu(){
Map<String, Object> jsonData = new HashMap<String, Object>();
jsonData.put("code", 0);
jsonData.put("message", "微信菜单删除成功");
try {
Weixin weixin = weixinTemplate.getWeixinFactory().getWeixin();
MenuComponent menu = weixin.menu();
menu.delete();
} catch (WeixinException e) {
e.printStackTrace();
jsonData.put("code", -1);
jsonData.put("message", "微信菜单删除失败,原因:"+e.getMessage());
}
return jsonData;
}
}
代码写好后,我们需要启动我们的redis,应为我们需要接收weixin发送过来的token才能进行操作,而我们又是用redis来存储我们的token令牌的,所以我们需要开启vm,启动redis
进入我们安装redis的文件夹,输入命令启动redis
./src/redis-server redis.conf
然后我们运行方法创建菜单
可以看到我们的redis也存储了一个token令牌
然后我们进入我们自己的开发者中心,扫描关注一下,进入我们的订阅号就能看见我们的菜单了
utils里面主要是我们对接收的各类消息进行处理,以及我们redis的工具类
后面的开发就比较简单了,微信文档中都记载的很详细,我们后面也就只需要对菜单以及子菜单的操作进行业务处理就完事了
end…