微信--企业微信接入

简介: 关于企业微信自建应用接入相关小细节

术语解释

secret

secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。

目前secret有:

  • 自建应用secret。在管理后台->“应用与小程序”->“应用”->“自建”,点进某个应用,即可看到。
  • 基础应用secret。某些基础应用(如“审批”“打卡”应用),支持通过API进行操作。在管理后台->“应用与小程序”->“应用->”“基础”,点进某个应用,点开“API”小按钮,即可看到。
  • 通讯录管理secret。在“管理工具”-“通讯录同步”里面查看(需开启“API接口同步”)
  • 外部联系人管理secret。在“客户联系”栏,点开“API”小按钮,即可看到。---联系人这块如果需要获取外部联系人unionId ,那么就需要绑定公司的公众号了
  • image.png

access_token

access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpid和secret产生。所有接口在通信时都需要携带此信息用于验证接口的访问权限


以自建应用为例

目前是在自建应用中进行相关功能页面开发,且使用到授权功能,获取jssdk相关权限

test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ include file="../common/taglib.jsp" %>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <meta name="format-detection" content="telephone=no" />
  <script src="${imagePath}/static/common/js/jquery-1.7.2.min.js"></script>
  <link rel="stylesheet" href="${imagePath}/static/common/css/reset.css">
<%--  <link rel="stylesheet" href="https://mfiles.dongao.com/static/public/css/reset.css">--%>
  <link rel="stylesheet" href="${imagePath}/static/common/css/common.css">
  <link rel="stylesheet" href="${imagePath}/static/common/css/signUp.css">
  <link rel="stylesheet" href="${imagePath}/static/common/css/wsp_my_order.css">
  <style>
  </style>
</head>
<body class="lt_my lt_personalData">
<input type="hidden" id="chooseimg" value=""/>
<input type="hidden" id="upimg" value=""/>
<input type="hidden" id="downimg" value=""/>
  <div class="top_btn ">
    <a href="javascript:;">
    </a>
    <p class="user_data">个人资料</p>
  </div>
  <div class="personalData_con">
    <div class="ge_zi">
      <div class="ge_zi_user">
        <img src="${imagePath}/static/common/images/img-weidenglu_y.png" alt="" id="avatar" >
        <span class="user_name" id="name"></span>
      </div>
      <div class="ge_zi_title">
        <span class="go_app" >查看东奥个人信息</span>
<%--        <img src="${imagePath}/static/common/images/right.png" alt="">--%>
      </div>
    </div>
  </div>
  <div class="section" style="width: 100%;">
    <table id="curInfo">
    </table>
  </div>
  <div class="section m-t-sm">
    <div class="o_d_contNum">
      <div class="o_d_dNum space_between">
        <p class="d_dNum_p">
          联系人userid:
          <input class="txt_dNum" id="user"/>
        </p>
<%--        <a class="num_copy txt_red">复制</a>--%>
      </div>
    </div>
  </div>
  <div class="section_t" style="margin-bottom: 0.1rem;">
    <div class="sec_ticket" style="padding:0;">
      <input type="text" class="sec_input_t"  id="random" placeholder="输入自定义内容" />
      <img src="${imagePath}/static/common/images/icon_choose_red.png" class="choose_img" />
      <a class="active_btn" data-type="sendChatMessage">确认</a>
    </div>
  </div>
  <div class="section" style="margin-bottom: 20px;">
    <table>
      <tr>
        <td>联系人类型:</td>
        <td>
          <select id="userType">
            <option value="0">请选择</option>
            <option value="1">企业成员</option>
            <option value="2">外部联系人</option>
          </select>
        </td>
      </tr>
      <tr><td> ---  </td><td>  ---  </td></tr>
      <tr>
        <td>信息类型:</td>
        <td>
          <select id="sendMsg">
            <option value="text">text</option>
            <option value="image">image</option>
            <option value="news">news</option>
            <option value="miniprogram">miniprogram</option>
          </select>
          <button class="login_btn" data-type="sendChatMessage" style="float: right;">发送到会话输入框</button>
        </td>
      </tr>
      <tr><td> ---  </td><td>  ---  </td></tr>
    </table>
    <img id="preimg" src="https://ecfiles.dongao.com/ec/shop//goods/images/20210910/1631244760976019427.png">
    <button class="login_btn" data-type="checkJsApi">checkJsApi</button>
    <button class="login_btn" data-type="getContext">获取进入H5页面的入口环境</button>
    <button class="login_btn" data-type="getCurExternalChat">当前客户群的群聊ID</button>
    <button class="login_btn" data-type="shareToExternalChat">群发消息到客户群</button>
    <button class="login_btn" data-type="shareToExternalContact">群发消息到客户</button>
    <button class="login_btn" data-type="selectExternalContact">外部联系人选人接口</button>
    <button class="login_btn" data-type="openUserProfile">打开个人信息页接口</button>
    <button class="login_btn" data-type="launchMiniprogram">打开小程序</button>
    <button class="login_btn" data-type="navigateToAddCustomer">添加客户界面</button>
    <a class="login_btn" href="javascript:sendUrl();" target="_blank">发送网页</a>
    <a class="login_btn" href="javascript:authorize();" target="_blank">网页</a>
    <button class="login_btn" data-type="previewImage">预览</button>
    <button class="login_btn" data-type="chooseImage">拍照或从手机相册中选图</button>
    <button class="login_btn" data-type="downloadImage">下载图片</button>
    <button class="login_btn" data-type="uploadImage">上传图片</button>
    <br>
    <br>
    <textarea cols="20" class="sec_input_t" rows="10" id="biao2">用户定义的代码区域</textarea>
    <input type="hidden" cols="20" class="sec_input_t" rows="10" id="biao1" value="大神福利跨境电商反用户定义的代码区域<br>得到的的的示范法"/>
    <input type="button" onClick="copyUrl2()" value="点击复制代码" />
    <br>
    <br>
    <input type="file" id="chooseimg1" accept="MIME_type"   value=""/>
    <a href="http://vip.admin.test.com/login">全部发送2</a>
  </div>
<input type="hidden" id="jsapi_ticket" value="${jsapi_ticket}" />
<input type="hidden" id="timestamp" value="${timestamp}" />
<input type="hidden" id="signature" value="${signature}" />
<input type="hidden" id="unionId" value="" />
<div class="logon1 clearfix">
<%--  输入自定义内容:<input type="text" id="random" value=""/><br>--%>
</div>
</body>
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
<script>
  var url = location.href.split('#').toString();//url不能写死
  //dongaota
  var appid = "ww07e5628846641622";
  var signature = $("#signature").val();
  var timestamp = $("#timestamp").val();
  var jsapi_ticket = $("#jsapi_ticket").val();
  var signature1 = '${signature1}';
  var timestamp1 = '${timestamp1}';
  $(function () {
    $('.go_app').on('click',function () {
      thirdLogin();
    });
    })
    function authorize() {
      var _actUrl = "http://23244704iy.51mypc.cn/qywx/authorize"
        var _url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww07e5628846641622&redirect_uri="+encodeURIComponent(_actUrl)+"&response_type=code&scope=snsapi_base&state=#wechat_redirect";
        // window.open(_url);
        // window.open('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_input_type_file');
        window.location.href = 'https://appfront.dongao.com/app/handout/V1.1/handoutInfo?appName=da-cloudclass-app&appVersion=3.1.4&debugMode=0&deviceType=1&lectureId=114473&model=OPPOR11&osType=android&osVersion=8.1.0&sign=1641f0c17735754c4372f1dce166247c&timeStamp=1632985200475&token=02f7743d4ed19223552f3095f7b7d002&uniqueId=dfd3b9c49c8d0317&userId=39119061&versionCode=106';
    }
    function sendUrl() {
      var _actUrl = "http://23244704iy.51mypc.cn/qywx/authorize"
        var _url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww07e5628846641622&redirect_uri="+encodeURIComponent(_actUrl)+"&response_type=code&scope=snsapi_base&state=#wechat_redirect";
      $('#random').val(_url);
    }
  function copyUrl2()
  {
    var Url2=document.getElementById("biao1");
    Url2.select(); // 选择对象
    document.execCommand("Copy"); // 执行浏览器复制命令得到的的的示范法
    alert("已复制好,可贴粘。");
  }
  function init() {
    wx.ready((function() {
        wx.invoke('getCurExternalContact', {
        }, function(res){
          if(res.err_msg == "getCurExternalContact:ok"){
            var userId  = res.userId ; //返回当前外部联系人userId
            $("#user").val(userId)
            $("#user").html(userId)
            $.ajax({
              url : "/qywx/getUserInfo",
              type : "get",
              data : {"externalUserid":userId},
              dataType:"json",
              success : function(data){
                console.log(JSON.stringify(data))
                $("#avatar").attr("src",data.external_contact.avatar);
                $("#name").html(data.external_contact.name);
                $("#unionId").val(data.external_contact.unionid);
                var gender = data.external_contact.gender == 1 ? '男' : '女';
                var type = data.external_contact.type == 1 ? '微信用户' : '企业微信用户';
                var followUsers = data.follow_user;
                var userIds = ""
                for(var i=0;i<followUsers.length;i++){
                  userIds += followUsers[i].userid +" ";
                }
                var html = "";
                html += '<tr><td>性别:</td><td>'+gender+'</tr>';
                html += '<tr><td>外部联系人的类型:</td><td>'+type+'</tr>';
                html += '<tr><td>添加了此外部联系人的企业成员userId:</td><td>'+userIds+'</tr>';
              // <tr><td>性别:</td><td></td></tr>
                $("#curInfo").html(html);
                console.log(html)
              },
              error : function(){
                $("#memb , #loading").hide();
                showErrorDiv("网络不给力,请稍后重试!");
              }
            });
          }else {
            //错误处理
          }
        });
      }
    )),
    wx.error((function(e) {
          alert(JSON.stringify(e))
        }
    ));
  }
  function thirdLogin() {
    var _unionId = $("#unionId").val();
    if(_unionId == '' || _unionId == null){
      alert("未获取到unionId");
      return false;
    }
    $.ajax({
      url : "/userApi/user/V1/thirdLogin",
      type : "get",
      data : {"unionId":_unionId},
      dataType:"json",
      success : function(data){
        console.log(JSON.stringify(data))
        if(data.code == 3){
          alert("新用户注册");
          return;
        }
        alert("东奥用户名:"+data.obj.username+"\n手机号:"+data.obj.mobilePhone)
      },
      error : function(){
      }
    });
  }
</script>
<script type="text/javascript" src="${imagePath}/static/qy/qy.js"></script>
</html>

qy.js

wx.config({
    beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: appid, // 必填,企业微信的corpID
    timestamp: timestamp, // 必填,生成签名的时间戳
    nonceStr: 'adfqwer', // 必填,生成签名的随机串
    signature: signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
    jsApiList: ['checkJsApi'],// 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
    success: function(res) {
        // 回调
        alert('成功config');
        // init();
    },
    fail: function(res) {
        alert(res.errMsg)
    }
});
wx.ready((function() {
        wx.checkJsApi({
            jsApiList: ['agentConfig'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
            success: function(res){
            // 以键值对的形式返回,可用的api值true,不可用为false
            // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
                wx.agentConfig({
                    corpid: appid, // 必填,企业微信的corpid,必须与当前登录的企业一致
                    agentid: '1000006', // 必填,企业微信的应用id (e.g. 1000247)
                    timestamp: timestamp1, // 必填,生成签名的时间戳
                    nonceStr: 'adfqwer', // 必填,生成签名的随机串
                    signature: signature1,// 必填,签名,见附录-JS-SDK使用权限签名算法
                    jsApiList: ['chooseImage','downloadImage','uploadImage','previewImage','imagePreview',//媒体图像
                        'selectExternalContact','getContext','sendChatMessage','getCurExternalChat','shareToExternalChat',
                        'shareToExternalContact','openUserProfile','getCurExternalContact','launchMiniprogram','navigateToAddCustomer'], //必填,传入需要使用的接口名称
                    success: function(res) {
                        // 回调
                        // alert('成功');
                        init();
                    },
                    fail: function(res) {
                        // if(res.errMsg.indexOf('function not exist') > -1){
                        //     alert('版本过低请升级')
                        // }
                        alert(res.errMsg)
                    }
                });
            }
        })
        $("[data-type]").on("click", (function(e) {
                switch ($(e.target).attr("data-type")) {
                    case "checkJsApi":
                        wx.checkJsApi({
                            jsApiList: ["getNetworkType", "previewImage", "onHistoryBack"],
                            success: function(e) {
                                // alert(JSON.stringify(e))
                            }
                        });
                        break;
                    case "getContext":
                        wx.invoke('getContext', {
                        }, function(res){
                            if(res.err_msg == "getContext:ok"){
                                var entry  = res.entry ; //返回进入H5页面的入口类型,目前有normal、contact_profile、single_chat_tools、group_chat_tools、chat_attachment
                                alert(entry);
                            }else {
                                //错误处理
                            }
                        });
                        break;
                    case "sendChatMessage":
                        var type = $("#sendMsg").val();
                        var mediaId = $('#upimg').val();
                        if(type == 'text'){
                            if($("#random").val() == ""){
                                alert("请输入具体内容");
                                return false;
                            }
                        }else if(type == 'image'){
                            if(mediaId == '' || mediaId == null){
                                alert("请上传图片素材");
                                return false;
                            }
                        }
                        wx.invoke('sendChatMessage', {
                            msgtype: type, //消息类型,必填
                            text: {
                                content:$("#random").val() == "" ? "dddd" : $("#random").val(), //文本内容
                            },
                            miniprogram: {
                                appid: "wxd72ee341353ba2db",//小程序的appid
                                title: "这是一道题", //小程序消息的title
                                imgUrl:"https://yd-t-1252590610.cos.ap-beijing.myqcloud.com/zy_test/2.jpg",//小程序消息的封面图。必须带http或者https协议头,否则报错 $apiName$:fail invalid imgUrl
                                page:"pages/index/index.html", //小程序消息打开后的路径,注意要以.html作为后缀,否则在微信端打开会提示找不到页面
                            },
                            news: {//{"errcode":0,"errmsg":"ok","url":"https://wework.qpic.cn/wwpic/970933_co_7EaaCQTimBYo_1621497789/0"}
                                link: "https://www.baid.com", //H5消息页面url 必填
                                title: "葫芦娃", //H5消息标题
                                desc: "就是测测", //H5消息摘要
                                imgUrl: "https://wework.qpic.cn/wwpic/970933_co_7EaaCQTimBYo_1621497789/0", //H5消息封面图片URL
                            },
                            image:{ //{"errcode":0,"errmsg":"ok","type":"image","media_id":"34OtvN1PWj9CkCi84HKhALvwMUJAUqxMUt7ONOL74k94pIb2qNr_C73C3DirFrtpd","created_at":"1621498090"}
                                // mediaid: "34OtvN1PWj9CkCi84HKhALvwMUJAUqxMUt7ONOL74k94pIb2qNr_C73C3DirFrtpd", //图片的素材id
                                mediaid: mediaId, //图片的素材id
                            },
                        }, function(res) {
                            if (res.err_msg == 'sendChatMessage:ok') {
                                //发送成功
                                // alert("成功");
                            }
                        })
                        break;
                    case "getCurExternalChat":
                        wx.invoke('getCurExternalChat', {
                        }, function(res){
                            if(res.err_msg == "getCurExternalChat:ok"){
                                // chatId  = res.chatId ; //返回当前客户群的群聊ID
                                $("#random").val(res.chatId)
                            }else {
                                //错误处理
                            }
                        });
                        break;
                    case "shareToExternalChat":
                        wx.invoke("shareToExternalChat", {
                                text: {
                                    content: $("#random").val() == "" ? "默认" : $("#random").val(),    // 文本内容
                                }
                            },function(res) {
                                if (res.err_msg == "shareToExternalChat:ok") {
                                }
                            }
                        );
                        break;
                    case "shareToExternalContact":
                        wx.invoke("shareToExternalContact", {
                                text: {
                                    content: $("#random").val() == "" ? "默认" : $("#random").val(),    // 文本内容
                                }
                            },function(res) {
                                if (res.err_msg == "shareToExternalChat:ok") {
                                }
                            }
                        );
                        break;
                    case "selectExternalContact":
                        wx.invoke('selectExternalContact', {
                            "filterType": 0, //0表示展示全部外部联系人列表,1表示仅展示未曾选择过的外部联系人。默认值为0;除了0与1,其他值非法。在企业微信2.4.22及以后版本支持该参数
                        }, function(res){
                            if(res.err_msg == "selectExternalContact:ok"){
                                var userIds  = res.userIds ; //返回此次选择的外部联系人userId列表,数组类型
                                $("#user").val(userIds);
                            }else {
                                //错误处理
                            }
                        });
                        break;
                    case "openUserProfile":
                        var type = $("#userType").val();
                        if(type == 0){
                            alert("请选择联系人类型");
                            return false;
                        }
                        wx.invoke('openUserProfile', {
                            "type": type, //1表示该userid是企业成员,2表示该userid是外部联系人
                            "userid": $("#user").val() //可以是企业成员,也可以是外部联系人
                        }, function(res){
                            alert(JSON.stringify(res))
                            if(res.err_msg != "openUserProfile:ok"){
                                //错误处理
                                alert(res.err_msg)
                            }
                        });
                        break;
                    case "launchMiniprogram":
                        wx.invoke('launchMiniprogram', {
                                "appid" : "wxd72ee341353ba2db", // 需跳转的小程序appid
                                "path" : "pages/index/index.html", // 所需跳转的小程序内页面路径及参数。非必填
                            }, function(res) {
                                if(res.err_msg == "launchMiniprogram:ok") {
                                    // 正常
                                } else {
                                    // 错误处理
                                }
                            }
                        );
                        break;
                    case "navigateToAddCustomer":
                        wx.invoke('navigateToAddCustomer',
                            {},
                            function(res) {
                            });
                        break;
                    case "previewImage":
                        wx.previewImage({
                            current: 'http://ecafiles.test.com/ec/shop//goods/images/20210910/1631244760976019427.png', // 当前显示图片的http链接
                            urls: ['http://ecafiles.test.com/ec/shop//goods/images/20210910/1631244760976019427.png',
                                'http://ecafiles.test.com/ec/shop//goods/images/20210923/1632376417655087307.jpg'] // 需要预览的图片http链接列表
                            ,
                            success: function (res) {
                                alert(JSON.stringify(res))
                            },
                            fail: function(res) {
                                // if(res.errMsg.indexOf('function not exist') > -1){
                                //     alert('版本过低请升级')
                                // }
                                alert(res.errMsg)
                            }
                        });
                        break;
                    case "chooseImage":
                        wx.chooseImage({
                            count: 1, // 默认9
                            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
                            sourceType: ['album'], // 可以指定来源是相册还是相机,默认二者都有 , 'camera'
                            defaultCameraMode: "normal", //表示进入拍照界面的默认模式,目前有normal与batch两种选择,normal表示普通单拍模式,batch表示连拍模式,不传该参数则为normal模式。从3.0.26版本开始支持front和batch_front两种值,其中front表示默认为前置摄像头单拍模式,batch_front表示默认为前置摄像头连拍模式。(注:用户进入拍照界面仍然可自由切换两种模式)
                            isSaveToAlbum: 1, //整型值,0表示拍照时不保存到系统相册,1表示自动保存,默认值是1
                            success: function (res) {
                                var localIds = res.localIds; // 返回选定照片的本地ID列表,
                                alert(localIds);
                                $('#chooseimg').val(localIds);
                                wx.uploadImage({
                                    localId: $('#chooseimg').val(), // 需要上传的图片的本地ID,由chooseImage接口获得
                                    isShowProgressTips: 1, // 默认为1,显示进度提示
                                    success: function (res) {
                                        var serverId = res.serverId; // 返回图片的服务器端ID
                                        $('#upimg').val(serverId);
                                        alert('上传成功');
                                    },
                                    fail: function(res) {
                                        // if(res.errMsg.indexOf('function not exist') > -1){
                                        //     alert('版本过低请升级')
                                        // }
                                        alert(res.errMsg)
                                    }
                                });
                                // andriod中localId可以作为img标签的src属性显示图片;
                                // iOS应当使用 getLocalImgData 获取图片base64数据,从而用于img标签的显示(在img标签内使用 wx.chooseImage 的 localid 显示可能会不成功)
                            },
                            fail: function(res) {
                                // if(res.errMsg.indexOf('function not exist') > -1){
                                //     alert('版本过低请升级')
                                // }
                                alert(res.errMsg)
                            }
                        });
                        break;
                    case "downloadImage":
                        var down = $('#upimg').val();
                        if(down == '' || down ==null){
                            alert("请上传图片");
                            return;
                        }
                        wx.downloadImage({
                            serverId: down, // 需要下载的图片的服务器端ID,由uploadImage接口获得
                            isShowProgressTips: 1, // 默认为1,显示进度提示
                            success: function (res) {
                                var localId = res.localId; // 返回图片下载后的本地ID
                            }
                        });
                        break;
                    case "uploadImage":
                        var val = $('#chooseimg').val();
                        if(val == '' || val ==null){
                            alert("请选择图片");
                            return;
                        }
                        wx.uploadImage({
                            localId: val, // 需要上传的图片的本地ID,由chooseImage接口获得
                            isShowProgressTips: 1, // 默认为1,显示进度提示
                            success: function (res) {
                                var serverId = res.serverId; // 返回图片的服务器端ID
                                $('#upimg').val(serverId);
                                alert('上传成功');
                            }
                        });
                        break;
                }
            }
        ));
        $('#preimg').on("click", function (e) {
            var attr = $(this).attr('src');
            wx.invoke('imagePreview', {
                    "current" : attr,
                "urls": [attr]
                }, function(res) {
                    if(res.err_msg == "launchMiniprogram:ok") {
                        // 正常
                    } else {
                        // 错误处理
                        // alert(JSON.stringify(res))
                    }
                }
            );
        })
    }
)),
wx.error((function(e) {
        alert(JSON.stringify(e))
    }
));

java

packagecom.dongao.api.controller.qywx;
importcom.alibaba.fastjson.JSONObject;
importcom.dongao.api.common.utils.HttpClientUtil;
importcom.dongao.api.controller.BaseController;
importcom.dongao.api.service.QywxService;
importcom.dongao.phoenix.cache.app.api.AppRedisCacheApi;
importcom.dongao.phoenix.cache.yd.api.activity.YdActivityCacheApi;
importorg.apache.commons.codec.digest.DigestUtils;
importorg.apache.commons.lang3.StringUtils;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.ui.Model;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.ResponseBody;
importorg.springframework.web.servlet.ModelAndView;
importjavax.imageio.ImageIO;
importjava.awt.image.BufferedImage;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.math.BigDecimal;
importjava.util.HashMap;
importjava.util.Map;
@Controller@RequestMapping(value="/qywx")
publicclassQyWxTestControllerextendsBaseController {
@AutowiredprivateAppRedisCacheApiappRedisCacheApi;
privateStringcorpid="企业id";//东奥TaprivateStringcorpsecret="联系人secret";//secretprivateStringyysecret="自建应用 secret";//自建应用 secret@AutowiredprivateQywxServiceqywxService;
@RequestMapping(value="test", method=RequestMethod.GET)
publicModelAndViewtest(StringuserId) {
ModelAndViewmav=newModelAndView();
//企业级相关参数封装---startStringtoken=qywxService.getToken(corpid, yysecret);
StringqyTicket=qywxService.getQyTicket(token);
//        String jsapi_ticket = "HoagFKDcsGMVCIY2vOjf9jrUNEJNLLR2WPkrgMMDKw74iOsUPpswCqNNxac1LhI_TmA0SfykOWBod3o3a0y4Bg";Stringnoncestr="adfqwer";
Longtimestamp=System.currentTimeMillis()/1000;
Stringurl=request.getRequestURL().toString();
Strings1="jsapi_ticket="+qyTicket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url;
Stringsignature=DigestUtils.sha1Hex(s1);
System.out.println(s1+"---"+signature);
mav.addObject("jsapi_ticket",qyTicket);
mav.addObject("noncestr",noncestr);
mav.addObject("timestamp",timestamp);
mav.addObject("signature",signature);
//企业级相关参数封装---end//应用级相关参数封装---start//        String token2 = qywxService.getToken(corpid, yysecret);StringsmallTicket=qywxService.getSmallTicket(token);
//        String jsapi_ticket1 = "EdbdhSr1jvTn/2K4zJfjCg==";Stringnoncestr1="adfqwer";
Longtimestamp1=System.currentTimeMillis()/1000;
Strings2="jsapi_ticket="+smallTicket+"&noncestr="+noncestr1+"&timestamp="+timestamp1+"&url="+url;
Stringsignature1=DigestUtils.sha1Hex(s2);
System.out.println("s2****"+s2+"-----"+signature1);
mav.addObject("noncestr1",noncestr1);
mav.addObject("timestamp1",timestamp1);
mav.addObject("signature1",signature1);
//应用级相关参数封装---endmav.setViewName("qy/test");
returnmav;
    }
@RequestMapping("/getUserInfo")
@ResponseBodypublicStringgetExternalUserInfo(Modelmodel, StringexternalUserid) {
Stringtoken=qywxService.getToken(corpid, corpsecret);
StringexternalUserInfo=qywxService.getExternalUserInfo(token, externalUserid, null);
System.out.println(externalUserInfo);
returnexternalUserInfo;
    }
/*** 网页授权* @param code* @return*/@RequestMapping(value="authorize", method=RequestMethod.GET)
publicModelAndViewauthorize(Stringcode) {
ModelAndViewmav=newModelAndView();
StringuserInfo=qywxService.getuserinfoByCode(code, qywxService.getToken(corpid, yysecret));
mav.addObject("user", JSONObject.parse(userInfo));
mav.setViewName("qy/authorize");
returnmav;
    }
}

备注:

获取企业的jsapi_ticket  https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket

获取应用的jsapi_ticket  https://qyapi.weixin.qq.com/cgi-bin/ticket/get

都可以使用 应用secret 获取的accesstoken 进行获取两个ticket

相关文章
|
4月前
|
移动开发 小程序
微信小程序web-view嵌入uni-app H5页面,通过H5页面跳转企业微信客户聊天窗口如何操作?
微信小程序web-view嵌入uni-app H5页面,通过H5页面跳转企业微信客户聊天窗口如何操作?
|
9月前
|
存储 监控 数据挖掘
|
1天前
|
数据采集 存储 人工智能
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
5 0
|
1天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
4 0
|
1天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
4 0
|
9月前
|
API
企业微信授权登录服务端API实战开发(1):企业微信环境部署
企业微信授权登录服务端API实战开发(1):企业微信环境部署
166 0
|
Docker 容器
gitlab推送企业微信几种方式汇总(二)
gitlab推送企业微信几种方式汇总(二)
2823 1
gitlab推送企业微信几种方式汇总(二)
|
Python
gitlab推送企业微信几种方式汇总(一)
gitlab推送企业微信几种方式汇总(一)
4201 1
gitlab推送企业微信几种方式汇总(一)
|
运维 机器人 Java
Springboot 整合 企业微信机器人助手推送消息
Springboot 整合 企业微信机器人助手推送消息
898 0
Springboot 整合 企业微信机器人助手推送消息
|
API C#
C# 企业微信消息推送对接
C# 企业微信消息推送对接
747 0
C# 企业微信消息推送对接

热门文章

最新文章