企业应用接入

当您是为自己的企业/代表一个企业开发全新的“企业应用”,或者把您的企业内部的遗留系统连接到U聊后形成“企业微应用”后,企业员工在U聊内使用该企业微应用时,只要直接点击应用,便可免输入账户密码实现自动登录您所开发的系统。

交互流程概述

1. 业务系统平台与U聊整体交互流程

2. 认证子流程

时序描述:

  1. 接入系统的前端页面嵌入U聊客户端中,客户端发起链接点击,接入系统前端需要先判断浏览器cookie是否有效,如果有效表明已经登陆,直接做业务操作,如果无效,需要从接入系统前端通过JS向U聊客户端框架拿到校验码后带上这个参数跳转到平台后端。
  2. 接入系统后端拿到校验码这个参数后,拿校验码向U聊后台询问此次链接点击是否合法,如果合法,U聊服务器会返回用户信息。
  3. 使用U聊服务器返回的客户信息,接入系统做模拟登陆后做正常业务,同时把用户信息存入cookie。

接入系统开发注意事项

1. 用户绑定预处理

U聊系统使用各组织OA系统账号,在和各系统对接时候,已经导入。如果接入平台同样使用OA系统用户,则不需要做特殊处理,否则需要再各平台做U聊账号到各平台用户映射。

2. 接入系统后台服务接入U聊约束

  1. 接入系统服务后端接口调用建立在https基础上,保证系统安全。
  2. 接入系统设置IP白名单,只信任U聊服务器发来的消息
  3. 类似U聊,接入系统提供签到、签退功能,生成调用凭证,在有效期内通过此凭证调用

3. 接入系统前端页面接入U聊约束

  1. 为确保安全,对接系统嵌入U聊中的页面,请使用HTTPS发布
  2. 由于手机系统的安全控制,HTTPS证书必须由可信证书颁发机构颁发,并可通过浏览器默认安全检查。
  3. 对于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聊后台获取用户信息
    • 前端根据对接系统返回码判断是否拿到了用户信息。

代码示例:

/**
* 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

results matching ""

    No results matching ""