文章目录

  • 微信公众号配置
  • 项目配置

微信公众号配置

公众号类型总共分为3类
订阅号
个人

服务号
公司-工商营业执照
个体户-工商营业执照

企业号
公司-工商营业执照

订阅号 服务号 企业号 三者能使用的功能不相同
我们先要用我们的邮箱进入官网注册一下账号
注册的账号需要跟微信号绑定(微信号需要绑定银行卡)
注册需要邮箱激活
个人只能注册订阅号https://mp.weixin.qq.com
公众号官网: https://mp.weixin.qq.com
填好信息之后,会进入下面页面

然后我们在最下面找到开发者工具

选择下面的测试账号

这里我们需要用到了就是这3个ID
微信号、appID、appsecret
这3个id就是我们需要在我们开发项目中需要用到的

然后由于我们的微信是不能直接用IP访问的,所以我们需要做IP映射绑定我们的域名

所以我们就需要做一个内网穿透,用一个域名来绑定我们的127.0.0.1,这里就用到了我们的内网穿透工具
natapp: https://natapp.cn/

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

然后我们选择免费的就行,测试完全够用


注册完成之后,点击免费购买就ok了

购买完之后,我们就去首页下载客户端,选择你自己的系统,我使用的是Windows64位


后续步骤我可以看下面的教程

进行完官网的配置后,启动natapp.exe

在把上面的选中的地址copy下面的URL地址,并且加上项目名,以及cotroller写的注解名,
注意

注意:这个黑框框不能关,关了这个地址会改变,这个地址任何人都可以访问,关了的话,只能使用本地地址访问

token加 weixin4j
weixin4j 简介 for java
weixin4j是一个用Java编写针对微信开发的工具包,为Java微信开发爱好者提供的微信公众开发平台SDK,
它包括包含weixin4j-mp(微信公众平台API)、weixin4j-qy(微信企业号API)以及weixin4j-server(微信回调消息服务器)三个工程.


在前面已经用内网穿透映射了域名,然后我们就可以直接用域名访问项目了
直接使用 http://eajrfy.natappfree.cc/wx01/ 在浏览器访问

项目配置

这是我自己搞的一个项目,有需要的可以自行拿去
项目地址: https://github.com/yang-mou/wx01.git
**访问流程:**首先我们在手机端发送请求给腾讯微信服务器,腾讯服务器响应请求并返回给我们的本地服务器

项目基本架构

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

application.yml就是项目的一些基本配置,以及redis的配置

weixin4j.properties在这里需要更改的是上面说到的3个ID

最主要的加入了weixin4j这个pom依赖,这个接口帮我们实现了
其实配置好之后开发就很简单了,因为后面的开发我们只需要导入一个weixin4j的pom依赖大部分的代码这个接口都帮我们实现了微信接入的方法,这个方法实现了验证消息来源的可靠性,判断是不是微信服务器发过来的请求,并且接收消息
项目中还引入了redis,用来存储微信发送的token令牌

<!--引入weixin4j的依赖--><dependency><groupId>org.weixin4j.spring.boot</groupId><artifactId>weixin4j-spring-boot-starter</artifactId><version>1.0.0</version></dependency>

微信菜单的创建

package com.tzp.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 {@Autowiredprivate WeixinTemplate weixinTemplate;@RequestMapping("/createMenu")@ResponseBodypublic 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);//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());jsonData.put("code", -1);jsonData.put("message", "微信菜单创建失败,原因:" + e.getMessage());}return jsonData;}@RequestMapping("/deleteMenu")@ResponseBodypublic 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,所以这里我们需要开启redis服务
,redis为我们需要接收weixin发送过来的token进行操作,而我们又是用redis来存储我们的token令牌的,所以我们需要开启vm,启动redis
进入我们安装redis的文件夹,输入命令启动redis
./src/redis-server redis.conf


可以看到已经将token存进了redis

然后我们可以扫描下面这个二维码

我通过发送一张图片,

后台获取的消息,可以通过服务器访问这张图片

附录一:spring4中的新注解

  1. @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。
  2. @ConditionalOnMissingBean 仅当BeanFactory中不包含指定的bean class和/或name时条件匹配,就给容器注册bean。

微信公众号开发(个人订阅号版)相关推荐

  1. 微信公众平台开发之订阅号申请,接口验证篇

    2019独角兽企业重金招聘Python工程师标准>>> 1,运营主体选择 微博公众平台的账号目前分为两类,一是服务号,另外一种是订阅号,分析我网站的需求(每天给粉丝推送美食信息,回复 ...

  2. 微信公众平台开发入门教程[2019版]

    关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公 ...

  3. 微信公众平台开发入门教程[2020版]

    在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见左侧 ...

  4. 微信公众号开发之订阅号如何获取用户信息(一)

    最近在做微信的公众号的开发.之前是在一个认证过的微信服务号上开发一些相应的功能. 比如说 对认证过的微信服务好进行 自定义菜单的开发,模板消息的回复以及关键词回复的功能. 但是目前新接了这样一个需求: ...

  5. 视频教程-微信公众平台开发入门-微信开发

    微信公众平台开发入门 订阅后,请点击此处观看大牛全套视频课程:课程播放页链接 价格可能因活动略有浮动 刘运强 ¥39.00 立即订阅视频课 订阅后:请点击此处观看视频课程 视频教程-微信公众平台开发入 ...

  6. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  7. java微信公众号开发教程_微信公众平台开发教程(java版本含代码) 中文PDF版 3.13MB...

    本文档将对即将推出的微信公众帐号开发系列连载教程做简单的说明. 教程主要是面向有一定 Java 编程基础的朋友, 目录: 微信公众帐号开发教程第 1 篇-引言  2 微信公众帐号开发教程第 2 篇-微 ...

  8. php公众号开发关注事件推送图文_PHP_微信公众平台开发关注及取消关注事件的方法,本文实例讲述了微信公众平台 - phpStudy...

    微信公众平台开发关注及取消关注事件的方法 本文实例讲述了微信公众平台开发关注及取消关注事件的方法.分享给大家供大家参考.具体分析如下: 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的 ...

  9. 微信服务号开发的完整人性化版攻略

    前言: 本次要讲述的是一个本人完整微信服务号开发的经验分享,微信服务号的作品:请搜索微信号:zjaisino,名称:爱信诺Aisino一站式服务平台.(这里声明,这不是打广告,只是为了方便各位开花攻城 ...

  10. 微信平台 和服务器什么区别,微信公众平台是选择服务号还是订阅号?两者有什么区别?...

    作为微信营销和微信运营人员,必须对微信营销基础和微信营销的一些技巧都要有所了解;不然,新手将难以从微信入手开始微信营销之路.下面小编为大家介绍微信公众平台是选择服务号还是订阅号以及两者的区别,一起来看 ...

最新文章

  1. oracle do date,Oracle to_date函数的使用
  2. php中输出js语句
  3. BaiDu往年面试题目汇总☆WM☆
  4. 一道Python面试题
  5. 平台型时间信号强度曲线_哥测的不是BET,是氮气等温吸脱附曲线
  6. 5G/NR 学习笔记 - RAR随机接入过程
  7. Python 装饰器@functools.wraps(func)
  8. 组内Linq培训记录
  9. ES6躬行记(3)——解构
  10. java cryptojs_CryptoJS用法
  11. 对《小王子》英文原版进行词频统计,发现他最爱的是......
  12. 《高效能人士的7个习惯》PDF,复习笔记(上)
  13. android模拟器pc版 安装软件,不用花钱,电脑端Android模拟器安装使用教程
  14. python 元组拆包_Python笔记004-元组的拆包和命名元组
  15. java做报表_Java报表制作详细过程
  16. Activation
  17. 解决Navicat使用账号密码登陆Oracle数据库提示【密码已过期,请输入新密码】【或账号已被锁定】
  18. JavaSwing_1.1: FlowLayout(流式布局)
  19. 求数组中的最大值和最大值的索引
  20. D3D12渲染技术之渲染管线

热门文章

  1. css参考手册 pdf,css4.0参考手册
  2. 单反相机参数之ISO/焦距篇
  3. 磁盘分区怎么恢复回去?易我分区大师恢复丢失分区
  4. 农产品管理系统-毕设
  5. 电脑的声卡驱动无法识别,扬声器麦克风无法使用
  6. 音乐专业如何利用计算机思维,太神奇了!带学生“玩音乐”居然可以打开思维创新...
  7. Linux + ChromiumOS操作系统资源持续更新...(转载)
  8. 树莓派chromium-os系统发布
  9. ActionForm 原理 参考百度百科
  10. 扣费克星 1.72 更新说明