手把手教你springboot企业微信开发(一)

2023-11-14

手把手教你springboot企业微信开发(一)

1、 配置企业号

企业号登录、设置,网址是:
https://work.weixin.qq.com/wework_admin/loginpage_wx
微信扫码登录:
企业号登录
选一个,进入企业号,点【我的企业】进入:
在这里插入图片描述
点左上角我的企业:

设置里,有企业ID复制,到一边备用,这是cropId,在后面会有用的。
下一步点【应用管理】
在这里插入图片描述
在这里插入图片描述
拉到下面,看【自建】

点【创建应用】,填写:

在这里插入图片描述
在这里插入图片描述
可见范围选好了哈,没选自己的话在企业号里看不到应用。
配置好了之后,点【创建应用】,看到下面的页面:
在这里插入图片描述
复制AgentId,和secret至一边,后面备用。现在我们的备用有哪些啦?crop_id,agentId,secret对吧?

到此,企业号配置,暂时告一段落,我们先转到springboot。

2、Springboot配置企业号

Springboot概述…………略
这里就不细说springboot了,以后看看有没有时间写吧。

先看一个开源的demo吧:https://github.com/binarywang/weixin-java-cp-demo
微信企业号中,有很多细节问题,这里不一一赘述,如果有疑问,可以在评论区,我看到之后一起讨论。

把这个项目拉下来。这里先说一下,要使用lombok插件,下载地址:
https://projectlombok.org/download打开安装到eclipse。要安装一下哦,要不然会报错的。

言归正传,从github上拉下来weixin-java-cp-demo之后,打开eclipse,import:
在这里插入图片描述

要用maven导入。对maven有疑问?

导入~

导入成功之后目录结构应该类似这个(红框中的两个yml文件除外):

在这里插入图片描述

将application.yml.template的.template去掉,打开yml文件:
在这里插入图片描述

这里,还记得我前面让复制下来备用的吗?
Token、aeskey暂且分别填个111;corpId、agentId、secret粘贴到这里。

我这边多添加了个yml文件是application-dev.yml,这里不赘述配置文件的细节。

打开pom.xml文件,引入jar包:

  <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-cp</artifactId>
            <version>3.7.0</version>
        </dependency>

新建一个java文件试试配置有没有效果,名称是:WxPushMessageController,内容是:

package com.github.binarywang.demo.wx.cp.controller;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.github.binarywang.demo.wx.cp.config.WxCpConfiguration;
import com.github.binarywang.demo.wx.cp.config.WxCpProperties;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.WxCpMessage;
import me.chanjar.weixin.cp.bean.WxCpMessageSendResult;
@RestController
@RequestMapping("/wx/cp/push")
public class WxPushMessageController {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	WxCpProperties wxCpProperties;
	
	@GetMapping("/touser")
	public Map pushToUsers(@RequestParam(value="user") String user , @RequestParam(value="content") String content , @RequestParam(value="index") int index) {
		
		Map returnMap = new HashMap();
		returnMap.put("code", "100");
		
		int agentId = wxCpProperties.getAppConfigs().get(index).getAgentId();
		final WxCpService wxCpService = WxCpConfiguration.getCpService(agentId);
		
		WxCpMessage message = WxCpMessage
		  .TEXT()
		  .agentId(agentId) // 企业号应用ID
		  .toUser(user)
//		  .toParty("非必填,PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数")
//		  .toTag("非必填,TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数")
		  .content(content)
		  .build();
		
		this.logger.info("\n接收到来自微信服务器的认证消息:echostr = [{}]" , message.getContent());

		WxCpMessageSendResult wxCpMessageSendResult = new WxCpMessageSendResult();
		try {
			wxCpMessageSendResult = wxCpService.messageSend(message);
		} catch (WxErrorException e) {
			
			e.printStackTrace();
			this.logger.info("\n---------------------------------> 报错cause: [{}]" , e.getCause());
			this.logger.info("\n---------------------------------> 报错message: [{}]" , e.getMessage());
			returnMap.put("code", "400");
			returnMap.put("msg", "推送失败,请联系管理员。");
			return returnMap;
		}
		
		if(wxCpMessageSendResult.getErrCode()==0) {
			returnMap.put("code", "0");
			returnMap.put("msg", "推送成功。");
			return returnMap;
		}else {
			returnMap.put("code", "500");
			returnMap.put("msg", "推送失败,请联系管理员。");
			return returnMap;
		}
		
	}
	
}

这个是实现能发个推送消息。
简单解释一下:

@Autowired
WxCpProperties wxCpProperties;

注入的是配置信息,wxCpService.messageSend(message);是调用发送消息。完成之后,可以自己调试一下,先体会体会。
调试启动:WxCpDemoApplication.java
看到下面的日志,说明已经成功了:
在这里插入图片描述

在浏览器里输入:
http://localhost:8000/wx/cp/push/touser?user=XXXXX&content=%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%E8%BF%99%E6%98%AF&index=0

这里的user留意一下,是企业号的userId。在浏览器中出现:
在这里插入图片描述
恭喜你,已经成功的迈出了第一步了。转载的小伙伴,注一下出处,谢谢你们。有任何问题,在评论区留言,我们一起讨论。下一篇博文我与大家一道再接再厉!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手把手教你springboot企业微信开发(一) 的相关文章

  • HashMap不写入数据库

    我尝试在我的数据库中写入 但只写入发件人和消息 我不明白为什么会发生这种情况 我认为问题出在我使用 sendMessage 的地方 我认为问题是我没有什么可以做的读 写其他用户的主键 我在数据库中写入消息的活动 public class M
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部

随机推荐

  • vs code python_VSCode:无法识别术语“ python”……但是py可...

    我刚刚在VS Code上安装了python 但无法使用python命令运行任何python代码 python命令 似乎默认情况下使用python命令 但无法识别它 当我右键单击并选择 运行代码 时 它会抱怨 无法将 python 识别为内部
  • 树莓派 Raspberry 4B 刷机、上网、录音外设、文件传输、电脑投屏问题汇总

    硬件 重要 一定要用正版品牌方的的sd卡 比如闪迪 读写速率至少要class10 否则开启启动很慢 界面很卡 上网连接 开机连接wifi后 wifi名字和密码会被写入配置文件中 开机密码 默认开机密码 raspberry 可修改 也可去掉开
  • sklearn.impute.SimpleImputer 数据填充

    数据缺失值补全方法sklearn impute SimpleImputer imp SimpleImputer missing values np nan strategy mean 创建该类的对象 missing values 也就是缺失
  • python不放回抽样_PYTHON :有(无)放回简单随机抽样

    模拟概率论中的无放回简单随机抽样问题 问题 从1 2 3 4 5中无放回的抽取三个数字 组成一个三位数 并输出 顺序编程 易理解 import random 1 目标数字集合 number set 1 2 3 4 5 2 抓取第一个数字 f
  • mybatis 注解方式批量插入

    原文地址 http blog csdn net isea533 article details 21237175 foreach一共有三种类型 分别为List array Map三种 foreach的第一篇用来将List和数组 array
  • java内存区域简介以及GC机制

    目录 前言 1 java内存区域简介 1 1 方法区 Method Area 1 2 堆区 Heap 1 3 程序计数器 pc 寄存器 1 4 Java 虚拟机栈 JVM Stacks 1 5 本地方法栈 Native Mthod Stac
  • Activiti7源码分析

    文章目录 Activiti7源码分析 整体架构 命令模式 责任链模式 事务拦截器 命令上下文拦截器 流程定义解析 Activiti之PVM执行树 核心理念 PVM对流程定义期的描述 PVM对流程运行期的描述 PVM综述 ActivitiIm
  • vue 如何实现页面操作之后自动刷新

    近半年时间在接触vue写pc页面 文中内容即在实际的开发过程中遇到的实际问题 需要在app vue文件按照如下代码设置
  • 三分钟训练眼球追踪术,AI就知道你在盯着哪个妹子

    圆栗子 编译整理量子位 出品 公众号 QbitAI 啊 老板的眼神飞过来了 还不快切回工作界面 从前 我们几乎无从躲避来自身后的目光 但现在不一定了 如果有个眼球追踪AI 加上人脸识别 或许就能在被老板盯上的瞬间 进入奋力工作模式 戏是有点
  • c++中的this指针

    c 中的this指针 两个对象的比较 多个对象的比较 this指针存放了对象的地址 它被作为隐藏参数传递给了成员函数 指向调用成员函数的对象 调用者对象 this指针存放了对象的地址 this可以表示对象 两个对象的比较 注意 这里的p3是
  • 555定时器

    一 定义 定时器是一种多用途的数字 模拟混合集成电路 可极方便的构成施密特触发器 单稳态触发器和多谐振荡器 其简化原理图及引脚定义如下所示 3个绿色电阻 电阻值为5K 2个黄色和粉色比较器 1个紫色SR触发器 1个蓝色放电三极管 引脚定义
  • 【满分】【华为OD机试真题2023 JAVA&JS】组装新的数组

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 组装新的数组 知识点回溯数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给你一个整数M和数组N N中的元素为连续整数 要求根据N中的元素组装成新的数组R 组
  • PyCharm配置opencv4.5.1

    PyCharm配置opencv4 5 1 一 下载 二 安装 三 环境配置 一 下载 首先我们需要拥有PyCharm软件 opencv4 5 1和pip程序包 下载链接如下 PyCharm https www jetbrains com p
  • (转载)js弹出窗口总结6种弹窗方法

    关闭 父窗口弹出对话框 子窗口直接关闭 this Response Write 关闭 父窗口和子窗口都不弹出对话框 直接关闭 this Response Write 弹出窗口刷新当前页面width 200 height 200菜单 菜单栏
  • 变量和数据类型

    变量概述 变量 它是在程序中最为基本的一种单一数据的存储方式 顾名思义它代表的就是存储的数据可以改变 可以改变的量 值 变量的组成 变量的数据类型 变量名 变量值 数据类型 数值类型 整数类型 1 2 3 0 1 byte 1字节 128
  • 启动MySQL报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost‘ (10061)

    这个错误是新手经常会遇到的 本文主要介绍如何修复ERROR 2003 HY000 Can t connect to MySQL server on localhost 10061 1 登录到安装Mysql的主机 打开cmd命令行工具 执行命
  • uniapp SyntaxError: Unexpected token u in JSON at position 0 解决方案

    今天在做页面跳转传值的时候 一直出现下面的报错 后来查看了下文档 说如果你的JSON数据是在上一个页面传值过来的话 这时候在接收数据页解析JSON也会报该错误 因为此时并没有相关的JSON数据从上一个页面传递过来 可以通过判断是否为null
  • Flutter 信息贴

    框架学习 在 Flutter 中构建绘图应用程序 了解如何在 Flutter 中创建绘图应用程序 并探索 Flutter 在 CustomPaint 小部件的帮助下渲染和控制自定义 UI 的能力 在 Flutter 中创建可重用的自定义小部
  • 【IntelliJ IDEA学习之七】maven专题

    版本 IntelliJIDEA2018 1 4 一 maven全局设置 设置Runner 运行VM参数 Xms128m Xmx512m Duser language zh Dfile encoding UTF 8 二 maven项目 参考
  • 手把手教你springboot企业微信开发(一)

    手把手教你springboot企业微信开发 一 1 配置企业号 2 Springboot配置企业号 1 配置企业号 企业号登录 设置 网址是 https work weixin qq com wework admin loginpage w