术语解释
secret
secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。
目前secret有:
- 自建应用secret。在管理后台->“应用与小程序”->“应用”->“自建”,点进某个应用,即可看到。
- 基础应用secret。某些基础应用(如“审批”“打卡”应用),支持通过API进行操作。在管理后台->“应用与小程序”->“应用->”“基础”,点进某个应用,点开“API”小按钮,即可看到。
- 通讯录管理secret。在“管理工具”-“通讯录同步”里面查看(需开启“API接口同步”)
- 外部联系人管理secret。在“客户联系”栏,点开“API”小按钮,即可看到。---联系人这块如果需要获取外部联系人unionId ,那么就需要绑定公司的公众号了;
-
微信--企业微信接入
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
package com.dongao.api.controller.qywx;
import com.alibaba.fastjson.JSONObject;
import com.dongao.api.common.utils.HttpClientUtil;
import com.dongao.api.controller.BaseController;
import com.dongao.api.service.QywxService;
import com.dongao.phoenix.cache.app.api.AppRedisCacheApi;
import com.dongao.phoenix.cache.yd.api.activity.YdActivityCacheApi;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping(value = "/qywx")
public class QyWxTestController extends BaseController {
@Autowired
private AppRedisCacheApi appRedisCacheApi;
private String corpid = "企业id";//东奥Ta
private String corpsecret = "联系人secret";//secret
private String yysecret = "自建应用 secret";//自建应用 secret
@Autowired
private QywxService qywxService;
@RequestMapping(value = "test", method = RequestMethod.GET)
public ModelAndView test(String userId) {
ModelAndView mav = new ModelAndView();
//企业级相关参数封装---start
String token = qywxService.getToken(corpid, yysecret);
String qyTicket = qywxService.getQyTicket(token);
// String jsapi_ticket = "HoagFKDcsGMVCIY2vOjf9jrUNEJNLLR2WPkrgMMDKw74iOsUPpswCqNNxac1LhI_TmA0SfykOWBod3o3a0y4Bg";
String noncestr = "adfqwer";
Long timestamp = System.currentTimeMillis()/1000;
String url = request.getRequestURL().toString();
String s1 = "jsapi_ticket="+qyTicket+"&noncestr="+noncestr+"×tamp="+timestamp+"&url="+url;
String signature = 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);
String smallTicket = qywxService.getSmallTicket(token);
// String jsapi_ticket1 = "EdbdhSr1jvTn/2K4zJfjCg==";
String noncestr1 = "adfqwer";
Long timestamp1 = System.currentTimeMillis()/1000;
String s2 = "jsapi_ticket="+smallTicket+"&noncestr="+noncestr1+"×tamp="+timestamp1+"&url="+url;
String signature1 = DigestUtils.sha1Hex(s2);
System.out.println("s2****"+s2+"-----"+signature1);
mav.addObject("noncestr1",noncestr1);
mav.addObject("timestamp1",timestamp1);
mav.addObject("signature1",signature1);
//应用级相关参数封装---end
mav.setViewName("qy/test");
return mav;
}
@RequestMapping("/getUserInfo")
@ResponseBody
public String getExternalUserInfo(Model model, String externalUserid) {
String token = qywxService.getToken(corpid, corpsecret);
String externalUserInfo = qywxService.getExternalUserInfo(token, externalUserid, null);
System.out.println(externalUserInfo);
return externalUserInfo;
}
/**
* 网页授权
* @param code
* @return
*/
@RequestMapping(value = "authorize", method = RequestMethod.GET)
public ModelAndView authorize(String code) {
ModelAndView mav = new ModelAndView();
String userInfo = qywxService.getuserinfoByCode(code, qywxService.getToken(corpid, yysecret));
mav.addObject("user", JSONObject.parse(userInfo));
mav.setViewName("qy/authorize");
return mav;
}
}
备注:
获取企业的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