1 睿智云平台统一帐号、鉴权设计

1.1 鉴权部分

1.2 帐号权限托管能力

下游平台聚焦自身业务,将RBAC部分托管给睿智云中台, 也可自行管理RBAC。

2 约定

2.1返回结果约定

code: 服务器响应码, 200 代表成功, 非200代表失败。

{

    "code": "200", 
    "message":"平台侧相关提示"


}

code 值列表

类型 意义 网关行为/前端处理建议
200 String 成功 网关放行
4031020 String 未登录或未携带票据 网关拒绝
4031021 String access_toke 票据过期 网关拒绝/使用refresh_token生成新票据
4031023 String refresh_token 票据过期 网关拒绝/跳转到登录界面
4031025 String 没有带remacToken头部标识 网关拒绝
4031026 String 没有操作此项的权限 网关拒绝
4031027 String 员工帐号已存在
4031028 String 当前租户下员工手机号已占用
4031029 String 图形验证码已过期 用户重新请求图形验证码
4031030 String 图形验证码不正确 用户无需重新请求图形验证码
4031031 String 短信验证码过期
4031032 String 短信验证码不正确
4031033 String 用户没有授予角色
4031034 Sring 请求过于频繁
4031035 Sring 租户已过期
4031036 String 租户已禁用
4031037 String 已有相同的帐号登录 适用于移动端帐号互踢方案
其他响应码 String 其他异常响应码 网关拒绝

2.2域名约定

本次API域名即鉴权网关域名 (范围:本次所有的API,之前的社区平台后端域名

除原登录接口和刷新token使用本次新鉴权网关域名域名外,其余的接口请维持旧的后端域名)

SIT环境 : https://gw-sit.remacsmart.com

生产环境 :https://gw.remacsmart.com

2.3 Http 请求头部约定

http头部:除《6.1 登录》和《 6.2 刷新票据》两个接口以外,所有经过睿智云中台鉴权网关的请求必须在http头部带上以下token标识。

名称:

remacToken , 值 :access_token

​ 其中: access_token为登录或刷新token生成的access_token

影响范围:本次统一登录需求所有API;

注:原社区网关不变 (要求带Authorization 和 tokenInfo )

3 公钥

公钥分为两部分: 用于密码明文加密的公钥和JWT票据解密的公钥。当前文档仅列出测试环境的公钥。

3.1 用于密码明文加密的公钥 (已去掉首部 -----BEGIN PUBLIC KEY-----和 尾部-----END PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRx94bsVgoza8UD97XeXZM3/cu
sKZqdbmoHSYHp0fg/LObJnMYIzDri+fJ2ZBE/BqIAgou2EQWJG3yu9C44WEbJnbn
ntR1LfeVrp6e/5ZsWhjjgyikCfaysEJHSz7cNGdpcx7tgSzGGvUInK8F4lVaHyb8
et1AVnr567ArJg6CoQIDAQAB

3.2 用于JWT票据解密的公钥 (已去掉首部 -----BEGIN PUBLIC KEY-----和 尾部-----END PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7NmfnT4MaT/NtadggelMRpNIY
6Fb7vyAGBSZFbhgNSQaSJqGHUWsyHpyr+DOt15erardcncrxvIrWuzxWJa123jnD
wHjrTFEZCTbuwoIwaEnNqStRuWY2RqTLqzFcUH73lLaOiIyuEKylPL8+ypHv7JBz
zn9q5vIdu3P4kKlItwIDAQAB

4 接口约定

接受睿智云平台所有下游平台自主管理 帐号操作

API列表

编号 API名称 路径 版本 适用范围
6.1 登录 /v1/user/sso/login 1.0 所有
6.2 刷新token /v1/oauth/sso/refreshtoken 1.0 所有
6.3 平台统一登录切换接口 /v1/user/auto/login 1.0 所有
6.4 管理员批量创建帐号 /v1/user/register/batch 1.0 所有
6.5 帐号信息修改 /v1/user/account/change 1.0 所有
6.6 用户信息拉取(分页) /v1/user/batch/pull) 1.0 所有
6.7 认证配置 /v1/oauth/client/config 1.0 中台接口;不对外
6.8 获取认证配置集合 /v1/oauth/client/config/list 1.0 中台接口;不对外
6.9 退出登录 /v1/user/logout 1.0 所有
6.10 统一登陆配置列表 /v1/oauth/configs/get 1.0 所有
6.11 永久token在线生成 /v1/oauth/token/gen 1.0 仅限超管权限
二期接口
6.12 获取随机验证码 /v1/user/random/code 2.0
6.13 发送手机验证码 /v1/user/verifycode/send 2.0
6.14 员工帐号注册 /v1/user/account/register
6.15 员工个人资料加载 /v1/user/account/load/{id} 2.0
6.16 员工个人资料更新(不含密码更新) /v1/user/account/edit) 2.0
6.17 员工密码更新 /v1/user/account/pwdreset 2.0
6.18 图像上传 http://arch.smartmideazy.com/docs/components/file-component.html#12 2.0
6.19 员工个人头像更新 /v1/user/account/avatarreset 2.0
6.20 员工企业信息更新 /v1/iot/main/company/update 2.0
6.21 获取方案信息 /v1/iot/main/plan/submit 2.0
6.22 员工企业信息加载 /v1/iot/main/company/load 2.0
6.23 模拟发送短信 /v1/user/verifycode/fake?mobile=XXX&verify_code=XXX 2.0 仅在测试环境使用,方便调试,生产环境将移除

6.20 员工企业信息加载

描述:体验帐号的员工加载企业信息。 须登录后使用此功能。

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/iot/main/company/load

Method: GET

5 平台通用

5.1 字典

5.1.1 平台标识来源字典

类型 描述
client_id h5-client String 平台管理端标识
app-client String 社区管家APP端标识
ioc-client String 社区IOC管理端标识
tianmu-client String 家居天目管理端标识
tiance-client String 家居天策管理端标识
tiangong-client String 家居天工管理端标识
h5-unit-client String 统一平台H5 portal 工程

5.1.2 平台client_secret

以下是各平台 测试环境的client_secret (172长度的RSA密钥)

client_id client_secret
h5-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=
app-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=
ioc-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=
tianmu-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=
tiance-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=
tigong-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=
h5-unit-client WtN8vIuDCagc+yGsc8b446Q1yq3dvfnaGon9swHakLfp0sef9vP6XFh5XTKv4DukSslh25CLDwWmjycp2hD91P0sJhbbBvjTGnK7XurAWghU0Nt9Hr/OFjJbbQxOn1C18y4DsF2UV0FU0D0zL5rnvnAYuLyctAG/HrkzsT9HJSo=

5.1.3 帐号类型

描述:社区、家居平台后台管理帐号已统一

类型 描述
account_type remac String 社区后台帐号
smarthome String 家居后台帐号,当前包含:天工、天目、天策平台后台管理 帐号

5.2 密码明文加密

描述: 所有涉及到用户登录帐号的密码需要用睿智云中台统一的RSA(SHA256)工具进行加密。

5.2.1 java端 RSA加密工具包

当前安卓工具包已提供 , 使用方法如下:

第一步: 引入依赖包。(源码: http://10.18.69.218/remac-mid/remac-rsa-sdk.git)

   <dependency>
  <groupId>com.remac.mid.sdk</groupId>
  <artifactId>remac-rsa-sdk</artifactId>
  <version>1.0</version>
  </dependency>

第二步:配置平台提供的公匙 , 请向中台索取

第三步: 按照示例完成集成:

       String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRx94bsVgoza8UD97XeXZM3/cu\n"+
                   "sKZqdbmoHSYHp0fg/LObJnMYIzDri+fJ2ZBE/BqIAgou2EQWJG3yu9C44WEbJnbn\n"+
                   "ntR1LfeVrp6e/5ZsWhjjgyikCfaysEJHSz7cNGdpcx7tgSzGGvUInK8F4lVaHyb8\n"+
                   "et1AVnr567ArJg6CoQIDAQAB";

         String pwd = "HelloWorld";

         String encrypted = new RsaUtil(publicKey).encrypt(pwd);

         System.out.println("--->encrypted=" + encrypted);

iOS 密码加密方法参考:

+ (NSData *)encryptData:(NSData *)data withKeyRef:(SecKeyRef) keyRef isSign:(BOOL)isSign {
 const uint8_t *srcbuf = (const uint8_t *)[data bytes];
 size_t srclen = (size_t)data.length;

 size_t block_size = SecKeyGetBlockSize(keyRef) * sizeof(uint8_t);
 void *outbuf = malloc(block_size);
 size_t src_block_size = block_size - 11;

 NSMutableData *ret = [[NSMutableData alloc] init];
 for(int idx=0; idx<srclen; idx+=src_block_size){
  //NSLog(@"%d/%d block_size: %d", idx, (int)srclen, (int)block_size);
  size_t data_len = srclen - idx;
  if(data_len > src_block_size){
   data_len = src_block_size;
  }

  size_t outlen = block_size;
  OSStatus status = noErr;

        if (isSign) {
            status = SecKeyRawSign(keyRef,
                                   kSecPaddingPKCS1,
                                   srcbuf + idx,
                                   data_len,
                                   outbuf,
                                   &outlen
                                   );
        } else {
            status = SecKeyEncrypt(keyRef,
                                   kSecPaddingPKCS1,
                                   srcbuf + idx,
                                   data_len,
                                   outbuf,
                                   &outlen
                                   );
        }
  if (status != 0) {
   NSLog(@"SecKeyEncrypt fail. Error Code: %d", status);
   ret = nil;
   break;
  }else{
   [ret appendBytes:outbuf length:outlen];
  }
 }

 free(outbuf);
 CFRelease(keyRef);
 return ret;
}

5.2.2 vue RSA加密工具包

使用 JSEncrypt 工具完成密码明文加密后经http传输平台层必须使用统一的 java RSA 工具包完成解密。

vue 使用示例 :

第一步: 先安装工具包

npm install jsencrypt 或者  yarn add jsencrypt

第二步:配置平台公钥 , 请向中台索取。在main.js 全局挂载:

import { JSEncrypt } from 'jsencrypt'
//JSEncrypt加密方法
Vue.prototype.$encryptedData = function(publicKey, data) {
  //new一个对象
  let encrypt = new JSEncrypt()
  //设置公钥 publicKey是公钥
  encrypt.setPublicKey(publicKey)
  //data是要加密的数据
  let result = encrypt.encrypt(data)
  return result
}

或者在需要加密的vue中直接引入JSEncrypt再自定义函数 encryptedData

import { JSEncrypt } from 'jsencrypt'
methods: {
    //  加密
    encryptedData(publicKey, data) {
      // 新建JSEncrypt对象
      let encryptor = new JSEncrypt();
      // 设置公钥
      encryptor.setPublicKey(publicKey);
      // 加密数据
      return encryptor.encrypt(data);
    },
   ...
   }

encryptedData函数中参数:publicKey为平台RSA公钥,data 为需要加密的字段。

vue项目地址: https://github.com/travist/jsencrypt.git

5.2.3 密码规范

参见正则:

^[A-Za-z0-9\\_\\-\\@\\.\\*\\$]{8,16}$

密码必须同时包含英文字母、数字且必须包含特殊字符如:-_@.*$"。 长度8至16个字符。

5.2.4 邮箱规范

合法E-mail地址:

  • 必须包含一个并且只有一个符号“@”
  • 第一个字符不得是“@”或者“.”
  • 不允许出现“@.”或者.@
  • 结尾不得是字符“@”或者“.”
  • 允许“@”前的字符中出现“+”
  • 不允许“+”在最前面,或者“+@”
  • 长度5-24个字符

5.3 JWT 解密工具

说明 : 解密工具用于解析由睿智云中台生成的JWT token 。如:《6.1 登录》接口中返回的access_token

  <dependency>
  <groupId>org.json.web</groupId>
  <artifactId>jwt-decrypt</artifactId>
  <version>1.0</version>
  </dependency>

具体用法示例 :

String publicKeyContent = "-----BEGIN PUBLIC KEY-----\n"+
                 "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7NmfnT4MaT/NtadggelMRpNIY\n"+
                 "6Fb7vyAGBSZFbhgNSQaSJqGHUWsyHpyr+DOt15erardcncrxvIrWuzxWJa123jnD\n"+
                 "wHjrTFEZCTbuwoIwaEnNqStRuWY2RqTLqzFcUH73lLaOiIyuEKylPL8+ypHv7JBz\n"+
                  "zn9q5vIdu3P4kKlItwIDAQAB\n"+
                 "-----END PUBLIC KEY-----\n";


         Decryptor jwt = new Decryptor( publicKeyContent );

         String token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJyZW1hYyIsImp0aSI6IjU0NGYwZjY5LTRhZjItNDZkMy04NjU0LWRmYTA5YmYyN2FjZCIsInVzZXJfaWQiOiIxMTIwIiwiaXNzIjoic29mdHdhcmUiLCJpYXQiOjE2NDQ4MDY5NTQsImV4cCI6MTY0NDgxNDE1NH0.tG_lMN9ov4RraWpc8i7leT8KMvT8BwIaIoX11uYQOqpTDoJCZagqj18aM7I3QGYLExUFNFH1Fhu5Xih48Czs4mrnRLNhCq5OAxAE_OeaUl6LeGM0Yc1QzORzPZ8fRFMuD8_dHrXGeDdUgNI2OIoymzXvnDmEcacEQvKuk0hoELI";

         Claims claims  =   jwt.verifyToken(token, "RS256");
         System.err.println(claims);

注: 以上解密工具SIT环境请使用 《5.3 JWT 解密工具 》部分所列的公钥。生产环境不会在此文档中更新 。

5.4 用户密码字段统一加密工具

请统一使用睿智云中台的《用户密码字段统一加密工具》将用户的密码明文加密后存储于数据库表中。

与 《5.2 密码明文加密》工具不同的是:用户密码不可解密,而《5.2 密码明文加密》的密码明文通过平台公钥加密后可以由平台私钥解密。 为实现不同平台的帐号单点登录功能,密码密文必须使用同样的加密工具,由于帐号统一在睿智云中台管理,故密码必须使用相同的加密工具。

如何使用?

将以下依赖包引入工程中,

   <dependency>
   <groupId>com.remac.mid.sdk</groupId>
  <artifactId>remac-encryptor-sdk</artifactId>
  <version>5.2.1</version>
  </dependency>
见: com.remac.crypto.Sample源码

public static void main(String[] args) {
         String pwd = "Hello"; //密码明文
         String encrypted = new BCryptPasswordEncoder().encode(pwd); //BCrypt加密码后的密文
         System.out.println("--->encrypted:"+encrypted);

         boolean b = new BCryptPasswordEncoder().matches(pwd, encrypted);//密码与明文比对
         System.out.println("--->encrypted matched raw pwd:"+b);
    }

5.5 消息 SDK

描述:基于rocketMQ, 用于睿智云中台与下游平台同步数据。具体用法请参见:

https://confluence.mideazy.com/pages/viewpage.action?pageId=271089676

http://10.18.69.218/remac-common/remac-base-components

https://confluence.mideazy.com/pages/viewpage.action?pageId=271089676

5.5.1 睿智云中台消息同步协议约定

消息格式结构 业务场景 tag topic
{ {"tag","login", "topic": "sso-login-topic"}, "payload": { "client_id":"h5-client, "id": 1, "user_name": "test", "time":'2021-12-09 13:01:02"} } 登录 login sso-login-topic
{ {"tag","login","topic": "sso-login-topic"}, "payload": { "client_id":"h5-client, "id": 1, "user_name": "test", "time":'2021-12-09 13:01:02"} } 自动登录 login sso-login-topic
{ {"tag","logout","topic": "sso-login-topic"}, "payload": { "client_id":"h5-client, "id": 1, "user_name": "test", "time":'2021-12-09 13:01:02"} } 帐号退出 logout sso-login-topic
属性 类型 说明
client_id String 见《5.1.1 平台标识来源字典》
id String 用户表主键 ID
user_name String 用户帐号名,即用户表中的job_number字段
time Date 消息产生的时间
tag String RocketMQ tag
topic String 默认为 sso-login-topic
payload JSONObject 包含id, client_id, user_name, time 字段

5.6 睿智云中台统一鉴权工具包

5.61. maven 地址

<dependency>
<groupId>com.remac.mid.sdk</groupId>
<artifactId>remac-token-sdk</artifactId>
<version>1.0</version>
<dependency>

5.6.2 用法示例

RemacToken 在spring环境中,请使用单例。 统一以秒为单位。

推荐值:

connectTimeOut: 5 (秒)

readTimeOut: 10 (秒)

axIdleConnections:100

keepAliveDuration: 30(秒)

@Value("${connectTimeOut}")
private int connectTimeOut;

@Value("${readTimeOut}")
private int readTimeOut;

@Value("${axIdleConnections}")
private int axIdleConnections;

@Value("${keepAliveDuration}")
private long keepAliveDuration;

@Value("${tokenUrl}")
private String tokenUrl;


@Bean
public RemacToken remacToken() {

    return new RemacToken(connectTimeOut,
                readTimeOut,
                writeTimeOut,
                maxIdleConnections,
                keepAliveDuration,
                tokenUrl);
}
@Autowired
private RemacToken remacToken;


       String remacToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJiZXR0eSIsInNjb3BlIjpbImFsbCJdLCJuYW1lIjoiYmV0dHkiLCJpZCI6Ijg3MzA1IiwiZXhwIjoxNjQ3MzE5MzMxLCJqdGkiOiIyM2ZiOGEyNS1mNWQwLTQ4MzItOWI5My0wZThlZTZmYzlkMmQiLCJjbGllbnRfaWQiOiJoNS11bml0LWNsaWVudCIsImlzX3N1cHBlciI6IjEifQ.a_VlyHCliK5nSITq9V0ebjP012uTmExDieadwpaoQujTsTNsazseh7WZQHgDNxARb2fZJWLWQrE5ill_DPnYaiofPt_QYUtL3SL8QnAUmYnkNfF-3slC7wsCIy4TqmwFszh3yrkot3ZkVa05nIpVukSvdh1rZzAPHzEg-a2HBOs";
        JSONObject json = token.validateToken(remacToken);
        System.out.println("--->json=" + json);


  // 返回结果见:http://arch.smartmideazy.com/docs/account/account-doc.html

5.6.3 返回结果约定

正确返回,result 对象包含帐号的信息,帐号信息由睿智云中台通过私钥将 remacToken头部解密后将用户的信息明文返回。


 {

    "code":"200",
    "message":"成功信息"
    "result": {"id":"110", "name":"jack", "user_name":"betty",  "client_id":"h5-client"}
 }

其他错误码请参见 2.1返回结果约定

注: 除SDK外,也可以基于http 接口调用来实现。 详见: http://arch.smartmideazy.com/docs/account/account-validate.html

5.7 帐号规范

合法帐号 : 4-16个长度,可以是英文、数字、、-、@、.。 参见正则:^[A-Za-z0-9\\-\@\.]{4,16}$"),

6 API 定义

6.1 登录

描述 用户登录后,需要将票据信息Authorization(bearer access_token)和tokenInfo放在HTTP Header中用于请求平台API, 未携带票据信息将在网关层被拒绝。

详见: http://47.111.56.94/apidoc/main-entry/API.html 具体如何使用请参见:《Part II 前端(含H5、小程序、APP)请求Token 约定》。除特别声明,除登录、刷新票据接口外,其他接口http header均须带上Authorization和tokenInfo ,具体用法请参见: http://47.111.56.94/apidoc/main-entry/API.html ,否则网关将拒绝请求。

请求信息

HTTP协议:HTTP,HTTPS

uri:/v1/user/sso/login

方法:POST

请求Body

名称 类型 必填 描述
job_number string y 帐号 见《5.7 帐号规范》
pwd String y 密码, 须遵循 《5.2 密码明文加密》完成明文的加密
client_id String y 各内、外部系统的客户端标识,由平台统一约定,详见《5.1.1 平台标识来源》字典
client_secret String y oauth2 客户端密钥 ,由平台配置并提供, 平台已加密;
String N

请求参数: app_id: 类型: String; App端登录此值必传。 如:管家App登录。

请求Body描述(非Form表单数据)

{"job_number": "betty",  "pwd": "GuXq7XwbRMDWFMz63tSsZG0LqMi6R1+qW3B6Rg7zblWdIOAOIl8LdDygVSP/5kohYrY/7kCKp5TVKRwsZal+YfGboWaK96CR/Y8yKUHWIBrglj+ujQc3ibd2QBE8N/yBHM6cFKrKWZMpbV1D8yG5OSUt81SFdCu88ENGxT5tDa4=
", "client_id":"h5-client", "client_secret":"R9fkMHbDjgNY8yCth9zt2DdMkPe/6PS+bRA6lifLmJr0ZEq1n2+L9qTVpdmNXf08nISFpv8rIIaBz6fZTjKrQiptsHqt6cUEhIvGG2Spfu4tGUcJ9H1pKCg0wV74kgTGCITe4SggwnNfOimW8ID7d6Flg6LxUQGKHsnxPFVlGzY=",  "grant_type": "password"}

返回信息

返回参数类型

JSON

返回参数

名称 类型 层级 必返 描述
code string 顶级 响应码标识
message string 顶级 响应消息文本
result JSONObject 顶级 响应数据对象
tokenInfo JSONObject 二级 自定义用户信息返回
token JSONObject 二级 登录成功后,由认证服务返回合法的token
business_org_trees JSONObject 二级 登录成功后,由认证服务返回用户所拥有的业务组织书

token字段说明

字段属性

名称 类型 层级 必返 描述
access_token string 顶级 登录成功后,由认证服务返回的合法token票据
refresh_token string 顶级 登录成功后,由认证服务返回的合法刷新token票据,用于当access_token过期后,客户端可用refresh_token向平台发送刷新票据请求。refresh_token的过期时间比access_token长,由平台配置。
expires_in Long 顶级 token票据的有效时间,单位为秒
返回结果示例
{
  "code": "200",
  "message": "成功",
  "result": {
    "token": {
      "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDQ1NTk2NzcsInVzZXJfbmFtZSI6ImJldHR5IiwianRpIjoiMmUxZTAyYzAtNzg0Yy00Yjk5LTk5NWEtMDkzN2JjMzQ2ZjJhIiwiY2xpZW50X2lkIjoiaDUtY2xpZW50Iiwic2NvcGUiOlsiYWxsIl19.Fv5yUEjJWLueUwcEkwHaz8rvEwebmMpl0v1z6Q-3LUy_NvEYv7yHmqz1TVhcgkRb1wFpQjqH2sm-en9ooFEZFpA9QkkP0wEF6c93ssmHRXLmbp84F6LmzJWHTPCsdpz_ibZHJeJ0KosxHxFvHzglOkyDT5XsCQ7Qh-Nk4r0SfXA",
      "token_type": "bearer",
      "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDQ1OTIwNzcsInVzZXJfbmFtZSI6ImJldHR5IiwianRpIjoiOWIwZjU3ZTgtOWIwZC00N2ZlLWEwNGQtZGQ5NWM5ZDk0YjcwIiwiY2xpZW50X2lkIjoiaDUtY2xpZW50Iiwic2NvcGUiOlsiYWxsIl0sImF0aSI6IjJlMWUwMmMwLTc4NGMtNGI5OS05OTVhLTA5MzdiYzM0NmYyYSJ9.kwwu23xP5GksXp_81nEfdKG7SGlwpk4Lk3uzu8kCqo6OkM0CMJdbJbT6C-ixi2mVRbC6CceQEgitX-g9Kgr8hchlwDgWFwp3nAMwrvi94mo-bUvDoXEQv2utrhaNswJGGmdSd_En41bdwooZMlksVRUls0PQV5hh8OIYFop2V6s",
      "scope": "all",
      "jti": "2e1e02c0-784c-4b99-995a-0937bc346f2a",
      "expires_in": 3599
    },
    "tokenInfo": {
      "name": "betty",
      "orgFullName": "美的置业",
      "id": "87305",
      "orgId": "15263",
      "org_code": "100000000",
      "user_name": "betty",
      "position": "无业游民",
      "mobile": "13302422689",
      "is_supper": 1,
      "status": 1,
      "bizOrgId": null,
      "bizOrgCode": null,
      "bizOrgFullName": null,
      "credentials": null,
      "roles": null,
      "orgRoles": null,
      "tenantId": null,
      "top_org_code": null,
      "top_org_id": null,
       credentials: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJwbGF0Zm9ybV90aWNrZXQiLCJqdGkiOiJhZjRlM2EwMzYyMGQ0OGFmYTE4Y2Q0NTFiOWM1Y2ZiYiIsInRvcF9vcmdfY29kZSI6IjEwMDAwMDAwMSIsInRvcF9vcmdfaWQiOjE1MjY0LCJ0ZW5hbnRJZCI6IjEiLCJpZCI6ODczMDUsImlzX3N1cHBlciI6MSwiaXNzIjoicmVtYWMiLCJpYXQiOjE2NDU3NTAwMjcsImV4cCI6MTk2MTExMDAyN30.bYOR-qCc3sZdPkFiHzjWvFgx-uP7cW2A3038n0DfWpn03-9xyx3DWTSqVtWseH8M8tzoM0O51j_E2zS828zK9Ofn1s5NoVkjJpSZ2Uql3BZgpQNoYmwnJhwuuQf8sXHHaoWFa53x29ICeHPv8zOnBO8IqgEYI9_o5nCe8V-6vMo"

    },
    "business_org_trees": {
      "code": "200",
      "message": "成功",
      "version": null,
      "returnExceptionData": false,
      "trees": [
        {
          "tree": [
            {

              "id": 15264,
              "org_code": "100000001",
              "org_name": "美的置业-业务",
              "parent_code": null,
              "parentid": null,
              "full_org_name": "美的置业-业务",
              "org_type": 2,
              "sub_type": 2,
              "org_id": null,
              "src": 1,
              "parent_org_id": null,
              "logic_deleted": 1,
              "tenant_id": 0,
              "parent_name": null,
              "children": [
                {
                  "create_by": null,
                  "update_by": null,
                  "create_by_id": null,
                  "update_by_id": null,
                  "create_time": "2020-12-08T14:56:13.000+00:00",
                  "update_time": "2021-02-22T12:53:20.000+00:00",
                  "id": 15274,
                  "org_code": "100000001100000000",
                  "org_name": "美的新海岸446",
                  "parent_code": "100000001",
                  "parentid": 15264,
                  "full_org_name": "美的置业-业务/美的新海岸446",
                  "org_type": 2,
                  "sub_type": 1,
                  "org_id": null,
                  "src": 1,
                  "parent_org_id": null,
                  "logic_deleted": 1,
                  "tenant_id": 0,
                  "parent_name": null,
                  "children": null

                },
                {

                  "id": 20373,
                  "org_code": "100000001100000001",
                  "org_name": "朱慧媛-美的置业项目-勿动",
                  "parent_code": null,
                  "parentid": 15264,
                  "full_org_name": "美的置业-业务/朱慧媛-美的置业项目-勿动",
                  "org_type": 2,
                  "sub_type": 1,
                  "org_id": null,
                  "src": 1,
                  "parent_org_id": null,
                  "logic_deleted": 1,
                  "tenant_id": 0,
                  "parent_name": null,
                  "children": null

                },
                {

                  "id": 20527,
                  "org_code": "100000001100000002",
                  "org_name": "美的置业广场",
                  "parent_code": null,
                  "parentid": 15264,
                  "full_org_name": "美的置业-业务/美的置业广场",
                  "org_type": 2,
                  "sub_type": 2,
                  "org_id": null,
                  "src": 1,
                  "parent_org_id": null,
                  "logic_deleted": 1,
                  "tenant_id": 0,
                  "parent_name": null,
                  "children": [
                    {

                      "id": 21176,
                      "org_code": "100000001100000002100000000",
                      "org_name": "睿住智能科技",
                      "parent_code": null,
                      "parentid": 20527,
                      "full_org_name": "美的置业-业务/美的置业广场/睿住智能科技",
                      "org_type": 2,
                      "sub_type": 2,
                      "org_id": null,
                      "src": 1,
                      "parent_org_id": null,
                      "logic_deleted": 1,
                      "tenant_id": 0,
                      "parent_name": null,
                      "children": [
                        {

                          "id": 21177,
                          "org_code": "100000001100000002100000000100000000",
                          "org_name": "置业19楼项目",
                          "parent_code": null,
                          "parentid": 21176,
                          "full_org_name": "美的置业-业务/美的置业广场/睿住智能科技/置业19楼项目",
                          "org_type": 2,
                          "sub_type": 1,
                          "org_id": null,
                          "src": 1,
                          "parent_org_id": null,
                          "logic_deleted": 1,
                          "tenant_id": 0,
                          "parent_name": null,
                          "children": null

                        },
                        {

                          "id": 21178,
                          "org_code": "100000001100000002100000000100000001",
                          "org_name": "置业20楼项目",
                          "parent_code": null,
                          "parentid": 21176,
                          "full_org_name": "美的置业-业务/美的置业广场/睿住智能科技/置业20楼项目",
                          "org_type": 2,
                          "sub_type": 1,
                          "org_id": null,
                          "src": 1,
                          "parent_org_id": null,
                          "logic_deleted": 1,
                          "tenant_id": 0,
                          "parent_name": null,
                          "children": null

                        },
                        {

                          "id": 111259,
                          "org_code": "100000001100000002100000000100000002",
                          "org_name": "aaaaaa",
                          "parent_code": null,
                          "parentid": 21176,
                          "full_org_name": "美的置业-业务/美的置业广场/睿住智能科技/aaaaaa",
                          "org_type": 2,
                          "sub_type": 1,
                          "org_id": null,
                          "src": 1,
                          "parent_org_id": null,
                          "logic_deleted": 1,
                          "tenant_id": 0,
                          "parent_name": null,
                          "children": null

                        }

                      ]

                    }
                  ]

      ]
      "menus": [],
      "role": null
    },
    "communitys": null,
    "menu_trees": null,
    "roles": null
  }

}

注:返回结果可以根据各平台的要求定制。

business_org_trees 字段:返回多棵业务组织树型结构。

睿智云平台网关鉴权及用户登录逻辑时序图

token和tokenInfo 字段必返。

tokenInfo 数据结构如下:

"tokenInfo": {
      "name": "betty",
      "orgFullName": null,
      "id": "87305",
      "orgId": "15263",
      "org_code": "100000000",
      "user_name": "betty",
      "position": "无业游民",
      "mobile": "13302422689",
      "is_supper": 1,
      "status": 1,
      "bizOrgId": null,
      "bizOrgCode": null,
      "bizOrgFullName": null,
      "credentials": "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJwbGF0Zm9ybV90aWNrZXQiLCJqdGkiOiJjYzBkNjE5YmY3ZTA0YTlmYTNiMzk1Zjg5ZWNkOWMzZCIsInRvcF9vcmdfY29kZSI6IjEwMDAwMDAwMSIsInRvcF9vcmdfaWQiOjE1MjY0LCJ0ZW5hbnRJZCI6IjEiLCJpZCI6ODczMDUsImlzX3N1cHBlciI6MSwiaXNzIjoicmVtYWMiLCJpYXQiOjE2NDU2NzIxMTMsImV4cCI6MTk2MTAzMjExM30.XCmrpUk0QT-_XWiivxgIiciEAAbF_7Nb2Dy7ohh9mAPS61k3CL0owBqlfdsvVXPdu15xUEcpjKmpX2kUR4oq7touK-X2o6IRDDFynzfaXN2HQX8moZdjtJY8m25bPsJ-1BwkMjAWmDkHWeJHstLMF0uWsubtVJnO5qSDGWIv7D0",
      "roles": null,
      "orgRoles": null,
      "tenantId": null,
      "top_org_code": null,
      "top_org_id": null
    },

其中 credentials 字段: 鉴于安全考虑使用了jwt加密,请使用《5.3 JWT 解密工具》进行解密。

credentials中存储了用户的敏感数据,如:

top_org_id: 顶级业务组织ID (超管为空)

top_org_code: 顶级业务组织code (超管为空)

is_supper: 超管标识

id : 帐号主键

下面给出如何从 tokenInfo 中取出加密信息

 String  tokenInfoStr = URLDecoder.decode( tokenInfo ,  "UTF-8"); //先decode
 JSONObject json = JSONObject.parseObject(tokenInfoStr);
 String credentials = json.getString("credentials");
 Decryptor jwt = new Decryptor( publicKeyContent );
 Claims claims = jwt.verifyToken(token, "RS256");
 String id = claims.get("id");
 ....

access_token 解密同上, 解密出来的数据结构如下:

{id=132870, exp=1645787180, user_name=18680546087, jti=7ff38760-8d6c-4786-b759-d52e436467a1, client_id=h5-client, scope=[all]}

6.2 刷新票据

描述 当access_token票据过期,用户可以调用此接口来续期。生成新的access_token和refresh_token

请求信息

HTTP协议:HTTP,HTTPS

uri:/v1/oauth/sso/refreshtoken

方法:POST

请求Body

名称 层级 类型 必填 描述
client_id 顶级 String y 见 《5.1.1 平台标识来源字典
client_secret 顶级 String y oauth2 客户端密钥 ,由平台配置并提供, 平台已加密;
refresh_token 顶级 String y 登录成功后,由认证服务返回的合法刷新token票据,用于当access_token过期后,客户端可用refresh_token向平台发送刷新票据请求。refresh_token的过期时间比access_token长,由平台配置。
grant_type 顶级 String y 此处用:refresh_token
id 顶级 Long N 员工帐号ID,管家 APP刷新TOKEN必传。 当refresh_token过期平台需要按退出处理

请求Body描述(非Form表单数据)

{
   "client_id": "h5-client",  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDQ1NTk2NzcsInVzZXJfbmFtZSI6ImJldHR5IiwianRpIjoiMmUxZTAyYzAtNzg0Yy00Yjk5LTk5NWEtMDkzN2JjMzQ2ZjJhIiwiY2xpZW50X2lkIjoiaDUtY2xpZW50Iiwic2NvcGUiOlsiYWxsIl19.Fv5yUEjJWLueUwcEkwHaz8rvEwebmMpl0v1z6Q-3LUy_NvEYv7yHmqz1TVhcgkRb1wFpQjqH2sm-en9ooFEZFpA9QkkP0wEF6c93ssmHRXLmbp84F6LmzJWHTPCsdpz_ibZHJeJ0KosxHxFvHzglOkyDT5XsCQ7Qh-Nk4r0SfXA","grant_type":"refresh_token", "job_number":"betty", "client_secret":"R9fkMHbDjgNY8yCth9zt2DdMkPe/6PS+bRA6lifLmJr0ZEq1n2+L9qTVpdmNXf08nISFpv8rIIaBz6fZTjKrQiptsHqt6cUEhIvGG2Spfu4tGUcJ9H1pKCg0wV74kgTGCITe4SggwnNfOimW8ID7d6Flg6LxUQGKHsnxPFVlGzY"




}

返回参数

名称 位置 类型 必填 描述
access_token 第一层 String y 登录成功后,由认证服务返回的合法token票据
refresh_token 第一层 String y 登录成功后,由认证服务返回的合法刷新token票据,用于当access_token过期后,客户端可用refresh_token向平台发送刷新票据请求。refresh_token的过期时间比access_token长,由平台配置。
expires_in 第一层 Int y token票据过期时间
返回结果示例
{
  "code": "200",
  "message": "成功",
  "result": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDYzOTE0NjIsInVzZXJfbmFtZSI6ImJlc3RzaGkxMjM0IiwianRpIjoiNzEzMDRmZjEtMjBjZC00YTRlLThjYTctMjUwOGE5OTQ3ODlkIiwiY2xpZW50X2lkIjoiaDUtY2xpZW50Iiwic2NvcGUiOlsiYWxsIl19.4uvHXhlEXJW4Z_dvJEqFnAmk-SSYq8xvP6nEwWMhep8",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDY0MjMzOTYsInVzZXJfbmFtZSI6ImJlc3RzaGkxMjM0IiwianRpIjoiNDM1ZjlkYzgtYzQyMC00ZDEwLWFhMjAtYjNmODE5NTY1ZTBmIiwiY2xpZW50X2lkIjoiaDUtY2xpZW50Iiwic2NvcGUiOlsiYWxsIl0sImF0aSI6IjcxMzA0ZmYxLTIwY2QtNGE0ZS04Y2E3LTI1MDhhOTk0Nzg5ZCJ9.F3S38ewnEPIUzCa0zQPqApP4TOIrRmwFlgJnngWW-2Y",
    "scope": "all",
    "jti": "71304ff1-20cd-4a4e-8ca7-2508a994789d",
    "expires_in": 3599
  }
}

6.3 平台统一登录切换接口

描述 适用于已登录的帐号从一个平台切换到另外一个平台后实现自动登录的效果。由于切换平台后client_id有变化,需要重新生成新的票据access_token和新的refresh_token 以便于在票据access_token过期后可以拿refresh_token主动向睿智云中台请求刷新token。可以简单地理解成用户已登录其中一个平台,拿着生成的票据自动登录其他平台。

方案1: 下游平台有自己的帐号,帐号不托管到睿智云中台。

平台帐号从一个平台切换到另一个平台前提是不同平台的帐号有相同的手机号码(或同一微信公众号下的openid,已预留)

场景: 张三在睿住社区有帐号zhangsan, 手机号:134 登录了睿住社区,现切换至家居天目的后台,

调用 此接口,即《平台统一登录切换接口》, 中台网关由http请求头部 Authorization ,tokenInfo 识别用户身份,由关联手机号找到切换新平台绑定同一手机号的帐号,再用新平台帐号登录,返回登录数据 。

方案2: 下游平台无帐号,帐号托管至睿智云中台。本次家居平台按此种方案对接。

请求信息

HTTP协议:HTTP,HTTPS

URL:/v1/user/auto/login

http头: 请严格遵循 《2.3 Http 请求头部约定

方法:POST

请求body

名称 类型 必填 描述
client_id String y 所切换平台的client_id, 由平台统一约定,见《5.1.1 平台标识来源字典
client_secret String y 切换到新的平台所对应的client_secret

请求参数: app_id: 类型: String; App端登录此值必传。 如:管家App登录。

请求body示例

{
   "client_id": "app-client",  "client_secret":"R9fkMHbDjgNY8yCth9zt2DdMkPe/6PS+bRA6lifLmJr0ZEq1n2+L9qTVpdmNXf08nISFpv8rIIaBz6fZTjKrQiptsHqt6cUEhIvGG2Spfu4tGUcJ9H1pKCg0wV74kgTGCITe4SggwnNfOimW8ID7d6Flg6LxUQGKHsnxPFVlGzY"


}

返回信息

返回《6.1 登录》相同的数据,可以根据下游平台定制返回数据。

6.4 管理员批量创建帐号

描述: 批量创建家庭的游客帐号。注:仅供家庭帐号使用。

请求信息

支持批量:

HTTP协议:HTTP,HTTPS

uri:/v1/user/register/batch

http头: 请严格遵循 《2.3 Http 请求头部约定

方法:POST

请求Body

名称 类型 必填 描述
account_type String y account_type : 见《5.1.3 帐号类型》描述.
list JSONArray y 批量帐号信息对象集合。批量尺寸最大100个用户。

list 集合中的JSONObject对象 各属性:

名称 类型 必填 描述
job_number String y 帐号 , 一旦创建不可修改 ; 4-16 个字符长度
pwd String y 密码, 传参须遵循 《5.2 密码明文加密》完成明文的加密; 8-16个字符长度
mobile String y 手机号, 不同帐号类型下唯一
is_effective int N 1:帐号启用 2:帐号禁用; 默认1
status int N 1为正常、2为离职或注销; 默认1
name String y 姓名
nickname String N 昵称
email String N 邮箱

请求Body描述

 {

​     "account_type":"smarthome" ,

​    "list":  [ {"name":"BB",  ... }, {"name":"BB",  ... }  ]

 }

返回参数

批量新增接口是异步执行的, 返回批量新增的案件编号settlement_id , 由批量案件编号来查询执行结果。

{

   "code":"200",
   "message":"success",
   "data":{

       "settlement_id": "XXXXXX"
   }
}

6.4.1 批量新增用户执行结果查询

描述: 由《6.4 管理员批量创建帐号》接口返回的 settlement_id来查询批量用户新增结果。

请求信息

支持批量:

HTTP协议:HTTP,HTTPS

uri:/v1/iot/main/register/batch/query

http头: 请严格遵循 《2.3 Http 请求头部约定

方法:POST

请求Body

名称 类型 必填 描述
settlement_id String y 批量用户新增案件编号

返回结果:

{

   "code":"200",
   "message":"success",
   "data":{

       "code": "1",

       "fail_results": [{

           "job_number":"XXX", "fail_reason":"密码不符合规范"


       }]

   }



}

返回相关字段说明:

code: 类型String, 执行结果 ,1: 已执行完。 2: 执行中

fail_results: 类型 JSONArray , 帐号新增失败的原因

6.5 帐号信息修改

描述:

请求信息

支持批量:

HTTP协议:HTTP,HTTPS

URL:/v1/user/account/change

http头: 请严格遵循 《2.3 Http 请求头部约定

方法:POST

请求 Body

名称 层级 类型 必填 描述
id 顶级 Long y 后台帐号表主键
pwd 顶级 String N 密码, 传参须遵循 《5.2 密码明文加密》完成明文的加密
mobile 顶级 String N 手机号
is_effective 顶级 int N 1:帐号启用 2:帐号禁用; 默认1
status 顶级 int N 1为正常、2为离职或注销; 默认1
name 顶级 String N
email 顶级 String N
nickname 顶级 String N
sex 顶级 int N 性别: 0:未知,1为女,2为男; 默认0

6.6 用户信息拉取(分页)

描述:

请求信息

支持批量:

HTTP协议:HTTP,HTTPS

uri:/v1/user/batch/pull)

http头: 请严格遵循 《2.3 Http 请求头部约定

方法:POST

请求Body

名称 层级 类型 必填 描述
pageNo 顶级 Long N 页码;默认 1;
pageSize 顶级 String N 每页记录条数;默认 20 条;最大100 ;
account_type 顶级 String N 见《5.1.3 帐号类型》描述, 不传些值代表请求所有帐号
order_by 顶级 String N DESC: 降序 ASC: 升序 , 按ID和更新时间排序, 默认降序,显示最新数据
key_word 顶级 String N 支持手机号/姓名/帐号全模糊查询
is_effective 顶级 int N 不传参数显示所有;帐号是否有效,1: 有限, 2: 无效

返回格式示例:

{
  "code": "200",
  "data": {
    "result": [
      {
        "is_effective": 1,
        "update_time": 1647047170000,
        "last_login_time": null,
        "sex": 0,
        "mobile": "13146060168",
        "name": "刘添明",
        "nickname": "客户000095",
        "id": 133048,
        "job_number": "13146060168",
        "email": "13146060168@midea.com",
        "status": 1
      }
    ],
    "total": 1,
    "pageNo": 1,
    "totalPage": 1,
    "pageSize": 20
  },
  "message": "success"
}

6.7 退出登录

描述 适用于已登录帐号在睿智云任意子系统退出。

请求信息

HTTP协议:HTTP,HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

uri:/v1/user/logout?id = XX

方法:GET

参数:管家帐号id 仅 管家app 需要传。 其他端请勿传。

注意: 同一帐号退出登录后,该帐号经过睿智云中台网关的任意请求将视为未登录。

睿智云中台将发布退出登录主题的rocketMQ 消息,下游平台订阅到用户退出登录事件后,在自己的网关识别该帐号已退出登录。

由于下游平台仅部分功能请求睿智云中台网关, 靠中台的access_token 来识别帐号是否合法(未过期、帐号信息等), jwt access_token 一旦生成,未过期仍可用。收回 access_token的做法合下游平台自己要处理。 参照中台做法是:退出登录后,缓存中存放用户已退登, 网关拦截器层每次从access_token解析出帐号(job_number) 先查询是否有退登缓存; 用户登录成功后,将该帐号的退登缓存移除 。

6.8 获取随机验证码

描述:用户在调用手机号发送验证码前,需要填写随机验证码。此验证码支持刷新。

注: 验证码 5 分钟后过期。

URL: /v1/user/random/code

http://10.73.160.70:6001/v1/user/random/code

Method: get

返回结果:

直接返回4个字符的图片流。

前端使用示例:

<img src="https://gw-sit.remacsmart.com/v1/user/random/code" width="105px" height="32px" />

默认生成长:105像素、宽:32像素的图片验证码。

6.9 发送手机验证码

HTTP协议:HTTP,HTTPS

URL: /v1/user/verifycode/send

注: 此验证码适用于注册场景,会校验手机号是否重复。

Method: POST

注: 手机验证码在2分钟后过期。发送4位短信验证码。

请求Body

名称 类型 必填 描述
mobile string y 手机号
random_code String y 图片随机码4位字符。由 《6.12 获取随机验证码》获取的图片随机验证码。

6.10 员工帐号注册

URL: /v1/user/account/register

Method: POST

请求Body

名称 类型 必填 描述
job_number string N 帐号,不填即使用手机号mobile作为帐号。帐号在平台是唯一的。 4-16位长度,正则:^[A-Za-z0-9\_\-\@\.]{4,16}$。除社区帐号(src =1)外其他帐号来源此字段必填
mobile mobile Y 手机号
verify_code String y 短信验证码
pwd String y 密码, 须遵循 《5.2 密码明文加密》完成明文的加密;且密码须遵循《5.2.3 密码规范》 正则: ^[A-Za-z0-9\_\-\@\.\*\$]{8,16}$
src Int N 帐号来源,4: 家庭帐号, 1:社区帐号。家庭帐号必传。 不传代表社区帐号。

返回:

{"code":"200", "message":"success",
"data":
 {
   "id":"1109",
   "nickname":"路人甲",
   "delivery_address":"北京朝阳区290号",
   "mobile":"13302733689",
   "email":"zxu@126.com"
   "ico":"https://google.com/avatar/1120/35/35",
   "job_number":"13302733689",
    "random_bg":"1"

 }

}

6.11 员工个人资料加载

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/user/account/load/{id}

Method: GET

路径参数

名称 类型 必填 描述
id Long y 员工帐号表主键

返回:

{"code":"200", "message":"success",
"data":
 {
   "id":"1109",
   "nickname":"路人甲",
   "delivery_address":"北京朝阳区290号",
   "mobile":"13302733689",
   "email":"zxu@126.com"
   "ico":"https://google.com/avatar/1120/35/35",
    "job_number":"13302733689"
      "random_bg":"1",
      "share": 2
 }
}

新增 返回字段:

share: 帐号方案分享标识 1:不开启 2:开启

6.11B 帐号开启/关闭分享

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/iot/main/oauth2/admin/account/share/set

Method: PUT

BODY

名称 类型 必填 描述
id Long y 员工帐号表主键
share Int Y 1: 关闭分享 2: 开启分享

返回:

{"code":"200", "message":"success"}

6.12 员工个人资料更新(不含密码更新)

注:修改信息时请将请求Body所述字段都提交给服务器,服务器将根据字段批量更新。如:用户图像在修改时,如果用户未更新图像请将《6.15 员工个人资料加载》接口返回的原字段内容提交给服务器。

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/user/account/edit

Method: POST

请求BODY

名称 类型 必填 描述
id Bigint y 员工帐号表主键
delivery_address String N 非空则更新此字段, 最大120个长度
email String N 非空则更新此字段, 24个长度 , 见《5.2.4 邮箱规范
nickname String N 非空则更新此字段
ico String N 非空则更新此字段

返回更新后的用户信息:



 {
 "code":"200", "message":"success",

"data":
 {
   "id":1109,
   "nickname":"路人甲",
   "delivery_address":"北京朝阳区290号",
   "mobile":"13302733689",
   "email":"zxu@126.com",
    "ico":"https://google.com/avatar/1120/35/35",
     "job_number":"13302733689",
     "random_bg":"1",
 }

}

6.13 员工密码更新

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/user/account/pwdreset

Method: POST

·

请求Body

名称 类型 必填 描述
id string y 新的手机号
pwd String y 原密码, 密码, 须遵循 《5.2 密码明文加密》完成明文的加密,且密码须遵循《5.2.3 密码规范
new_pwd String y 新密码, 须遵循 《5.2 密码明文加密》完成明文的加密,且密码须遵循《5.2.3 密码规范

注:重复新密码与重复新密码由前端来判断。

返回:

{
 "code":"200", "message":"success",

"data":
 {
   "id":1109,
   "nickname":"路人甲",
   "delivery_address":"北京朝阳区290号",
   "mobile":"13302733689",
   "email":"zxu@126.com",
    "ico":"https://google.com/avatar/1120/35/35",
     "job_number":"13302733689",
      "random_bg":"1"

 }

}

6.14 图像上传

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

具体协议见: http://arch.smartmideazy.com/docs/components/file-component.html#12

其中businessId 为员工表主键ID

businessType固定为ssologin

需要遵循 《2.3 Http 请求头部约定

返回示例:

{
    "code": 200,
    "data": {
        "filePath": "https://iot-xlink-xfile.oss-cn-hangzhou.aliyuncs.com/community/2020-12-23/134354560.png",
        "id":"主键",
         "fileName":"文件名",
         "businessId":"文件所关联的业务id",
         "businessType":"文件所关联的业务类型",
         "fileExt":"文件扩展名",
         "contentType":"文件类型",
         "remotePath":"文件远程地址",
         "fileUri":"文件路径",
    },
    "message": "success"
}

6.15 员工个人头像更新

此接口可以使用 《6.16 员工个人资料更新(不含密码更新)》接口完成。不需要单独调用此接口。

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/user/account/avatarreset

Method: POST

请求Body

名称 类型 必填 描述
id string y 员工表主键ID
filePath String y 调用接口《6.17 图像上传》返回的存储桶位置URL

返回:

{
 "code":"200", "message":"success",

"data":
 {
   "id":1109,
   "nickname":"路人甲",
   "delivery_address":"北京朝阳区290号",
   "mobile":"13302733689",
   "email":"zxu@126.com",
    "ico":"https://google.com/avatar/1120/35/35",
     "random_bg":"1"


 }

}

6.16 员工企业信息新增/修改

描述:体验帐号的员工更新企业信息。 须登录后使用此功能。

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/iot/main/company/update

Method: POST



请求Body

名称 类型 必填 描述
id Bigint N 员工企业信息表的主键ID;非空时表示修改;空值代表新增
contact string y 联系人; 2-12字符个长度;
mobile String y 手机号;
company_name String y 公司名称,2-120个字符长度。
company_address String y 公司地址,2-120个字符长度。

返回:

{
 "code":"200", "message":"success",

"data":
 {
   contact:XX,
   mobile:XX,
   company_name:XX,
   company_address:XX,
   update_time:XX

 }

}

6.17 获取方案信息

描述:未注册帐号的游客发起的获取方案请求。需要手机验证码验证。

HTTP协议:HTTP, HTTPS

http头: 无

URL: /v1/iot/main/plan/submit

Method: POST

请求Body

名称 类型 必填 描述
verify_code String N 手机短信验证码; 见接口《6.13 发送手机验证码》
contact string y 联系人; 2-12个字符长度;
mobile String y 手机号,接收短信的手机号。
company String y 公司名称; 2-120个字符长度;

返回:

{
 "code":"200", "message":"success",

"data":
 {
   "id":1109,
   "mobile":"13209889678",
   "company":"XXX",
   "contact":"XX",
   "update_time":"2022-03-09 10:09:08"

 }

}

6.18 员工企业信息加载

描述:体验帐号的员工加载企业信息。 须登录后使用此功能。

HTTP协议:HTTP, HTTPS

http头: 请严格遵循 《2.3 Http 请求头部约定

URL: /v1/iot/main/company/load

Method: GET

请求Body : 无

{
 "code":"200", "message":"success",

"data":
 {
   contact:XX,
   mobile:XX,
   company_name:XX,
   company_address:XX,
   update_time:XX

 }

}

6.19 模拟发送短信验证码

描述:方便测试预留的模拟发送短信接口。临时接口,生产环境将移除。

HTTP协议:HTTP, HTTPS

http头: 无

URL: /v1/user/verifycode/fake?mobile=13360332878&verify_code=1234

Method: GET

其中: mobile为手机号、 verify_code为短信

eg : https://gw-sit.remacsmart.com/v1/user/verifycode/fake?mobile=13360332878&verify_code=1234

6.20 获取重置密码短信验证码

请求信息

HTTP协议:HTTP,HTTPS

/v1/iot/main/send/verify/code

方法:POST

请求参数:

名称 类型 必填 描述
jobNumber string 登录账号
mobile string 手机号
random_code string 图片验证码

BODY:

{
    "msgId": "3fc848aa-1282-d011-d02d-a751bf6a9355",
    "jobNumber": "abc",
    "mobile": "13112345678",
    "random_code": "2753"
}

返回

{
    "code": "200",
    "message": "success"
}

6.21 重置密码

请求信息

HTTP协议:HTTP,HTTPS

/v1/iot/main/reset/pwd/byCode

方法:POST

请求参数:

名称 类型 必填 描述
jobNumber string 登录账号
mobile string 手机号
code string 短信验证码
password string 密码 , 遵循《5.2.3密码规范 》及 《5.2 密码明文加密
BODY:
{
    "msgId": "3fc848aa-1282-d011-d02d-a751bf6a9355",
    "jobNumber": "abc",
    "mobile": "13112345678",
    "code": "2753",
    "password": "ZAx9_uxL3Jph5wEuBT_X1kN2kdOOuu8KsUU7_agJzHY"
}

返回

{
    "code": "200",
    "message": "success"
}

7 缓存

缓存数据 key 说明 Value
业务组织树缓存 RedisKey.CACHE_PREFIX_ADMIN_ORG_TREES+":"+adminid;
菜单树缓存 RedisKey.CACHE_PREFIX_MENU_TREES+":"+adminid;
小区列表缓存 RedisKey.CACHE_PREFIX_ADMIN_COMMUNITYS+":"+adminid;

8 相关参考资料

文档地址: http://arch.smartmideazy.com/docs/

主数据文档: http://arch.smartmideazy.com/apidoc/main-entry/API.html

生产统一登录平台网址: https://smartlife.ruizhuzn.com/

https://smartlife-sit.ruizhuzn.com/

https://m-sit.ruizhuzn.com

Copyright © www.remacsmart.com/ 2021 all right reserved,powered by Gitbook该文件修订时间: 2023-12-13 10:02:09

results matching ""

    No results matching ""