企業微信的單點登入適配
個人薪酬企業微信的單點適配前後端總結
1、前端Vue的操作步驟:
(1)router.js裡面新增動態路由引數進行入口路由的區分:
{
//path:'/salary', // emobil的傳參方式
path:'/salary/:origin', // 加一個動態傳參進行區別,即可實現訪問系統url的不同
name:'salaryHome',
component:()=>import('./views/salary/SalaryHome.vue'),
redirect:'/salary/list',
…}
EMobil:http://10.98.30.114:8083/salary/list?ticket=8e9eecda89a50abc01ac1de03f93590fafe77744
WX:
http://10.98.30.114:8083/salary/wx/list?ticket=8e9eecda89a50abc01ac1de03f93590fafe77744
(2)在前端的getdata.js檔案裡寫好前後端介面的呼叫關係
exportconstswitchWxToLoginid=ticket=>fetch(`${baseUrl}/api/salary/switchWxToLoginid/${ticket}`) // 完成前後端介面的呼叫關係匹配
(3)在common.js裡面定義根據ticket得到username的轉換函式getUsernameFromWX()
// 根據前端路由裡面獲得的ticket得到username的方法實現
import { switchWxToLoginid } from '../api/getData' // 從getdata檔案裡面呼叫後端的switchWxToLoginid函式
exportfunctiongetUsernameFromWX(){
letticket=getUrlParam('ticket') // 從前端路由中獲得ticket
console.log(ticket)
let loginid=switchWxToLoginid(ticket) //在後端定義由ticket得到username的函式switchWxToLoginid函式
returnloginid
}
(4)Salaryhome.vue元件增加語句:
①data 裡面新增路由的動態引數
data () {
return {
tabselected: 'salary-list',
origin: this.$route.params.origin,
visible: false
}
}
②在create裡面新增兩個訪問系統的進入區別語句(wx只需得到uesername即可)
created () {
console.log(this.origin)
if (this.origin === 'wx') {
let obj = getUsernameFromWX()
console.log(obj)
this.$userName = getUsernameFromWX()
console.log(this.$userName)
this.$nextTick(() => {
})
}else {
this.$nextTick(() => {
if (this.$userName !== undefined || isValidateRequest()) {
console.log('validate url success!')
}
})
}
}
③methods裡面定新增具體方法的實現
methods: {
initWX(){
getUsernameFromWX()
}
}
④import匯入common中之前寫好的getUsernameFromWX方法
import { isValidateRequest, getUsernameFromWX } from '../../common/common' // 從common中呼叫之前寫好的函式username獲取函式。
2、後端Springboot框架的操作步驟:
(1)在Controller-Salarycontroller新增一個企業微信的個人薪酬訪問介面(不寫具體實現邏輯,只需要書寫介面輸入引數,輸出引數)
//個人薪酬企業微信適配介面定義
@RequestMapping("/switchWxToLoginid/{ticket}")
public Result switchWxToLoginid(@PathVariable("ticket") String ticket) {
try {
String loginid = salaryService.switchWxToLoginid(ticket);
return Result.ok().putData(loginid);
} catch (ApiServiceException e) {
log.error("個人薪酬微信訪問有誤,錯誤資訊是:" + e.getMessage());
return Result.error(e.getMessage());
}
}
(2)在Service-salaryservice裡新增具體的覆蓋方法switchWxToLoginid(String loginID)名稱
public interface SalaryService {
SalaryList getSalaryList(String loginID, String year);
SalaryDetail getSalaryDetailByEmpID(String empID, String year, String month, String type);
List<String> getSalaryYearList(String loginID);
SalaryHistory getSalaryHistory(String loginID);
SalaryTotalDetail getSalaryTotalDetail(String loginID, String type, String condition);
List<PayProgress> getPayProgressList(String loginID);
boolean pushPayNotice(String payProgressID);
String switchWxToLoginid(String ticket); //個人薪酬服務中新增企業微信介面方法
}
(3)在Service-impl-salaryserviceimp裡面實現具體service裡面新增介面方法的轉換邏輯
//匯入企業微信介面後端邏輯實現時所需要用到的類
import cn.com.bii.oa.pushCenter.config.WxConfig;
import cn.com.bii.oa.pushCenter.util.WxUtils;
import com.alibaba.fastjson.JSONObject;
/** 個人薪酬企業微信適配介面方法的具體邏輯實現*/
@Override
public String switchWxToLoginid(String ticket){
String loginid = "";
WxConfig wxConfig = new WxConfig();
JSONObject wxUserKeyResult = WxUtils.getWxUserKey(wxConfig, ticket);
String wxUserKey = wxUserKeyResult.getString("wxuserkey");
JSONObject wxLoginidResult = WxUtils.getLoginIDByID(wxConfig,wxUserKey);
loginid = wxLoginidResult.getString("");
return loginid;
}