开发者文档

一, 开始前必读

一张图看懂开放平台

开放平台时序图

1, 更新日志

2, 开发者规范

开发者进行开放平台开发时,除了要满足接口的规范限制和接口调用频率限制外,还需特别注意用户敏感信息的使用规范。 涉及用户数据时:

3, 开放平台接口权限说明

不同类型的开放平台账号具有不同的接口权限,见下表

接口名称 未认证开放平台账号 认证开放平台账号
获取accessToken
免登授权
获取部门列表
创建部门
更新部门
删除部门
获取部门下所有人员
导入部门成员
发送聊天消息
上传媒体文件
获取媒体文件
其他接口完善中 ... ...

4, 开放平台接口调用频率说明


{"status":4006,"message":"接口调用频率超过限制"} 

接口名称 每日限额
获取accessToken 2000
免登授权 5000
获取部门列表 5000
创建部门 5000
更新部门 5000
删除部门 5000
获取部门下所有人员 5000
导入部门成员 20
发送聊天消息 5000
上传媒体文件 5000
获取媒体文件 5000
其他接口完善中 ...

5, 开放平台接口返回说明

应用每次调用接口时,可能获得正确或错误的返回码,开发者可以根据返回码信息调试接口,排查错误。见下表

返回码 说明
0 调用成功
-1 开放平台系统错误
4000 用户登录token错误
4001 用户登录token和accessToken错误,重新获取
4002 accessToken错误
4003 AccessToken超时
4004 AccessToken刷新过于频繁,注意每天的接口调用次数
4005 accessToken错误,一般是系统原因,重新获取或者联系客服
4006 接口调用频率超过限制
4007 获取accessToken时appId或者appSecret错误
4008 缺少accessToken参数
4009 需要get请求
4010 需要post请求
4011 需要httpss请求
4012 Post数据包为空
4013 Api无权限
4014 调用来源ip不在ip白名单
4015 不合法的callback url
4016 企业未对该应用授权
4500 用户uid不存在或者错误
4501 缺少uid参数

二, 开始开发

1, 接入指南

概述

接入开放平台,开发者需要完成以下3步:

  • 1.1 提交服务器配置 由于目前开发者后台还在公测中,还未对正式开发者开放,所有需要开发者把以下信息通过以下格式,以邮件(luohj@shinemo.com)发送给 后台超级管理员,暂时由超级管理员负责录入,录入成功后会返回应用的appId和appSecret
名称 说明
开发者名字 张三
开发者地址 浙江省杭州市西湖区文二西路888号我的公司
开发者联系手机号 18888888888
开发者身份证号 370686199904440000
开发者照片 照片形式放到附件中
开发者企业名称 ...
开发者企业地址 ...
开发者企业法人代表名字 ...
开发者企业法人代表身份证号 ...
开发者企业营业执照 照片形式放到附件
开发者企业类型 ...
应用名称 ...
应用icon 照片形式放到附件
应用描述 256字以内
服务器白名单ip(开放平台服务端只允许白名单内的ip访问,逗号分隔) ...
H5地址(应用如果是h5须填写h5地址) ...
Android_feature(应用如果是native,填写android的应用信息) ...
Ios_feature(应用如果是native,填写ios的应用信息) ...
应用的语言版本(中文 ,英文…) ...
应用发布到的客户端( ,集团彩云,联通客户端,全部) ...
应用需要使用的接口列表(目前只有获取用户信息) ...
应用的可见范围(企业名称或者全部) ...

2, 获取接口调用凭据(accessToken)

accessToken是开放平台的全局唯一票据,开放平台各接口时都需使用accessToken。开发者需要进行妥善保存。accessToken的存储至少要保留512个字符空间。accessToken的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的accessToken失效。

接口调用请求说明

https://api.open.imasheng.com/openapi/token/get?appId=APPID&appSecret=APPSECRET
参数 是否必须 描述
appId 应用注册成功后返回
appSecret 应用注册成功后返回

{"status":0,"data":{"accessToken":"MDAwMjM0M0RBNjIwMURENDAxOTJDRkE0MkVGMDlERjQ5MjVFODAzQTlFMThERDBCMzNBNzFEMjBFMkRCNjExRDgxQjM3RkU0QzM1NkMwQzM5NkNCODUyN0JFQTE1OUE5OUUzMg==","expiresIn":7200}}

参数 描述
status 开放平台处理状态
data 处理成功后会把数据字段放到这里
accessToken 访问凭据
expiresIn 凭证有效时间,单位:秒

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误)

{"status":4007,"message":"获取accessToken时appId或者appSecret错误"}

3, 测试号申请

开放平台为每个开发者账号最多提供10个测试应用账号,测试应用不需要企业认证,默认拥有所有接口权限,访问频率控制与正式应用相同。

4, 接口在线调试

5, 常见问题

三, 服务端开发文档

1, 免登授权

开发者需要通过此接口做免登

https://api.open.imasheng.com/openapi/auth/getUserInfoByToken?token=TOKEN&accessToken=ACCESSTOKEN

参数 是否必须 描述
token 客户端拼接上的token
accessToken 接口访问凭据

{"status":0,"data":{"uid":"REAM123","name":"张三", "orgList":[{"orgName":"杭州讯盟科技",orgId:1}, {"orgName":"芒果医生",orgId:2}, {"orgName":"阿里巴巴",orgId:3}...]}}

参数 描述
status 开放平台处理状态
data 处理成功后会把数据字段放到这里
uid 用户在开放平台的id(经过加密),后续获取用户信息需要通过此uid
orgList 用户所在机构列表
orgName 用户所在机构名字
orgId 用户所在机构id

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

2, 管理通讯录

开发者可以通过通讯录管理接口,将整个企业组织架构导入到系统;并且可以做修改和查看;

2.1 获取部门列表

 https://api.open.imasheng.com/openapi/department/list?accessToken=ACCESSTOKEN
参数 是否必须 描述
accessToken 接口访问凭据

{"status":0,"data":{"departments":[{"id":1,name:"开发部","parentid":1}, {"id":2,name:"测试部","parentid":1}...]}}

参数 描述
status 开放平台处理状态
data 处理成功后会把数据字段放到这里
departments 部门列表数据
id 部门id
name 部门名称
parentid 父部门id(根部门为0)

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

2.2 创建部门

 https://api.open.imasheng.com/openapi/department/create?accessToken=ACCESSTOKEN
{"name":"芒果医生", "parentId":"0", "order":"1"}
参数 是否必须 描述
accessToken 接口访问凭据
name 部门名称(长度限制为1~64个字符)
parentId 父部门id(根部门为0)
order 在父部门中的次序值。order值小的排序靠前

{"status":0,"data":{"id":"230332"}}

参数 描述
status 开放平台处理状态
data 处理成功后会把数据字段放到这里
id 部门id

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

2.3 更新部门

 https://api.open.imasheng.com/openapi/department/update?accessToken=ACCESSTOKEN
{"name":"芒果医生", "parentId":"0", "order":"1", "id":"23004"}
参数 是否必须 描述
accessToken 接口访问凭据
name 部门名称(长度限制为1~64个字符)
parentId 父部门id(根部门为0)
order 在父部门中的次序值。order值小的排序靠前
id 部门id

{"status":0}

参数 描述
status 开放平台处理状态

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

2.4 删除部门

 https://api.open.imasheng.com/openapi/department/delete?accessToken=ACCESSTOKEN
{"id":"23004"}
参数 是否必须 描述
id 部门id

{"status":0}

参数 描述
status 开放平台处理状态

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

2.5 获取部门下所有人员

https://api.open.imasheng.com/openapi/user/list?accessToken=ACCESSTOKEN&deptId=DEPTID&offset=0&size=100

参数 是否必须 描述
accessToken 接口访问凭据
deptId 部门id
offset 页偏移量
size 每页的数量
order 排序
{"status":0,"data":{
"hasMore":true, 
"users":
[{"uid":123, "name":"张三", "mobile":"18268080277", "title":"我的职位"},
{"uid":124, "name":"李四", "mobile":"18268080277", "title":"我的职位"},
...]}}

参数 描述
status 开放平台处理状态
data 处理成功后会把数据字段放到这里
hasMore 是否还有更多
uid 用户id
name 用户名字
mobile 手机号
title 职位

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

2.6 导入部门成员(增量)

 https://api.open.imasheng.com/openapi/user/import?accessToken=ACCESSTOKEN
[
{
    "deptId": ["1", "2"],
    "uid":"",
    "mobile":"18806886888",
    "title":"销售主管",
    "name":"旻浩"
},
{
    "deptId": ["0", "5"],
    "uid":"12",
    "mobile":"18806886887",
    "title":"销售小弟",
    "name":"旻浩1"
},
...
]
参数 是否必须 描述
accessToken 接口访问凭据
name 成员名字(长度限制为1~64个字符)
deptId 数组类型,数组里面值为字符串,成员所属部门id列表
mobile 手机号码。企业内必须唯一
uid 用户唯一id,为空则新增,非空则更新
title 人员职务(长度限制为1~64个字符)

{"status":0}

参数 描述
status 开放平台处理状态

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

3, 发送聊天消息


 https://api.open.imasheng.com/openapi/message/chat/push

参数 是否必须 描述
accessToken 接口访问凭据
uid 发送者id
targetId 接受者id
msgType 消息类型

** msgType(消息类型)及数据格式 **

参数 是否必须 描述
msgType 消息类型,此时固定为:text
content 消息内容


{
    "msgType": "text",
    "text": {
        "content": "张三的请假申请"
    }
  }


参数 是否必须 描述
msgType 消息类型,此时固定为:image
mediaId 图片媒体文件id,可以调用上传媒体文件接口获取


{
    "msgType": "image",
    "image": {
        "mediaId": "MEDIA_ID"
    }
}

参数 是否必须 描述
msgType 消息类型,此时固定为:image
mediaId 图片媒体文件id,可以调用上传媒体文件接口获取

{
    "msgType": "voice",
    "voice": {
       "mediaId": "MEDIA_ID",
       "duration": "10"
    }
}


参数 是否必须 描述
msgType 消息类型,此时固定为:link
messageUrl 消息点击链接地址
mediaId 图片媒体文件id,可以调用上传媒体文件接口获取
title 消息标题
text 消息描述

{
    "msgType": "link",
    "link": {
        "messageUrl": "https://www.baidu.com",
        "mediaId":"@lALOACZwe2Rk",
        "title": "测试",
        "text": "测试"
    }
}


{"status":0,"success":true}

参数 描述
status 开放平台处理状态

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

4, 媒体文件管理

4.1 上传媒体文件


https://api.open.imasheng.com/openapi/media/upload

参数 是否必须 描述
accessToken 接口访问凭据
type 用户id
media form-data中媒体文件标识,有filename、filelength、content-type等信息

** 上传的媒体文件限制 **

图片(image):1MB,支持JPG格式

语音(voice):2MB,播放长度不超过60s,AMR格式


{"status":0,"data":{"type":"image", "mediaId":"dsa8d87y7c8d8c"}}

参数 描述
status 开放平台处理状态
data 处理成功后会把数据字段放到这里
type 媒体文件类型,分别有图片(image)、语音(voice)等
mediaId 媒体文件上传后获取的唯一标识

错误时开放平台会返回错误码等信息,JSON数据包示例如下(该示例为accessToken超时)

{"status":4003,"message":"accessToken超时,请重新获取"}

4.2, 获取媒体文件

 https://api.open.imasheng.com/openapi/media/get?accessToken=ACCESSTOKEN&mediaId=MEDIAID

参数 是否必须 描述
accessToken 接口访问凭据
mediaId 媒体文件的唯一标示

5, 通讯录事件回调

开放平台会向回调url推送事件变更,假设您提供的回调URL是:

https://127.0.0.1/demo/receive

那么在开放平台服务器每一次访问回调URL的时候 将请求(下面链接中的signature,timestamp,nonce的值只是示例,并不代表真实返回的值):

https://127.0.0.1/demo/receive?signature=111108bb8e6dbce3c9671d6fdb69d15066227608 &timestamp=1783610513&nonce=380320111
{"encrypt":"1ojQf0NSvw2WPvW7LijxS8UvISr8pdDP+rXpPbcLGOmIBNbWetRg7IP0vdhVgkVwSoZBJeQwY2zhROsJq/HJ+q6tp1qhl9L1+ccC9ZjKs1wV5bmA9NoAWQiZ+7MpzQVq+j74rJQljdVyBdI/dGOvsnBSCxCVW0ISWX0vn9lYTuuHSoaxwCGylH9xRhYHL9bRDskBc7bO0FseHQQasdfghjkl"
}

其中的encrypt字段是经过加密的消息体,encrypt经过一系列解密步骤后,才能产生下面所说的“POST数据解密后示例”,您可以直接使用开放平台提供的库进行解密的处理。 除此之外,在接收到推送之后,需要返回字符串success(代表了你收到了推送),返回的数据也需要做加密处理,如果不返回,开放平台服务器将持续推送下去,达到一定阈值后将不再推送。

** 目前可以监听的事件类型分别为: **

** 参数说明: **

参数 描述
EventType 事件类型,有八种,"user_add_org”, “user_modify_org”, “user_leave_org”,“org_admin_add”, “org_admin_remove”, “org_dept_create”, “org_dept_modify”, “org_dept_remove”, “org_remove”
TimeStamp 时间戳
nonce 随机串
signature 签名
UserId 用户发生变更的userid列表
DeptId 部门发生变更的userid列表
CorpId 发生通讯录变更的企业

** 返回说明 **

服务提供商在收到此事件推送后务必返回包含经过加密的字符串"success"的json数据

参数 描述
signature 消息体签名
TimeStamp 时间戳
nonce 随机串
encrypt “success"加密字符串

四, 开发demo

Java Common Github DEMO

Java SDK Github DEMO

五, JSSDK

开发者通过jssdk调用应用native的相关方法;

JSSDK使用步骤

步骤一:应用中添加测试DEMO APP(群里联系管理员,或者将http://video.statics.cdn.imasheng.com/Hybrid/selectPic.html在app中打开)

步骤二:绑定域名(群里联系管理员,添加js安全域名)

步骤三:引入JS文件

步骤四:通过data注入权限验证配置


var data = '{""appId":"应用appId", "timestamp":"生成签名的时间戳", "nonceStr":"生成签名的随机串", "signature":"签名(签名算法见下文)",...}'; 
window.JSBridge.requestHybrid({
                method: "方法名称",
                data: JSON.parse(data),
                callback: function(data) {
                        conosle.log(JSON.stringify(data));
                }
});

JSSDK 签名算法

参数 描述
method 要调用的方法名称
data JSON格式, 方法所需参数
callback 处理回调, JSON格式{ "status":"200", "data":"..."} (status == 200表示回调成功)

基础接口

1 上传图片


var data = '{"max":3, "appId":"应用appId", "timestamp":"生成签名的时间戳", "nonceStr":"生成签名的随机串", "signature":"签名"}'; 
window.JSBridge.requestHybrid({
                method: "selectpic",
                data: JSON.parse(data),
                callback: function(data) {
                        conosle.log(JSON.stringify(data));
                }
});

使用DEMO

JSSDK DEMO