術語解釋
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