企业微信_企业微信号 - CSDN
企业微信 订阅
企业微信是腾讯微信团队打造的企业通讯与办公工具,具有与微信一致的沟通体验,丰富的OA应用,和连接微信生态的能力,可帮助企业连接内部、连接生态伙伴、连接消费者。专业协作、安全管理、人即服务。目前企业微信已覆盖零售、教育、金融、制造业、互联网、医疗等50多个行业,正持续向各行各业输出智慧解决方案。 [1] 展开全文
企业微信是腾讯微信团队打造的企业通讯与办公工具,具有与微信一致的沟通体验,丰富的OA应用,和连接微信生态的能力,可帮助企业连接内部、连接生态伙伴、连接消费者。专业协作、安全管理、人即服务。目前企业微信已覆盖零售、教育、金融、制造业、互联网、医疗等50多个行业,正持续向各行各业输出智慧解决方案。 [1]
信息
开发商
腾讯
软件名称
企业微信
软件类型
办公平台
更新时间
2020年1月15日
推出时间
2016年4月18日
软件版本
V3.0.2
软件平台
iOS、Android、Windows、Mac
软件语言
简体中文
软件大小
107.56MB [2]
企业微信发展历程
2016年4月18日,企业微信1.0版本上线,连接企业内部每个人2017年6月29日,企业微信2.0版本上线,连接企业内部办公系统2017年,企业微信开放生态,连接生态伙伴2018年3月,企业微信与微信消息互通内测2018年8月,企业微信开放硬件接口,为企业提供软硬一体的解决方案2019年1月,企业微信定制红包封面上线2019年8月,企业微信获得SOC2Type2报告 [3]  2019年12月23日,企业微信3.0版本上线,正式连接微信生态,优化效率工具 [1] 
收起全文
精华内容
参与话题
  • Python实现接收企业微信接收消息

    千次阅读 2020-02-19 17:02:25
    想接收企业微信的消息,首先得开启验证信息API(GET请求)以及接收消息服务(POST请求)。 GET的请求参考: 企业微信验证接口API 第一部分解析POST请求: 并且解析msg_signature, time, nonce和消息体数据Body...

    想接收企业微信的消息,首先得开启验证信息API(GET请求)以及接收消息服务(POST请求)。

    GET的请求参考:

    企业微信验证接口API

    第一部分解析POST请求:
    并且解析msg_signature, time, nonce和消息体数据Body(如下代码中POST的部分)

    @app.route('/blackcat/v1/receive_task', methods=['POST', 'GET'])
    def receive():
        try:
            auth_verify = AuthVerify()
            if request.method == "POST":
                msg_signature = request.args.get('msg_signature')
                timestamp = request.args.get('timestamp')
                nonce = request.args.get('nonce')
                request_data = request.data
                param = auth_verify.verifi_content(msg_signature, timestamp, nonce, request_data)
                submit_task_receive.delay(param)
            if request.method == "GET":
                msg_signature = request.args.get('msg_signature')
                timestamp = request.args.get('timestamp')
                nonce = request.args.get('nonce')
                echostr = request.args.get('echostr')
                s_echo_str = auth_verify.verifi(msg_signature, timestamp, nonce, echostr)
                return s_echo_str
        except Exception as e:
            print(e)
            return jsonify({'code': -1, 'error_message': e})

    然后通过解密用户输入的消息代码如下:

    这里可以解析出来

    会话时间:CreateTime

    消息发起者:FromUserName

    消息的内容:Content

    auth_verify.verifi_content(msg_signature, timestamp, nonce, request_data)
        def verifi_content(self, msg_signature, timestamp, nonce, request_data):
            ret, sMsg = self.wxcpt.DecryptMsg(request_data, msg_signature, timestamp, nonce)
            if ret != 0:
                print "ERR: DecryptMsg ret: " + str(ret)
                sys.exit(1)
            xml_tree = ET.fromstring(sMsg)
            content = xml_tree.find("Content").text
            create_time = xml_tree.find("CreateTime").text
            from_username = xml_tree.find("FromUserName").text
            return {'create_time': create_time, 'from_username': from_username, 'content': content}

     

    展开全文
  • 充分理解企业微信第三方应用开发流程,带你快速避坑躲雷节约时间精力,从0到1全流程完成企业微信第三方网页应用及第三方小程序应用上线,了解上线后的上架流程。
  • 企业微信开发(1)——接入企业微信

    千次阅读 2020-02-19 13:53:24
    首先得注册个企业微信 其次下载一个加解密的包,免得自己封装 https://work.weixin.qq.com/api/doc#10128/java%E5%BA%93 具体使用方法:下载解压后,将com文件夹拷贝到src下,然后将lib下的jar包拷贝到咱们web...

    今日头条搜索三线城市程序员老陈观看视频教程,或者聊聊技术与人生,非常欢迎吭。

    准备工作

    首先得注册个企业微信

    其次下载一个加解密的包,免得自己封装
    https://work.weixin.qq.com/api/doc#10128/java%E5%BA%93

    具体使用方法:下载解压后,将com文件夹拷贝到src下,然后将lib下的jar包拷贝到咱们web工程的WEB-INF/lib下就行了。

    创建应用

    登录企业微信,点击【企业应用】-【创建应用】,输入应用logo、应用名称,选择部门/成员后点击【创建应用】。

    #设置接收微信消息的开发者服务器

    点击刚刚创建的应用,点击【接收消息】-【设置API接收】,在URL处填写我方的地址,例如:

    http://xx.xx.xx.xx:8080/XXproject/XXServlet,表示IP地址xx.xx.xx.xx的8080端口上的XXproject项目的XXSerlvet负责接收微信发送的消息。

    然后点击Token和EncodingAESKey后的随机获取,将这两个参数记录下来。

    然后消息类型都选上,点击【保存】,此时提示"回调URL校验失败",所以需要在刚刚自己的Servlet上处理微信发过来的消息并按规则进行回复,这样微信才认可。

    验证URL

    首先封装一个常量类,保存相关参数,因为是企业微信Enterprise Wechat,此处简写为Wxep,此处为了安全就不具体写参数了

    	package com.easy.wxep.util;
    	/**
    	 * 企业微信常量
    	 * @author easypanda
    	 * @since 2018-04-21
    	 */
    	public class WxepConstants {
    		//API接收消息中的Token
    		public final static String Token="";
    		//API接收消息中的EncodingAESKey
    		public final static String EncodingAESKey="";
    		//企业ID
    		public final static String CorpId="";
    		//应用凭证密钥
    		public final static String CorpSecret="";
    	}
    	
    

    第二,在Servlet中对微信发过来的消息处理,注意加解密使用之前导入的jar包封装的接口即可。此处我用的是SpringMVC接收消息,在Servlet中代码一样即可。

    	/**
    	 * 接收企业微信api消息
    	 * @throws IOException 
    	 */
    	@RequestMapping("/public_wxapi_message")
    	public void public_wxapi_message(HttpServletRequest request, HttpServletResponse response) throws IOException {
    		//获取微信服务器发送过来的四个参数
    		//微信加密签名  
            String msg_signature = request.getParameter("msg_signature");  
            //时间戳  
            String timestamp = request.getParameter("timestamp");  
            //随机数  
            String nonce = request.getParameter("nonce");  
            //随机字符串  
            String echostr = request.getParameter("echostr");  
      
         
            //验证输入后返回消息给微信服务器
            PrintWriter out = response.getWriter();  
            // 通过检验msg_signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  
            String result = null;  
            try {
                WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(WxepConstants.Token, WxepConstants.EncodingAESKey, WxepConstants.CorpId);  
                result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr);  
            } catch (Exception e) {  
                e.printStackTrace();  	
            }  
            if (result == null) {  
                result = WxepConstants.Token;  
            }  
            out.print(result);  
            out.close();  
            out = null;  
    	}
    

    此时再点击【保存】则Eclipse异常信息:Illegal key size

    此时可参考企业微信API提出的方案:

    异常java.security.InvalidKeyException:illegal Key Size的解决方案:在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本, 例如JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html ):下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。
    如果安装了JRE,将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件,如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。
    

    此处我使用的JDK8对应下载地址http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

    验证

    重启Tomcat后再次点击【保存】,提示"保存成功",表示微信服务器已认可我们配置的服务器。

    展开全文
  • 企业微信视频教程(Java标准版)

    千人学习 2018-10-22 21:38:09
    企业微信教程有:“标准版”和“在线版”。正常的,学习“标准版”可以完成企业微信的相关开发。“在线版”是“一对一在线班讲解”,针对同学们项目遇到的问题,个性化定制课程大纲,解决具体问题。“一对一在线班...
  • 企业微信开发概述篇

    2020-08-27 11:26:33
    1,了解企业微信开发是怎么回事,企业微信开发是开发什么,怎么接入企业微信,接入企业微信能获取什么能力? 2,了解企业微信api及应用类别,自建内部应用与第三方应用有什么区别,适用场景是什么,我该怎么选...
  • 企业微信JS-SDK

    千次阅读 2019-12-02 15:48:44
    企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。 通过使用企业微信JS-SDK,网页开发者可借助企业微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信...

    企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。
    通过使用企业微信JS-SDK,网页开发者可借助企业微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信分享、扫一扫等企业微信特有的能力,为企业微信用户提供更优质的网页体验。

    使用说明

    所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),且可信域名必须有ICP备案且在管理端验证域名归属。
    验证域名归属的方法在企业微信的管理后台“我的应用”里,进入应用,设置应用可信域名。

    步骤一:引入js文件

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js
    在vue中使用npm进行安装

    	npm install weixin-js-sdk
    

    使用require引入

    	var wx = require("weixin-js-sdk");
    

    步骤二:通过config接口注入权限验证配置

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)。

    wx.config({
        beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,企业微信的corpID
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名,见 附录-JS-SDK使用权限签名算法
        jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
    });
    

    去后端获取config接口必要的参数

    权限的签名算法需要使用到当前网页的URL,不包含#及其后面部分
    前端获取当前网页的url

    location.href.split("#")[0] ///向服务端提供授权url参数,并且不需要#后面的部分
    

    后端新建一个jssdk配置参数的bean类JssdkConfig

    	public class JssdkConfig {
    	    private String appId; //企业微信的corpID
    	    private String timestamp; //生成签名的时间戳
    	    private String nonceStr; //生成签名的随机串
    	    private String signature; //签名,见 附录-JS-SDK使用权限签名算法
    	    getter/setter方法
    	}
    

    获取企业微信的corpID,签名的时间戳,签名的随机串:

    jssdkConfig.setAppId(WeChatParames.corpId);//必填,企业微信的corpID
    String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
    String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
    jssdkConfig.setTimestamp(timestamp);
    jssdkConfig.setNonceStr(nonceStr);
    

    获取签名
    生成签名需要jsapi_ticket,所以必须先了解一下jsapi_ticket,jsapi_ticket是H5应用调用企业微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限(一小时内,一个企业最多可获取400次,且单个应用不能超过100次),频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket

    获取签名的步骤如下

    • 获取企业的jsapi_ticket(jsapi_ticket必须进行缓存,每次获取都得先去缓存中获取,缓存中没有的话再去重新请求)
    //获取企业的jsapi_ticket
    String jsapiTicket = this.getJsapiTicket();
    
    //获取企业的jsapi_ticket具体方法
    private String getJsapiTicket() {
        if(this.jsapiTicket != null) {
            return this.jsapiTicket;
        }
        if(缓存中存储的jsapi_ticket没有或者已经过期) {
    		String accessToken = this.accessTokenService.getWeChatAccessToken().getAccessToken();
        String url = WeChatParames.jsapiTicketUrl.replace("{ACCESS_TOKEN}", accessToken);
        HttpClientResult httpClientResult = null;
        String jsapiTicket = null;
        try {
            httpClientResult = HttpClientUtils.doGet(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        JSONObject jsonObject = JSONObject.parseObject(httpClientResult.getContent());
        if("0".equals(jsonObject.get("errcode").toString())) {
            jsapiTicket = jsonObject.get("ticket").toString();
            this.jsapiTicket = jsapiTicket;
            System.out.println("jsapiTicket=" + jsapiTicket);
        } else {
            System.out.println("获取企业的jsapi_ticket" + jsonObject.get("errmsg").toString());
        }
        return jsapiTicket;
    } else {
    	//直接返回缓存中jsapi_ticket
    }
       
    }
    
    • 进行sha1签名

    参与签名的参数有四个: noncestr(随机字符串), jsapi_ticket, timestamp(时间戳), url(当前网页的URL, 不包含#及其后面部分)

    将这些参数使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1。
    有两个注意点:1. 字段值采用原始值,不要进行URL转义;2. 必须严格按照如下格式拼接,不可变动字段顺序。
    jsapi_ticket=JSAPITICKET&noncestr=NONCESTR&timestamp=TIMESTAMP&url=URL

    //进行sha1签名
    String sign = "jsapi_ticket="+ jsapiTicket +"&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;
    String signature = "";
    try {
        // 指定sha1算法
        MessageDigest digest = MessageDigest.getInstance("SHA-1");
        digest.update(sign.getBytes());
        // 获取字节数组
        byte messageDigest[] = digest.digest();
        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        // 字节数组转换为 十六进制 数
        for (int i = 0; i < messageDigest.length; i++) {
            String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
            if (shaHex.length() < 2) {
                hexString.append(0);
            }
            hexString.append(shaHex);
        }
        signature = hexString.toString();
    
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        jsonModel.setSuccess(false);
        jsonModel.setMsg("sha1签名出错");
    }
    jssdkConfig.setSignature(signature);
    
    

    通过ready接口处理成功验证

    wx.ready(function(){
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });
    
    

    通过error接口处理失败验证

    wx.error(function(res){
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });
    

    Config信息验证成功后就可以调用js接口了,

    接口调用说明

    所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:
    success:接口调用成功时执行的回调函数。
    fail:接口调用失败时执行的回调函数。
    complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
    cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
    trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。

    注意:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回

    以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:

    调用成功时:”xxx:ok” ,其中xxx为调用的接口名
    用户取消时:”xxx:cancel”,其中xxx为调用的接口名
    调用失败时:其值为具体错误信息

    基础接口

    判断当前客户端版本是否支持指定JS接口

    wx.checkJsApi({
        jsApiList: ['chooseImage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
        success: function(res) {
            // 以键值对的形式返回,可用的api值true,不可用为false
            // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
        }
    });
    

    预览文件接口

    企业微信api文档使用下列方法进行调用,

    wx.previewFile({
        url: '', // 需要预览文件的地址(必填,可以使用相对路径)
        name: '', // 需要预览文件的文件名(不填的话取url的最后部分)
        size: 1048576 // 需要预览文件的字节大小(必填)
    });
    

    实际上调用不起来,需要使用invoke方式进行调用,具体方法如下

    wx.invoke("previewFile", {
                  url: fileUrl,
                  size: size //大小必须与文件实际大小保持一致,不然出现其他问题(预览后返回点击打开文件按钮出现继续下载按钮)
                });
    

    此接口将url对应的文件下载后,在内置浏览器中预览。目前支持图片、音频、视频、文档等格式的文件。仅企业微信APP手机端可用。注意size的大小必须为文件的实际大小,不然预览文件不能正常预览

    常见问题

    企业微信jssdk文件预览url填的是文件服务器存放文件的地址,而在实际项目中有时候是存在oracle数据库中的

    文件预览的url填写下载文件流的后端方法。

    fileUrl =
              "http://zzx.mynatapp.cc/fjticinno/wxCommon/downloadFile.do?idKey=附件id";
    

    后端设置响应头

    response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(name, "UTF-8") + "\"");
    response.setCharacterEncoding("utf-8");
    response.setContentType("application/octet-stream-dummy; charset=utf-8");
    

    还要记得设置content-length响应头,不然显示文件的下载进度会出现问题。虽然这样已经使用jssdk的文件预览正常预览文件了。但是还有个安全性问题,因为企业微信是通过url去请求地址并下载文件,如果这个url对应的后端方法不进行登录拦截或者权限校验的话。那么只要知道这个地址和参数的话,就可以随意下载数据库中存储的文件了。如果通过cookie进行登录拦截的话,从2.4.6版本开始,IOS版企业微信浏览器升级为WkWebView,企业微信原生层面的网络请求读取不到WKWebview中设置的cookie,即使域名是相同的。在企业微信内长按保存,或者点击预览文件时,原生层面发起的网络请求将不会完整地带上所设置的Cookie,会导致图片保存失败或预览失败。暂时使用在登录过滤器中判断请求来源控制权限,

    //企业微信调用文件预览,直接放行
    String referer = request.getHeader("referer");
    if("前端调用文件预览的地址".equals(referer)) {
        filterChain.doFilter(request, response);
    }
    
    展开全文
  • 企业微信

    2019-08-19 16:42:25
    import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;import org.apa...

    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.http.HttpResponse;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    @Controller
    @RequestMapping(value = "${adminPath}/user")
    public class LoginController{

    Logger log = LoggerFactory.getLogger(LoginController.class);

    String corpid ="ww8c58505d51cea383";

    String corpsecret ="6DQn3BjahpIYij76kkGEW-uearBfR0JqI2ozFRJ6o-g";
    @Autowired
    private LdapAuthentication authentication;

    @Autowired
    private UserService userService;
    //@Value("#{APP_PROP['ips']}")
    //private String ips;

    @Value("${self_url}")
    private String self_url;

    @Value("#{APP_PROP['backUrl']}")
    private String backUrl;

    @SuppressWarnings("static-access")
    @RequestMapping(value = "index", method = RequestMethod.GET)
    public String index(HttpServletRequest request, HttpServletResponse response, Model model) {
    return "modules/sys/sysLogin";
    }

    @RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(HttpServletRequest request, HttpServletResponse response, Model model) {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String domain = "@sekorm.com";
    if(StringUtils.isBlank(username) || StringUtils.isBlank(password)){
    request.setAttribute("error", "用户名或密码不能为空!");
    return "modules/sys/sysLogin";
    }
    boolean isLogin = authentication.isLogin(username + domain, password);
    if (!isLogin) {
    request.setAttribute("error", "用户名或密码错误!");
    return "modules/sys/sysLogin";
    }
    request.getSession().setAttribute("username", username);
    UserVo user=new UserVo();
    user.setUserName(username);
    user=userService.getUser(user);
    if (null==user) {
    request.setAttribute("error", "ERP账号还没有创建,请联系ERP工程师!");
    return "modules/sys/sysLogin";
    }
    request.getSession().setAttribute("user", user);
    request.getSession().setAttribute("way", "WEB");
    return "redirect:/a/contact/list";
    }

    @SuppressWarnings({ "unused"})
    @RequestMapping(value = "login_wx", method = RequestMethod.GET)
    public String login_wx(HttpServletRequest request, HttpServletResponse response, Model model) {
    /* * */
    try {
    String tokenUrl ="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ww8c58505d51cea383&corpsecret=6DQn3BjahpIYij76kkGEW-uearBfR0JqI2ozFRJ6o-g";
    Map<String, String> map=new HashMap<String,String>();
    HttpResponse resp = HttpUtil.getInstance().doGet(tokenUrl, map);
    int status=resp.getStatusLine().getStatusCode();
    if(status==200){
    String resultContent= HttpUtil.readStream(resp.getEntity().getContent(), HttpUtil.defaultEncoding);
    Map<String, Object> resultMap = JSON.parseObject(resultContent,new TypeReference<Map<String, Object>>() {});
    String access_token = (String) resultMap.get("access_token");
    String code=request.getParameter("code");
    String useridUrl ="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=1000010";
    useridUrl=useridUrl.replace("ACCESS_TOKEN", access_token).replace("CODE", code);
    HttpResponse respUserInfo = HttpUtil.getInstance().doGet(useridUrl, map);
    int statusUserInfo=respUserInfo.getStatusLine().getStatusCode();
    String resultContentUserInfo= HttpUtil.readStream(respUserInfo.getEntity().getContent(), HttpUtil.defaultEncoding);
    Map<String, Object> userMap = JSON.parseObject(resultContentUserInfo,new TypeReference<Map<String, Object>>() {});
    Object errcode = userMap.get("errcode");
    if(0!=(Integer)errcode ){
    return "error/500";
    }
    String username = (String) userMap.get("UserId");
    request.getSession().setAttribute("username", username);
    UserVo user=new UserVo();
    user.setUserName(username);
    user=userService.getUser(user);
    request.getSession().setAttribute("user", user);
    request.getSession().setAttribute("way", "MOBILE");
    }

    } catch (Exception e) {
    log.error("xxxxxxx",e);
    e.printStackTrace();
    }
    return "redirect:/a/contact/mlist";
    }

    @RequestMapping(value = "oauth_wx", method = RequestMethod.GET)
    public String oauth_wx(HttpServletRequest request, HttpServletResponse response, Model model) {
    try {
    String redirect_uri = "";
    //String backUrl ="http://webback-end.sekorm.com:8082/transactor/a/user/login_wx";
    String url=self_url+backUrl;
    redirect_uri =java.net.URLEncoder.encode(url, "utf-8");
    String oauth2Url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww8c58505d51cea383&redirect_uri=" + redirect_uri
    + "&response_type=code&scope=snsapi_base&agentid=1000010&state=STATE#wechat_redirect";
    return "redirect:" + oauth2Url;
    } catch (Exception e) {
    log.error("xxxxxx",e);
    e.printStackTrace();
    }
    return "error/500";
    }



    }

    转载于:https://www.cnblogs.com/albert-think/p/10682459.html

    展开全文
  • 企业微信作为我们做私域流量、精细化运营客户的唯一选择,但是大冰发现大家对于企业微信的功能还不是很了解。于是我们提炼出了企业微信的9个重要功能、7个小经验,分享给大家。 企业微信的9个重要功能 1、客户联系...
  • 企业微信开发之授权登录

    万次阅读 2019-05-13 14:58:47
    以前写过一篇公众号的授权登录...1.网页授权及JS-SDK需要在企业微信上配置可信域名 2.企业微信授权登录里面填写你的可信域名 调用流程为: A) 用户访问第三方服务,第三方服务通过构造OAuth2链接...
  • 企业微信开发

    万次阅读 2018-05-10 15:19:32
    企业微信的认识企业微信概念:企业微信2016年4月18日,腾讯正式发布全平台企业办公工具“企业微信”。与微信一致的沟通体验,为企业员工提供最基础和最实用的办公服务,并加入贴合办公场景的特色功能、轻OA工具,提供...
  • 企业微信第三方应用上架:在企业微信上,第三方应用想要上架到企业微信的应用市场,首先需要成为服务商,申请成功之后才能走应用上架流程。 其实申请成为服务商不难,难就难在于你要将应用上传到企业微信的应用...
  • 千呼万唤始出来,经过几个月的打磨与测试,CODING 企业微信小程序现已上线!绑定企业微信账号后,添加企业微信小程序,团队成员便可以在小程序内实时接收通知、查看任务详情并进行评论、查看代码合并请求、查看构建...
  • 在开发企业微信小程序的过程中,碰到了很多坑,花了很长时间去填,所以特意记录一下,给大家做个参考。如果大家还遇到了其他的坑,欢迎补充。
  • 企业微信 3.0.24版本更新,这些能力很实用: 离职继承无需客户手动确认了,客户将在24小时后自动添加新接替的成员。 操作路径1: 从通讯录将成员删除后,如果他有已添加的客户和管理的客户群,可以在“客户联系...
  • 企业微信里登录的是企业号的,我在企业号里面的支付接口调用微信支付,弹不出支付的窗口(就是输入微信支付密码窗口),在个人微信里可以。调用的是统一下单支付api接口.
  • 实现个人微信同时接收企业号消息

    万次阅读 2018-04-12 18:13:40
    2.在客户端企业微信app中设置,关闭只在企业微信中接收消息的选项。具体测试中发现,app进入有些企业没有这项设置。对应个人微信联系人中也不能看到该企业号联系人(待确定原因,可能是企业号中权限设置)补充,在写...
  • 微信接收不到企业微信消息推送

    千次阅读 2020-02-25 18:57:20
    一般是微信端的企业号和企业微信都能接收到推送的消息,但有一次企业微信版本更新后发现微信端的推送消息没有接收到。 原因找了很久,最终发现在企业微信里面自己设置了仅在企业微信接收消息。 ...
  • 企业微信3.0.20版本更新,支持更换企业微信帐号所绑定的微信了。 操作路径:企业微信-我-设置-账号-微信-更换微信 新旧微信都需是正常状态的微信(新旧微信都需要是没有封号等情况),若有异常,换绑会提示“该微信...
  • 企业微信程序开发开发者工具添加企业微信小程序插件 开发者工具添加企业微信小程序插件 按照文档设置 工具–>构建npm,添加企业微信模式失败 给微信开放社区提问后得到答复解决 设置–>通用设置–>拓展–&...
  • 企业微信_Java_项目版

    2019-03-11 09:44:22
    针对企业微信项目开发遇到的AccessToken缓存,整合企业微信OA的企业微信打卡、企业微信审批、企业微信公费电话等知识点进行讲解。 课程给出蒲公英解决企业微信外网访问局域网的解决方案。
1 2 3 4 5 ... 20
收藏数 803,621
精华内容 321,448
关键字:

企业微信