企业应用接入
当您是为自己的企业/代表一个企业开发全新的“企业应用”,或者把您的企业内部的遗留系统连接到U聊后形成“企业微应用”后,企业员工在U聊内使用该企业微应用时,只要直接点击应用,便可免输入账户密码实现自动登录您所开发的系统。
交互流程概述
1. 业务系统平台与U聊整体交互流程
2. 认证子流程
时序描述:
- 接入系统的前端页面嵌入U聊客户端中,客户端发起链接点击,接入系统前端需要先判断浏览器cookie是否有效,如果有效表明已经登陆,直接做业务操作,如果无效,需要从接入系统前端通过JS向U聊客户端框架拿到校验码后带上这个参数跳转到平台后端。
- 接入系统后端拿到校验码这个参数后,拿校验码向U聊后台询问此次链接点击是否合法,如果合法,U聊服务器会返回用户信息。
- 使用U聊服务器返回的客户信息,接入系统做模拟登陆后做正常业务,同时把用户信息存入cookie。
接入系统开发注意事项
1. 用户绑定预处理
U聊系统使用各组织OA系统账号,在和各系统对接时候,已经导入。如果接入平台同样使用OA系统用户,则不需要做特殊处理,否则需要再各平台做U聊账号到各平台用户映射。
2. 接入系统后台服务接入U聊约束
- 接入系统服务后端接口调用建立在https基础上,保证系统安全。
- 接入系统设置IP白名单,只信任U聊服务器发来的消息
- 类似U聊,接入系统提供签到、签退功能,生成调用凭证,在有效期内通过此凭证调用
3. 接入系统前端页面接入U聊约束
- 为确保安全,对接系统嵌入U聊中的页面,请使用HTTPS发布
- 由于手机系统的安全控制,HTTPS证书必须由可信证书颁发机构颁发,并可通过浏览器默认安全检查。
- 对于HTTPS中引用的资源,请注意浏览器的本身安全规范约束,如不能引用HTTP资源、不能引入其他域名地址下的资源(否则带来跨域问题)、不能引用浏览器不可获资源(比如,google analytics访问分析需要引入的资源由于众所周知的原因国内可能无法访问,请不要引入)
企业免登录认证之前端开发
1. 页面引入JS资源包
两种引入方式:jquery与zepto。
由于后续会增加cordova接口,强烈建议使用线上的地址,不要把app.upchat.js放到本地。
注意把domain换为自己域名,或者设置为相对地址。如果页面运行在https下面,请使用https地址。
jquery方式引入
<head>
......
<script src="./js/jquery-1.11.2.min.js"></script>
<script src="https://domain/public/scripts/app.upchat.js" ></script>
</head>
zepto 方式引入
<head>
<script src="./js/zepto-1.2.0.min.js" ></script>
<script src="https://domain/public/scripts/zepto.app.upchat.js" ></script>
</head>
2.资源文件确认
能正常使用cordova接口,则必须保证资源文件的正确引用。app.upchat.js和zepto.app.upchat.js中引用了android、ios和electron的资源文件,为确保接口正常使用,应确保资源文件的正常引用。
确认资源文件是否正常引用的方法:app.upchat.js或zepto.app.upchat.js代码开头第一个函数中“PAGE_CONTEXT_URL:”后的地址+“/cordova/min/electron-min.js”,在浏览器中打开,查看是否能正确访问。
例如:文件第一个函数代码为(function(e){var n={URLS:{PAGE_CONTEXT_URL:"https://user.95516.com/upchatjs/unionpay"}};e.CONFIG=n}),那么检验资源文件是否正确引用的地址为:https://user.95516.com/upchatjs/unionpay/cordova/min/electron-min.js
同样,以此方法,可以自行修改资源文件引用的网络地址。例如:测试环境的网络不能访问生产网络,那么可以将“PAGE_CONTEXT_URL:”后的地址改为测试环境的地址,测试能正确引用资源文件即可。
3.接入系统调用JS做接入认证
JavaScript方式调用,示例代码仅供联调使用,上生产时请根据不同的异常情况自行处理
以下测试页面请在对应的公众号中打开
- getsecurity 获取校验码
- 注意调用UPCHAT.M.NAPI.getSecurity之前需要判断是否在U聊中,并且在init方法中调用,如果不在U聊中提示用户使用U聊打开。
- UPCHAT.M.NAPI.getSecurity失败的回调函数中需要判断该接口U聊是否支持,
fal == '版本不支持' || fal == 'Class not found' || fal == 'Invalid action'则提示用户升级U聊,其他情况代表接口调用失败 - UPCHAT.M.NAPI.getSecurity成功的回调函数需要根据返回的状态码,判断是否拿到了security,为0代表成功,否则代表参数有问题或者服务器内部错误
- 前端传递校验码到对接系统后台
- 根据返回的值判断是否拿到用户信息,U聊后台返回码:
"0", "成功"; "99", "非法请求" 代表用户没权限,或者公众号配置有问题; "100","登录已失效,请重新登录"
- 根据返回的值判断是否拿到用户信息,U聊后台返回码:
- 对接系统后台请求U聊后台获取用户信息
- 前端根据对接系统返回码判断是否拿到了用户信息。
代码示例:
/**
* getUserInfo 根据校验码获取用户信息
* 声明:以下示例代码仅供联调使用,上生产时请根据不同的异常情况自行处理
*/
var getUserInfo = function() {
var url = '/upchat-public-demo/api/page/checkSecurity';
//成功后回调函数 代表流程是正常的,但是还需要判断result.status
//这里成功后调用了后台checkcode的servlet校验安全码
var _success = function (result) {
// 验证校验码
// AJAX验证校验码,此处接口和参数自行设计和约定
UPCHAT.M.NAPI.dismiss();
alert('验证校验码' + result.security);
/**
* status 为0 代表服务器返回的值是正确的
* 其他情况 可以提示为服务器内部错误
*/
if (result.status == '0') {
var data = {
code: result.security
};
/**
*
* 拿到验证码后,分为以下几步:
* 1、去对接系统后台checkSecurity,
* 2、对接系统的后台会去U聊后台checkSecurity,
* 根据返回的值判断是否拿到用户信息,U聊后台返回码:
* "0", "成功"
* "99", "非法请求" 代表用户没权限,或者公众号配置有问题
* "100", "登录已失效,请重新登录"
* 对接系统自行处理,为0代表拿到用户信息,其他代表未拿到,例如用户没有权限,后台就会返回99
* 3、前端根据对接系统的返回值,展示给用户
* 例如:"0" 代表成功 "99"代表用户无权限
*/
$.post(url, data, function (ret) {
if (ret.status == '0') {
alert('用户信息:' + JSON.stringify(ret.content));
} else if (ret.status == '99') {
alert('用户无权限')
} else {
alert('服务器内部错误');
}
});
} else {
alert(JSON.stringify(result));
alert('服务器内部错误');
}
};
//失败后回调函数 代表客户端失败,或者服务器给客户端返回500之类的错误
var _fail = function (fal) {
UPCHAT.M.NAPI.dismiss();
/**
* ios:
* fal '版本不支持', 则提示用户去下载最新版U聊
* android
* fal 'Class not found'或者'Invalid action' ,则提示用户去下载最新版U聊
* toNewApp()
* 其他情况,提示用户错误信息
*/
if (fal == '版本不支持' || fal == 'Class not found' || fal == 'Invalid action') {
toNewApp();
} else {
alert(fal);
}
};
UPCHAT.M.NAPI.showLoadingView();
UPCHAT.M.NAPI.getSecurity(_success, _fail);
}
/**
* 监听用户信息
* 声明:以下示例代码仅供联调使用,上生产时请根据不同的异常情况自行处理
*/
$('#getSecurity').on('click', function(){
if (UPCHAT.M.isNative()) {
UPCHAT.M.init(getUserInfo);
} else {
// 不在U聊中打开提示用户在U聊中打开
toApp();
}
});
// 非U聊客户端打开
// 声明:以下示例代码仅供联调使用,上生产时请根据不同的异常情况自行处理
var toApp = function () {
$(".upapi-container").css("display", "block");
var html = '<label>请用爽爽办公客户端打开该界面</label><br />' +
'<a href="http://upchat.95516.net/app/">爽爽办公客户端下载</a>';
$(".upapi-container").html(html);
};
// U聊老客户端打开
// 声明:以下示例代码仅供联调使用,上生产时请根据不同的异常情况自行处理
var toNewApp = function () {
$(".upapi-container").css("display", "block");
var html = '<label>请用最新版爽爽办公客户端打开该界面</label><br />' +
'<a href="http://upchat.95516.net/app/">爽爽办公客户端下载</a>';
$(".upapi-container").html(html);
};
企业免登录认证之后端开发
具体API见接入系统后端认证API