SpringBoot中企业微信的API调用

说明

企业微信官方提供的均为API接口,没有提供集成SDK。因此无需引入Maven依赖,直接以Https方式请求即可。
有些第三方提供了集成的Java SDK,可根据需求自行选用。
本文采用直接调用官方API的方式。

基础配置

企业微信注册后,可得到corpIdagentIdcorpSecret的信息。
而企业微信的所有接口均以https://qyapi.weixin.qq.com/cgi-bin开头。
综上,在yml中定义配置:

qywx:
  endpoint: https://qyapi.weixin.qq.com/cgi-bin
  corpId: wx00000000000000ba
  agentId: 1000000
  corpSecret: V0000000000_00000000000000000000000000000wc

然后定义一个配置类:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;


@Component
@Configuration
@ConfigurationProperties(prefix = QywxConfig.prefix)
@Data
public class QywxConfig {

    public final static String prefix = "qywx";

    /**
     * 企业微信请求地址
     */
    private String endpoint;
	
    /**
     * 企业id
     */
    private String corpId;

    private String agentId;

    private String corpSecret;
}

这样即可在容器类中引用配置。

发送请求

服务端需要向企业微信发送请求。这里使用Forest来进行请求。
首先引入依赖:

<!-- forest -->
<dependency>
    <groupId>com.dtflys.forest</groupId>
    <artifactId>forest-spring-boot-starter</artifactId>
    <version>1.5.32</version>
</dependency>

考虑到所有的请求都需拼接共同的企业微信请求地址,因此为Forest添加拦截器来统一处理:

import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.interceptor.Interceptor;
import com.dtflys.forest.reflection.ForestMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class QywxForestInterceptor implements Interceptor<String> {

    @Autowired
    private QywxConfig qywxConfig;

    @Override
    public void onInvokeMethod(ForestRequest req, ForestMethod method, Object[] args) {
        req.setBasePath(qywxConfig.getEndpoint());
    }
}

然后定义请求的接口类:

import com.cosmoplat.hyida.core.result.Result;
import com.cosmoplat.qingyin.safety.qywx.controller.model.dto.MessageTextDto;
import com.cosmoplat.qingyin.safety.qywx.controller.model.dto.QyWxUserDetailDto;
import com.cosmoplat.qingyin.safety.qywx.inteceptor.SafetyForestInterceptor;
import com.dtflys.forest.annotation.*;

import java.util.Map;

@BaseRequest(interceptor = QywxForestInterceptor.class, headers = {"Accept: */*", "Content-Type: application/json"})
public interface QywxForestClient {

    /**
     * 获取access_token
     * @param corpId
     * @param corpSecret
     * @return
     */
    @Get(url = "/gettoken?corpid={corpId}&corpsecret={corpSecret}")
    Map<String,Object> getToken(@Var("corpId") String corpId, @Var("corpSecret") String corpSecret);

}

当调用时,引入QywxConfigQywxForestClient

@Resource
private QywxConfig qywxConfig;

@Resource
private QywxForestClient qywxForestClient;

private String getAccessToken() {
    // 根据corpId和corpSecret获取 access_token
    String corpId = qywxConfig.getCorpId();
    String corpSecret = qywxConfig.getCorpSecret();
    
    Map<String, Object> tokenResult = qywxForestClient.getToken(corpId, corpSecret);
	
	if (!result.get("errcode").equals(0) || StringUtils.isEmpty(result.get("access_token"))) {
        System.out.println("获取企业微信access_token失败!" + result.get("errmsg"));            
    }
	
    return String.valueOf(result.get("access_token"));
}

关于access_token

access_token的官方文档地址:

https://developer.work.weixin.qq.com/document/path/91039

里面明确提到了3个注意事项:

  • 为了安全考虑,开发者 请勿 将 access_token 返回给前端,需要开发者保存在后台,所有访问企业微信api的请求由后台发起。
  • 开发者需要缓存access_token,用于后续接口的调用(注意:不能频繁调用gettoken接口,否则会受到频率拦截)。当access_token失效或过期时,需要重新获取。
  • access_token的有效期通过返回的expires_in来传达,正常情况下为7200秒(2小时),有效期内重复获取返回相同结果,过期后获取会返回新的access_token。

因此,最佳实践应使用Redis缓存access_token。当获取access_token时先从Redis中取。若取不到,则向企业微信发起请求获取,并写入到Redis中。

携带参数

以发送应用消息为例,现在要发送一个文本消息。
参考官方文档:
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
参数示例为:

{
   "touser" : "UserID1|UserID2|UserID3",
   "toparty" : "PartyID1|PartyID2",
   "totag" : "TagID1 | TagID2",
   "msgtype" : "text",
   "agentid" : 1,
   "text" : {
       "content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href=\"http://work.weixin.qq.com\">邮件中心视频实况</a>,聪明避开排队。"
   },
   "safe":0,
   "enable_id_trans": 0,
   "enable_duplicate_check": 0,
   "duplicate_check_interval": 1800
}

返回示例为:

{
  "errcode" : 0,
  "errmsg" : "ok",
  "invaliduser" : "userid1|userid2",
  "invalidparty" : "partyid1|partyid2",
  "invalidtag": "tagid1|tagid2",
  "unlicenseduser" : "userid3|userid4",
  "msgid": "xxxx",
  "response_code": "xyzxyz"
}

现在根据文档的信息来添加接口。
首先定义一个MessageTextDto对象来承载发送时的参数。其中text属性又是一个对象。

import io.swagger.annotations.ApiModel;
import lombok.Data;

@Data
public class MessageTextDto {

    /**
     * 指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。
     * 特殊情况:指定为"@all",则向该企业应用的全部成员发送
     */
    private String touser;

    /**
     * 指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。
     * 当touser为"@all"时忽略本参数
     */
    private String toparty;

    /**
     * 指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。
     * 当touser为"@all"时忽略本参数
     */
    private String totag;

    /**
     * 消息类型,此时固定为:text
     * 必填
     */
    private String msgtype = "text";

    /**
     * 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
     * 必填
     */
    private String agentid;

    /**
     * 消息内容,最长不超过2048个字节,超过将截断(支持id转译)
     * 必填
     */
    private MessageText text = new MessageText();

    /**
     * 表示是否是保密消息,0表示可对外分享,1表示不能分享且内容显示水印,默认为0
     */
    private String safe;

    /**
     * 表示是否开启id转译,0表示否,1表示是,默认0。仅第三方应用需要用到,企业自建应用可以忽略。
     */
    private String enable_id_trans;

    /**
     * 	表示是否开启重复消息检查,0表示否,1表示是,默认0
     */
    private String enable_duplicate_check;

    /**
     * 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时
     */
    private String duplicate_check_interval;
}

MessageText对象:

import lombok.Data;

@Data
public class MessageText {

    /**
     * 消息内容,最长不超过2048个字节,超过将截断(支持id转译)
     * 必填
     */
    private String content;
}

然后在QywxForestClient中添加接口:

@BaseRequest(interceptor = QywxForestInterceptor.class, headers = {"Accept: */*", "Content-Type: application/json"})
public interface QywxForestClient {

    /**
     * 获取访问用户敏感信息
     * @param messageTextDto
     * @param accessToken
     * @return
     */
    @Post(url = "/message/send?access_token={accessToken}")
    Map<String, Object> messageSend(@Body MessageTextDto messageTextDto, @Var("accessToken") String accessToken);
}

这样即可进行调用:

private Map<String, Object> sendMessage(String touser, String content) {
    if (StrUtil.isEmpty(touser)) {
		// 消息接收者为空
		return Maps.newHashMap();
    }

    MessageTextDto messageTextDto = new MessageTextDto();
    messageTextDto.setAgentid(safetyConfig.getAgentId());
    messageTextDto.setTouser(touser);
    messageTextDto.getText().setContent(content);

    String accessToken = getAccessToken();

    Map<String, Object> result = qywxForestClient.messageSend(messageTextDto, accessToken);

    return result;
}

其中getAccessToken()调用了前面封装的getAccessToken方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 微信小程序是腾讯公司基于微信平台推出的一种轻量级应用形态,它无需用户下载安装即可在微信内直接使用。自2017年正式上线以来,小程序凭借其便捷性、易获取性和出色的用户体验迅速获得市场认可,并成为连接线上线下服务的重要桥梁。 小程序的核心特点包括: 零安装:用户只需通过微信扫一扫或搜索功能,即可打开和使用小程序,大大降低了用户的使用门槛和手机存储空间压力。 速度快:加载速度相较于传统的HTML5网页更快,依托于微信强大的基础设施,能够实现近乎原生应用的流畅体验。 跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和裂变增长。 丰富接口能力:提供丰富的API接口,可调用微信支付、位置服务、用户身份识别等多种功能,方便企业进行商业服务的集成与拓展。 目前,微信小程序已经覆盖了电商购物、生活服务、娱乐休闲、教育学习、工具助手等多个领域,为数以亿计的用户提供便捷的服务入口,也为众多商家和开发者提供了新的商业模式和创业机会。随着技术的不断升级和完善,小程序已成为现代移动互联网生态不可或缺的一部分。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 微信小程序是腾讯公司基于微信平台推出的一种轻量级应用形态,它无需用户下载安装即可在微信内直接使用。自2017年正式上线以来,小程序凭借其便捷性、易获取性和出色的用户体验迅速获得市场认可,并成为连接线上线下服务的重要桥梁。 小程序的核心特点包括: 零安装:用户只需通过微信扫一扫或搜索功能,即可打开和使用小程序,大大降低了用户的使用门槛和手机存储空间压力。 速度快:加载速度相较于传统的HTML5网页更快,依托于微信强大的基础设施,能够实现近乎原生应用的流畅体验。 跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和裂变增长。 丰富接口能力:提供丰富的API接口,可调用微信支付、位置服务、用户身份识别等多种功能,方便企业进行商业服务的集成与拓展。 目前,微信小程序已经覆盖了电商购物、生活服务、娱乐休闲、教育学习、工具助手等多个领域,为数以亿计的用户提供便捷的服务入口,也为众多商家和开发者提供了新的商业模式和创业机会。随着技术的不断升级和完善,小程序已成为现代移动互联网生态不可或缺的一部分。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 微信小程序是腾讯公司基于微信平台推出的一种轻量级应用形态,它无需用户下载安装即可在微信内直接使用。自2017年正式上线以来,小程序凭借其便捷性、易获取性和出色的用户体验迅速获得市场认可,并成为连接线上线下服务的重要桥梁。 小程序的核心特点包括: 零安装:用户只需通过微信扫一扫或搜索功能,即可打开和使用小程序,大大降低了用户的使用门槛和手机存储空间压力。 速度快:加载速度相较于传统的HTML5网页更快,依托于微信强大的基础设施,能够实现近乎原生应用的流畅体验。 跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和裂变增长。 丰富接口能力:提供丰富的API接口,可调用微信支付、位置服务、用户身份识别等多种功能,方便企业进行商业服务的集成与拓展。 目前,微信小程序已经覆盖了电商购物、生活服务、娱乐休闲、教育学习、工具助手等多个领域,为数以亿计的用户提供便捷的服务入口,也为众多商家和开发者提供了新的商业模式和创业机会。随着技术的不断升级和完善,小程序已成为现代移动互联网生态不可或缺的一部分。
### 回答1: Spring Boot是一个用于快速构建基于Java的应用程序的框架,而企业微信微信团队专门为企业用户提供的一款移动办公应用。使用Spring Boot开发企业微信可以带来以下好处: 1. 快速开发:Spring Boot提供了一套简单易用的配置和快速启动的机制,可以帮助开发者快速构建企业微信应用程序,提高开发效率。 2. 简化配置:Spring Boot通过自动配置的方式,减少了繁琐的配置和编码工作,开发者只需要关注业务逻辑的实现,而不需要过多关注底层的细节。 3. 内置容器:Spring Boot内置了Tomcat和Jetty等常用的Web容器,开发者不需要手动搭建和配置容器环境,可以直接运行应用程序,减少了部署和运行的复杂性。 4. 集成企业微信API企业微信提供了丰富的API供开发者使用,Spring Boot可以通过集成企业微信的Java SDK,方便地调用各种API进行消息发送、用户管理、部门管理等功能的开发。 5. 良好的扩展性:Spring Boot提供了模块化的架构,可以根据需求选择相应的模块进行开发,同时支持自定义模块的集成,方便进行业务扩展和定制化开发。 综上所述,使用Spring Boot开发企业微信可以帮助开发者更快速地构建应用程序,并且具备良好的可扩展性和可维护性,能够满足企业微信应用的各种需求。 ### 回答2: Spring Boot是一个基于Spring框架的开发工具,可以帮助开发者快速搭建Spring应用程序。而企业微信是一种面向企业内部通信和协作的工具,提供了包括组织架构管理、消息发送、OA办公等功能。 在使用Spring Boot开发企业微信时,可以借助企业微信官方提供的开发文档和SDK,结合Spring Boot框架进行开发。首先,需要在企业微信开发者后台创建应用,获取应用的CorpID和Secret,配置在Spring Boot的配置文件,以便后续进行身份验证和接口调用。 接下来,可以使用企业微信提供的SDK集成企业微信的各种功能。例如,通过SDK的成员管理接口,可以实现企业内部员工的添加、删除、更新等操作;通过消息发送接口,可以实现企业内部的消息推送功能;通过OA接口,可以实现审批流程、加班申请等功能。 此外,Spring Boot还提供了一系列方便的特性,例如自动装配、内嵌Web服务器等,可以方便地搭建企业微信后端服务。可以使用Spring MVC处理接口请求,使用Spring Data JPA进行数据持久化,使用Spring Security进行权限管理等。 总的来说,借助于Spring Boot的便捷开发特性和企业微信提供的SDK,开发者可以快速开发出功能完备的企业微信应用程序。通过合理的架构设计和代码优化,可以使得企业微信应用具备良好的性能和扩展性,在不断迭代满足企业日常通信与协作的需求。 ### 回答3: Spring Boot是一种用于开发Java应用程序的快速、便捷、灵活的框架。企业微信是一款由腾讯开发的专为企业打造的即时通讯工具。使用Spring Boot开发企业微信可以带来以下好处。 首先,Spring Boot内置了很多常用的开发框架和工具,例如Spring MVC、Spring Data JPA和Spring Security等。这些框架和工具使得开发者能够快速构建高效、健壮的企业微信应用程序。 其次,Spring Boot提供了自动配置的特性,使得开发者无需繁琐的配置步骤,即可快速搭建企业微信应用程序的基本框架。开发者只需按照规范进行开发,Spring Boot会根据应用程序的依赖自动进行配置和装配。 再次,Spring Boot拥有丰富的社区支持和强大的生态系统。开发者可以轻松地找到各种开源的插件和扩展,以满足不同业务需求。同时,Spring Boot的文档和教程非常丰富,开发者可以很容易地学习和掌握相关知识。 最后,Spring Boot具有良好的可扩展性和可维护性。它采用模块化的设计思路,使得开发者可以灵活地添加或移除功能模块,满足企业微信应用程序的不同需求。同时,Spring Boot的代码结构清晰,易于维护和管理。 总之,使用Spring Boot开发企业微信可以提高开发效率、简化配置、拓展功能和提升应用程序的可维护性。这使得企业可以更快速地开发出高质量的微信应用程序,满足企业内部即时通讯和协作的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值