-
2020-10-10 16:36:32
前言
简单的用白话了解一下企业微信的作用,企业微信是腾讯微信团队为企业打造的专业办公管理工具。大致和钉钉差不多,适用于政府、企业等各类组织的一个产品,可以有效的帮您管理员工。个人感觉企业微信开发要比微信开发更简单一些
正文
企业微信开发有三个比较比较重要的东西,也是最经常用到的!!
1)corpid:每个企业都拥有唯一的corpid
2)agentid:每个应用都有唯一的agentid
3)secret:secret是企业应用里面用于保障数据安全的“钥匙”获取 access_token
获取 access_token 是调用企业微信 API 接口的第一步,相当于创建了一个登录凭证,其它的业务 API 接口,都需要依赖于 access_token 来鉴权调用者身份。请求方式: GET(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
参数说明:参数 必须 说明 corpid 是 企业ID,获取方式参考:术语说明-corpid corpsecret 是 应用的凭证密钥,获取方式参考:术语说明-secret 代码片段
根据企业ID和自建应用密钥来获取当前的 access_token (这个是自定义封装的一个工具类)
/** * 公众平台通用接口工具类 (目前仅包含企业微信) */ public class AccessTokenAPI { // 获取企业微信 access_token private final static String qy_access_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=CORPID&corpsecret=CORPSECRET"; // 获取凭证信息 public static AccessToken getAccessToken(String CORPID,String CORPSECRET){ AccessToken accessToken = new AccessToken(); String requestURL = qy_access_token_url.replace("CORPID", CORPID).replace( "CORPSECRET", CORPSECRET); JSONObject jsonObject = HttpRequestUtil.httpRequest(requestURL,EnumMethod.GET.name(), null); // 如果请求成功 if (jsonObject != null) { try { System.out.println("获取获取凭证信息:"+jsonObject); accessToken.setToken(jsonObject.getString("access_token")); accessToken.setExpiresIn(jsonObject.getInteger("expires_in")); } catch (Exception e) { accessToken = null; } } return accessToken; } }
上方代码中的 AccessToken 实体类
import lombok.Data; /** * @Description Access_Token 凭证 * @Author LinLuoChen * @Date 14:55 **/ @Data public class AccessToken { // 获取到的凭证 private String token; // 凭证有效时间,单位:秒 private int expiresIn; }
下面继续执行下面的测试方法
这个地方需要注意一下,每个应用有独立的secret,所以每个应用的access_token应该分开来获取public static void main(String[] args) { // CORPID 和 SECRET 对应企业ID和应用密钥 AccessToken accessToken = AccessTokenAPI.getAccessToken(CORPID,SECRET); System.out.println("获取tocken为:"+accessToken); }
测试结果
获取成功则返回,以下内容
{ "errcode":0, "errmsg":"", "access_token": "accesstoken000001", "expires_in": 7200 }
获取失败则返回,以下内容
{ "errcode":40001, "errmsg":"xxxxxxxx" }
access_token 获取失败
根据全局错误码的说明 40001 不合法的 secret 参数,secret 在应用详情/通讯录管理助手可查看,排查 secret 的取值也没有错啊,就郁闷了,最后发现问题:是corpid写错了,把企业id写成了应用id!因为“全局错误码”里没有提到corpid错误了会造成40001错误,所以一直以为是scerent的错。
有疑惑的地方欢迎留言讨论!
关于 getUserCode 这个方法是你在拼接回调地址的方法
例如:localhost:端口号/项目地址/请求路径/getUserCode
更多相关内容 -
企业微信开发第三方应用开发篇
2021-06-29 14:36:28充分理解企业微信第三方应用开发流程,带你快速避坑躲雷节约时间精力,从0到1全流程完成企业微信第...另有《企业微信开发概述篇》免费视频系统,对企业微信开发不了解的可前往https://edu.csdn.net/course/detail/30386 -
企业微信开发概述篇
2021-06-22 06:30:071,了解企业微信开发是怎么回事,企业微信开发是开发什么,怎么接入企业微信,接入企业微信能获取什么能力? 2,了解企业微信api及应用类别,自建内部应用与第三方应用有什么区别,适用场景是什么,我该怎么选应用... -
企业微信开发
2018-10-02 17:11:49企业微信开发Demo -
java企业微信源码-weiwork:Java企业微信开发源码框架,获取AccessToken,发送消息
2021-05-19 21:15:06Java企业微信开发源码框架,获取AccessToken,发送消息. 当前应用于公司的企业微信监控报警系统. 微信企业号管理系统源码框架 使用springboot框架 基础签名验证,附加强加密算法jar 获取accessToken 发送消息 扩展对接... -
企业微信开发实操考试.pdf
2021-06-23 15:39:53腾讯企微微信服务商考试,开发实操题答案,不多说,实在货,面试能不能过就看这个文文档 -
企业微信开发问题总结
2019-01-07 11:20:00总结了开发企业微信过程中遇到的各种问题及解决办法,有效的提升开发能力 -
微信公众平台之企业微信 开发教程.zip
2021-01-07 11:18:28微信公众平台之企业微信 开发教程.zip -
企业微信开发工具包
2018-06-08 17:25:39获取accessToken后最好保存起来, 方便后边取, 不要每次都调用接口获取, 接口有频率限制 PS:之前忘记传了 -
企业微信开发介绍
2021-11-04 20:01:17企业微信开发:我们基于企业微信的开放生态,开放的能力、接口、支持进行的开发; 开发信息 企业微信是个软件,开放生态,内置定制浏览器,支持小程序,提供api,提供入口,我们通过查看它的相关技术文档;给自己...企业微信
为企业打造的专业办公管理工具;企业微信开放生态平台;企业微信开发:我们基于企业微信的开放生态,开放的能力、接口、支持进行的开发;
开发信息
企业微信是个软件,开放生态,内置定制浏览器,支持小程序,提供api,提供入口,我们通过查看它的相关技术文档;给自己公司做定制化开发
企业微信应用类别
企业微信api:https://work.weixin.qq.com/api/doc
业务类型:
1.内部应用
2.第三方应用程序类型:
1.小程序
2.网页应用
内部应用、第三方应用都可使用小程序或者网页应用使用小程序应用时,小程序需要先在微信平台上线
第三方应用
适用场景
1.一个应用多个公司使用
2.上线让客户可自已安装
3.上架企业微信应用市场(有一定条件,符合条件才可以上架):其它:
1.开发相比内部应用复杂
2.流程
申请成为服务商(需公司认证才能创建应用)开发应用提交审核->应用上线->共创测试等步骤->应用上架;https:/work.weixin.qq.com/api/doc/90001/90146/90568开发点:聊天工具栏、微信插件、机器人
首先登陆进入后台
企业信息
微信插件
权限管理
聊天管理
通讯录管理
微信插件
申请加入设置
外部沟通管理
安全与保密
常用配置项–应用分组是在这里进行
微信插件、聊天工具栏应用测试
点击查看—测试应用录屏
注意事项:公众号和企业微信只有授权认证的关系,其他功能不互通
-
vue 开发企业微信整合案例分析
2020-10-15 22:28:13主要介绍了vue 开发企业微信整合,结合具体案例形式分析了vue.js使用企业微信JSSDK实现手机端程序可以和企业微信进行整合功能的相关操作技巧,需要的朋友可以参考下 -
【企业微信开发】企业微信开发测试推送应用消息流程
2020-12-23 16:47:191) 登录企业微信 2)在应用管理下方的自建应用中,找到你要推送消息的应用信息 3) 如下图所示 企业ID(CORPID) 1) 点击“我的企业” 2) 在企业信息中,最下方有个企业ID,如下图所示 待推送的企业微信...准备事项
-
企业应用ID(AGENTID)和密钥(SECRET)
1) 登录企业微信
2)在应用管理下方的自建应用中,找到你要推送消息的应用信息,如下图所示
-
企业ID(CORPID)
1) 点击“我的企业”
2) 在企业信息中,最下方有个企业ID,如下图所示
-
待推送的企业微信用户ID(wechatId)
1)通讯录中,找到成员信息,点击查看详情
2)此处的账号信息,就是企业微信ID,如下图所示
测试步骤
-
点击建立连接,输入corpid(企业ID)和corpsecret(此处是应用的密钥,每个应用密钥不同,一定要注意)
-
点击调用接口,获取相应的access_token信息,如下图所示(access_token信息无需复制,只要依然停留在接口调试页面,进入其他功能时,access_token信息会自动带入)
-
点击发送消息-发送应用消息
注意事项:
1、tourser:用上文中查到的用户企业微信ID,多个ID之间用“|”分割
2、msgtype:应用消息中支持多种消息类型,此处记得要修改,消息类型可以在 企业微信API中查询
3、agentid:就是你想要推送消息的应用ID -
修改body中的数据后,点击调用接口按钮,就可以在企业微信中,查看相关应用的推送消息
-
在企业微信APP中查看推送的消息
注意事项:如果调试的时候不成功,可以在企业微信错误码查询工具中查看错误码的含义
-
-
【企业微信】企业微信开发整理(私有化部署企业微信 / 普通企业微信)
2020-09-09 10:03:10使用工具类 ... ...-- 企业微信工具集 https://mvnrepository.com/artifact/com.github.binarywang/wx-java --> <dependency> <groupId>com.github.binarywang</groupId>...使用工具类
https://gitee.com/binary/weixin-java-tools
1 pom引用
<!-- 企业微信工具集 https://mvnrepository.com/artifact/com.github.binarywang/wx-java --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-cp</artifactId> <version>3.9.0</version> </dependency>
2 增加配置 application.yml
普通企业微信不需要配置baseApiUrl / oauth2redirectUri
# 微信相关 wechat: # 私有部署企业微信 privatecp: corpId: wwxxxxxxxxxx baseApiUrl: http://127.0.0.1:161 oauth2redirectUri: http://127.0.0.1:161 # 应用配置 appConfigs: - agentId: 1000001 secret: xxxxxxxxxxxxxxxxxxxxx - agentId: 1000002 secret: xxxxxxxxxxxxxxxxxxxxx
3 增加配置信息类
package com.xxx.auth.config; import java.util.List; import com.xxx.auth.urils.JsonUtils; import org.springframework.boot.context.properties.ConfigurationProperties; import lombok.Getter; import lombok.Setter; /** * @author GuanWeiMail@163.com */ @Getter @Setter @ConfigurationProperties(prefix = "wechat.privatecp") public class WxCpPrivateProperties { /** * 设置微信企业号的corpId */ private String corpId; /** * 基础api域名 */ private String baseApiUrl; /** * oauth2 网页授权请求域名 */ private String oauth2redirectUri; /** * 应用配置集合 */ private List<AppConfig> appConfigs; @Getter @Setter public static class AppConfig { /** * 设置微信企业应用的AgentId */ private Integer agentId; /** * 设置微信企业应用的Secret */ private String secret; /** * 设置微信企业号的token */ private String token; /** * 设置微信企业号的EncodingAESKey */ private String aesKey; } @Override public String toString() { return JsonUtils.toJson(this); } }
工具类
package com.tpln.auth.urils; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; /** * * Json工具类 * @author */ public class JsonUtils { private static final ObjectMapper JSON = new ObjectMapper(); static { JSON.setSerializationInclusion(Include.NON_NULL); JSON.configure(SerializationFeature.INDENT_OUTPUT, Boolean.TRUE); } public static String toJson(Object obj) { try { return JSON.writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } }
4 增加配置类
普通企业微信不需要配置baseApiUrl / oauth2redirectUri
package com.xxx.auth.config; import java.util.Map; import java.util.stream.Collectors; import javax.annotation.PostConstruct; import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; import com.google.common.collect.Maps; import lombok.val; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl; import me.chanjar.weixin.cp.message.WxCpMessageRouter; /** * @Title: 私有部署企业微信配置类 * @Description: 集成企业微信认证 * @Version: v1.0 * @Author: Mr.Guan * @Mail GuanWeiMail@163.com * @DateTime: 2020-09-08 20:01:04 * @Package com.xxx.auth.config */ @Configuration @EnableConfigurationProperties(WxCpPrivateProperties.class) public class WxCpPrivateConfiguration { /** * 配置信息 */ private WxCpPrivateProperties properties; private static Map<Integer, WxCpMessageRouter> routers = Maps.newHashMap(); private static Map<Integer, WxCpService> cpServices = Maps.newHashMap(); @Autowired public WxCpPrivateConfiguration(WxCpPrivateProperties properties) { this.properties = properties; } public static Map<Integer, WxCpMessageRouter> getRouters() { return routers; } public static WxCpService getCpService(Integer agentId) { return cpServices.get(agentId); } /** * 初始化Services * 初始化多个企业应用 */ @PostConstruct public void initServices() { cpServices = this.properties.getAppConfigs().stream().map(appConfig -> { val configStorage = new WxCpDefaultConfigImpl(); //普通企业微信不需要配置baseApiUrl / oauth2redirectUri configStorage.setBaseApiUrl(this.properties.getBaseApiUrl()); configStorage.setOauth2redirectUri(this.properties.getOauth2redirectUri()); configStorage.setCorpId(this.properties.getCorpId()); configStorage.setAgentId(appConfig.getAgentId()); configStorage.setCorpSecret(appConfig.getSecret()); configStorage.setToken(appConfig.getToken()); configStorage.setAesKey(appConfig.getAesKey()); val service = new WxCpServiceImpl(); service.setWxCpConfigStorage(configStorage); routers.put(appConfig.getAgentId(), this.newRouter(service)); return service; }).collect(Collectors.toMap(service -> service.getWxCpConfigStorage().getAgentId(), a -> a)); } private WxCpMessageRouter newRouter(WxCpService wxCpService) { final val newRouter = new WxCpMessageRouter(wxCpService); return newRouter; } }
5 网页授权地址
http://127.0.0.1:161/connect/oauth2/authorize?appid=wwxxxxxxxxxx&redirect_uri=http://服务器ip:8889/auth/callback/WECHAT_ENTERPRISE&response_type=code&scope=SCOPE&agentid=1000001&state=STATE#wechat_redirect
参考
package com.xxx.auth.controller; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.xxx.auth.config.WxCpPrivateConfiguration; import com.xxx.auth.emnu.SourceInfoEnum; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo; import me.chanjar.weixin.cp.bean.WxCpUser; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.Map; /** * @Title: 认证Controller * @Description: 描述 * @Version: v1.0 * @Author: Mr.Guan * @Mail GuanWeiMail@163.com * @DateTime: 2020-08-24 20:01:04 */ @RestController @RequestMapping("auth") public class AuthController { public static void main(String[] args) { System.out.println(SourceInfoEnum.valueOf("WECHAT_ENTERPRISE")); } /** * auth平台中配置的授权回调地址 * 以本项目为例,在创建"企业微信"授权应用时的回调地址应为:http://127.0.0.1:8443/auth/callback/wechat_enterprise?callback= * 企业微信免登陆 * 获取企业用户信息 关联子系统用户 实现免登 * @param request * @param source 请求来源:WECHAT_ENTERPRISE:企业微信 * @return * @throws Exception */ @RequestMapping("callback/{source}") public Object login(HttpServletRequest request, @PathVariable("source") String source) throws Exception{ //获取请求参数 Map<String, String[]> parameterMap = request.getParameterMap(); System.out.println(JSONUtil.parse(parameterMap).toStringPretty()); if(StrUtil.isBlank(source)){ return "error"; } switch (SourceInfoEnum.valueOf(source)){ // 企业微信 case WECHAT_ENTERPRISE: String code = parameterMap.get("code")[0]; //获取微信服务 WxCpService wxCpService = WxCpPrivateConfiguration.getCpService(1000001); //获取用户ID WxCpOauth2UserInfo userInfo = wxCpService.getOauth2Service().getUserInfo(code); System.out.println(JSONUtil.parse(userInfo).toStringPretty()); //获取通讯录 // List<WxCpDepart> list = wxCpService.getDepartmentService().list(1L); // for (WxCpDepart wxCpDepart : list) { // List<WxCpUser> wxCpUsers = wxCpService.getUserService().listByDepartment(wxCpDepart.getId(), false, 0); // System.out.println(JSONUtil.parse(wxCpDepart).toStringPretty()); // System.out.println(JSONUtil.parse(wxCpUsers).toStringPretty()); // } //获取用户明细信息 WxCpUser byId = wxCpService.getUserService().getById(userInfo.getUserId()); System.out.println(byId); //判断子系统是否存在该用户, 存在则直接免登, 生成 token 存入session / redis //不存在则创建用户 break; default: break; } return "ok"; } }
-
企业微信代开发应用回调代码
2022-05-13 23:53:041.企业微信代开发应用的回调解析代码。 2.开箱即用,文档、代码清晰。 3.按照企微规范定义controller的接收值,能实现企微代开发回调的GET校验,POST传值,快速响应,异步处理。 4.按照企微规范实现回调数据的验签... -
企业微信开发(1)——整体说明
2020-09-10 12:40:351、基于企业微信第三方应用开发API文档,做了一个企业微信开发说明文档,总结踩的坑以及对文档的一个补充。 2、本文主要针对第三方应用开发,方便第三方服务商的云应用上架企业微信应用市场 3、实现目标:服务商预先... -
手把手教你springboot企业微信开发(一)
2020-05-16 16:53:28手把手教你springboot企业微信开发(一)1、 配置企业号2、Springboot配置企业号 1、 配置企业号 企业号登录、设置,网址是: https://work.weixin.qq.com/wework_admin/loginpage_wx 微信扫码登录: 选一个,进入... -
企业微信开发-通用开发参数配置-1
2021-01-31 13:20:45这玩意应该没人开发,先这样吧! -
企业微信开发总结-获取通讯录
2020-08-17 11:02:08企业微信开发总结-获取通讯录 最近遇到个项目需求,需要能够获取到用户企业的通讯录,同步到我们系统中,这样就不用重复输入一批企业人员了。一开始想的很简单,实际研究下来发现企业微信比个人微信对接起来复杂多了... -
企业微信开发(1)——接入企业微信
2018-04-21 15:32:10首先得注册个企业微信 其次下载一个加解密的包,免得自己封装 https://work.weixin.qq.com/api/doc#10128/java%E5%BA%93 具体使用方法:下载解压后,将com文件夹拷贝到src下,然后将lib下的jar包拷贝到咱们web... -
企业微信开发实战:自建审批流引擎
2019-10-30 10:16:501.概述 企业微信上是这样介绍的。不过经本人的研究测试,该工作流引擎的功能是比较有限的。...2.企业微信开发基础 文档链接: https://work.weixin.qq.com/api/doc#90000/90135/90665 corp... -
企业微信开发OA审批
2021-10-14 18:02:16(1)企业可通过审批应用或自建应用secret换取access_token,用于企业微信审批应用相关接口调用。 (2)首先,可通过“获取审批模板详情”接口,了解模板内的控件构成及控件id。 (3)然后,可通过 -
腾讯系:微信,公众号,小程序,企业微信开发知识概括
2021-09-30 22:09:54腾讯系:公众号,小程序,企业微信等等开发知识概括企业微信公众号小程序微信开放平台总结 企业微信 第三方应用开发(sass服务商): 概述:第三方应用接口旨在方便企业微信管理员通过简单的操作来使用第三方服务商的... -
企业微信开放平台Api.postman_collection.json
2021-06-29 16:28:01企业微信开放平台Api调试 postman导出 注意:获取access_token 需要更改你自己的corpid 和corpsecret -
企业微信开发:获取用户信息(四)
2020-10-12 15:52:25获取 code 请看:企业微信开发:网页授权登录 2.获取 access_token 请看:企业微信开发:获取 access_token 根据已经获取的 access_token 和 code 换成员信息 请求方式: GET(HTTPS) 请求地址 -
企业微信开发:网页授权登录(三)
2020-10-12 15:18:13前言 本文主要实现目的目标需求为:企业微信登录获取人员信息 借鉴于:企业微信官方文档... 关于配置可信域名可以参考我的第一篇文章:企业微信开发:自建应用配置可信域名 OAuth2.0接入流程说明 请求连接 -
企业微信开发鉴权config、agentConfig鉴权等相关问题
2021-12-23 17:04:46开篇首先吐槽下企业微信开放文档写得有点欺负人的感觉,渣,简单,没案例,踩坑点不突出,路过的大佬你懂的,,,如果你遇到: 1、H5自建企业微信应用本地localhost无法调试? 2、wx.config注入鉴权报80001,43093...