1. 中国大学MOOC第三方接入登录
1.1. WEB端用户注册登录
时序图展示:
1.1.1. 用户注册/登录接口
用户注册/登录接口描述
功能描述 | 注册&登录 |
---|---|
参数说明 | appId: 机构产品ID,String类型(必填) nm:判断首次用户登录时是否需要手动绑定中M账号(值为true:直接生成中m账号不需要绑定,值为false:登录需要手动绑定中M页绑定账号),布尔类型(非必填) value:将重要的请求参数对称加密后的数据,String类型(必填) |
请求方法 | GET |
请求头 | Get /api/account/login2site.do?appId=5c63655b1fd688fee2cd0d368e5ac7c2&nm=false&value=aes(json(appId+loginId+nickName+realName+email+studentNo+schoolName+schoolRole+timestamp+nonce+notifyUrl+errorUrl)) Host: 127.0.0.1:8080Content-Type: text/html;charset=UTF-8注意:这里的json结构如下:{“appId":"xxxxxx","loginId":"yuntian@163.com",…} |
请求体 | |
响应 | 1. 如果用户第一次通过此api访问中国大学MOOC,则相当于注册新用户并且登录;如果不是第一次,就会直接登录到中国大学MOOC。判断依据:通过用户的loginId判断。2. appId和对称加密的key从中国大学MOOC交付运营人员获取并安全保存,避免泄露带来不必要的安全问题;3. errorUrl参数必须提供,如果不提供,出现错误将重定向的中国大学MOOC的404错误界面。 |
errorUrl的生成 | String errorUrl =AESCipherUtils.bytesToHexStr (url.getBytes()))获取到errorUrl,通过参数的形式传过来。 |
value参数组成
参数名 | 是否必须 | 参数类型 | 字段长度 | 参数描述 |
---|---|---|---|---|
appId | 必须 | String | 32个字符 | 由中国大学MOOC的交付运营人员分配给接入的企业或者学校,表示应用的id |
timestamp | 必须 | Long | 长整型,8个字节 | 请求毫秒级时间戳 |
loginId | 必须 | String | 64个字符 | 唯一标识,用户名(相同产品ID对应的用户名不能重复) |
nickName | 非必须 | String | 64个字符,UTF-8编码 | 用户的昵称,中M字段区分用户身份信息,用于展示(出现重复随机加后缀) |
realName | 必须 | String | 64个字符,UTF-8编码 | 用户的真实姓名 |
非必须 | String | 64个字符 | 用户的电子邮箱,用于判断中M是否存在邮箱账号依据 | |
phoneNumber | 非必须 | String | 64个字符 | 用户的手机号码,用于判断中M是否存在手机账号依据 |
autoVerify | 必须 | Boolean | true | 自动认证学生、老师信息 |
studentNo | 必须 | String | 32个字符 | autoVerify为true,此字段赋值学生学号和老师工号 |
schoolName | 必须 | String | 32个字符,UTF-8编码 | 中M需要先创建学校云并发布学校主页,否则会生成失败 |
schoolRole | 必须 | int | 整型 4个字节 | 身份类型(0:学生,1:教师,2:高校管理员) |
notifyUrl | 必须 | String | 512个字节 | 登录成功通知,见1.1.2“用户注册/登录通知接口”. |
errorUrl | 必须 | String | 512个字节 | 错误url重定向 |
returnUrl | 非必须 | String | 512个字节 | 页面url重定向 |
加密方法
1.所有的参数变成json形式。例如:
{
"appId":"dc2870b1dfdf0fd2c6fecf13d3de0a68",
"timestamp":1445328005805,
"loginId":"study01@163.com",
"nickName":"study01",
"email":"study01@163.com",
"studentNo ":"0612800227",
"schoolName":"浙江职业技术学院",
"schoolRole":1,
"autoVerify":"true"
"notifyUrl": "http://www.icourse163.org/api/login/notify.do",
"errorUrl":"http://www.icourse163.org/api/error/loginError.htm"
}
2.对称加密方法进行加密,加密算法如下(实现如路径“通用信息-1.2. 附录”下的JAVA示例):
String value=AESCipherUtils.encryptBcdString(json, key)
- json:如①所示的json串
- key:对称加密的key,需要从中国大学MOOC交付运营人员获取。
注意事项
免登录介绍:如果用户第一次通过此api访问中国大学MOOC,则相当于注册新用户并且登录,如果不是第一次,就会直接登录到中国大学MOOC,通过用户的loginId判断。
appId和对称加密的key从中国大学MOOC交付运营人员获取并安全保存,避免泄露带来不必要的安全问题。
errorUrl参数必须提供,如果不提供,出现错误我们将重定向的中国大学MOOC的404错误界面。
1.1.2. 用户注册/登录通知接口
通知接口描述
功能描述 | 用户注册/登录回调接口 |
---|---|
参数说明 | signature签名,参考第2部分平台调用第三方应用timestamp时间戳,请求毫秒级nonce参考第2部分平台调用第三方应用 |
请求方法 | POST |
请求头 | POST /api/login/notify.do?signature=sha1(b5285a02f2e0e731295b925dce83d45c165461354311444960726000)×tamp=1445328005805&nonce=123Host: 127.0.0.1:8080Content-Type: application/json;charset=UTF-8 |
请求体 | {"openUid":"9dc8f10af916f15456129b2ac6376717", "loginExtra": { "studentNo":"072623002", "schoolRole":1, "loginId":"study01@163.com", }}studentNo、schoolRole、loginId同"用户注册/登录接口"接口请求的加密参数中的相应的字段,用于第三方系统与平台用户的用户ID对应 |
响应 | {"code":"200"} |
value参数组成
参数名 | 是否必须 | 参数类型 | 字段长度 | 参数描述 |
---|---|---|---|---|
signature | 必须 | String | 32个字符 | 参考第2部分平台调用第三方应用 |
timestamp | 必须 | Long | 长整型,8个字节 | 请求毫秒级时间戳 |
nonce | 必须 | String | 随机数,字符或者整数组成,16字符 | 参考第2部分平台调用第三方应用 |
openUid | 必须 | String | 32个字符 | 用户在平台上的id |
1.1.3. 登出接口
登出接口描述
功能描述 | 退出登录 |
---|---|
参数说明 | appId: 应用ID,String类型(必填)signature:签名,参考通用的api签名(必填)format:返回结果的序列化类型,目前默认只有json(选填)nonce:随机数(必填)timestamp:GMT+0时间戳随机数(必填)openUid:用户openUid |
请求方法 | GET |
请求头 | GET /open/logout?appId=b1c6caca039d8728fa40a087dbad437b&signature=5a3f4896377f078904c6eb27f372bb6ce5b5cfb3&format=json&nonce=58878962936×tamp=1502962579077&openUid=2de3332473696c60ee9504ef9495aa891020695007Content-Type: text/html;charset=UTF-8 |
请求体 | |
响应 | 响应码:200 (HTTP的响应码统一为200,接口调用结果在响应体中体现)响应体:code:200—接口调用成功。其他参考响应码一个完整的响应体示例如下:{"code": 200,result:{ "openUid":"9dc8f10af916f15456129b2ac6376717"}} |
1.1.4. 校验加密内容接口
校验加密内容,检验加密信息是否准确
请求说明
请求方法:GET
请求地址:https://www.icourse163.org/mm-open-api
/decrypt
请求参数(x-www-form-urlencoded)
appId: ffd1e010d999a18f3eaa91973da7e2df
nonce: 1559117956529
signature: 48c74f489df07a8eb079197af25a8b976d894648
timestamp: 1559117956529
encryptContent: 加密内容
参数说明
字段 | 字段类型 | 是否必填 | 字段说明 |
---|---|---|---|
encryptContent | String | 是 | 加密内容 |
返回结果
{
"code": 0,
"result": "{test}"
}
1.1.5. 解绑外部账号绑定关系
解绑外部账号与mooc平台账号的绑定关系
请求说明
请求方法:GET
请求地址:https://www.icourse163.org/mm-open-api/open/account/unbind
请求参数(x-www-form-urlencoded)
appId: ffd1e010d999a18f3eaa91973da7e2df
nonce: 1559117956529
signature: 48c74f489df07a8eb079197af25a8b976d894648
timestamp: 1559117956529
encryptLoginId: AES加密的用户在外部系统的唯一身份标识
参数说明
字段 | 字段类型 | 是否必填 | 字段说明 |
---|---|---|---|
encryptLoginId | String | 是 | AES加密的用户在外部系统的唯一身份标识(key为appId对应的aesKey) |
返回结果
{
"code": 0,
"result": "true"
}