具体实现:
第四步:调整CRMEB的H5版 特定API ,传递第一步获取到的用户授权凭据ticket,同步调整 CRMEB系统该API的接口(基于CRMEB系统的token创建),并在本API中同步返回给客户端;
分步4.1:为避免多次请求接口,通过对CRMEBv4.6首页刷新观察,选定内置的获取站点配置接口(/api/site_config),也可选择别的接口使用;
分步4.2:修改默认首页文件 (\view\uni-app\pages\index\diy\index.vue);
备注:标准版4.6还有个较为特殊的地方:因为后台支持首页diy模板与专题页模板的切换,因此在不同的设置下,还需要再同步调整页面:(\view\uni-app\pages\index\visualization\index.vue),基本类同,在此不再赘述
约373行:
修改为:
.....
activeRouter: '',
countNum: 0,
ticket:'' //此处为新增
};
},
约381行:
created(options) {
let that = this
this.ticket = this.getQueryString('ticket') == null ? '' : this.getQueryString('ticket') //此处为新增
this.$nextTick(function() {
uni.getSystemInfo({
success: function(res) {
that.windowHeight = res.windowHeight;
}
});
})
约415行:
// #ifndef APP-PLUS
siteConfig({ticket:this.ticket}).then(res => { //此处为修改:传递获取到的url参数ticket;
this.site_config = res.data.record_No;
//新增代码段开始
//crmeb接口产生token后返回给客户存储,后续访问的时候,crmeb会自动读取该授权token,关键点
if(res.data.token !=''){
that.$store.commit("LOGIN",
'token': res.data.token,
'time': res.data.expires_time - this.$Cache.time()
});
that.$store.commit("SETUID", res.data.uid);
}else{
that.$store.commit("LOGOUT");
}
//新增代码段开结束
分步4.3:修改接口文件 (\view\uni-app\api\api.js);
约411行:
//修改后,用户在请求页面是,接口/api/site_config 会自动附带url参数中ticket票据跟crmeb对于的接口方法:getSiteConfig:
/**
* 获取网站基础配置
*/
export function siteConfig(data) {
return request.get('site_config', data, {
noAuth: true
});
}
分步4.4:修改crmeb接口方法 getSiteConfig(\app\api\controller\v1\PublicController.php);
约117行:
/**
* 获取网站配置
* @return mixed
*/
public function getSiteConfig(Request $request)
{
$data['record_No'] = sys_config('record_No');
list($ticket) = $request->getMore([
['ticket', '']
], true);
$token = self::getUserToken($ticket);
$data = array_merge($data,$token);
return app('json')->success($data);
}
//在本文件最后面增加自定义方法:getUserToken;
private function getUserToken($ticket = ''){
$rs = array(
'token'=>'',
'expires_time'=>0,
'uid'=>0
);
//创建授权token
if(!empty($ticket)){
/** @var UserServices $userService */
$userService = app()->make(UserServices::class);
$uid = $userService->value(['mark' => $ticket, 'is_del' => 0], 'uid');
if ($uid){
$token = $userService->createToken((int)$uid, 'api');
if($token){
$rs['token'] = $token['token'];
$rs['expires_time'] = $token['params']['exp'];
$rs['uid'] = $uid;
}
}
}
return $rs;
}