# 查课表Pro数据同步
# 1 请求方式
课表接口采用POST
的方式向校方发送数据。
# 2 请求参数
原始数据 R
:
{
"card_number":"3109005843",
"app_key":APP_KEY,
"nonce_str":"",(32位随机字符串)
"timestamp":"",(时间戳)
"sign":"9A0A8659F005D6984697E2CA0A9CF3B7"//签名
}
通过加密R
可以得到R'
:R' = AES_CBC_ENCRYPT(R)
。
{
"raw_data":R',
"app_key":APP_KEY
}
腾讯微卡会把上面的数据以POST
的方式发送到校方提供的课表接口。
加密算法见附件。
# 3 数据返回
校方接收到请求,对数据进行解密,验证签名,确认请求来源于腾讯微卡,处理后返回课表数据。
返回数据:
{
"code":0,
"message":"success",
"raw_data":R',
"app_key":APP_KEY
}
关键点:
- 请求成功,需保证返回的
code
为 0。 - 请求失败,需保证返回的
code
不为 0。 message
字段在code
不为 0 时返回错误的信息。app_key
跟请求时的app_key
保持一致。raw_data
对应的R'
为加密后的数据。 通过解密R'
可得到R
:R = AES_CBC_DECRYPT(R·)
{
"card_number":"07302590", // 校园账号,一般是学号
"type":"0", // 课表类型(0-本科;1-研究生;2-教师;-1-未知)
"session":"201601", // 学期数,固定格式“年份+学期编号”,如201601
"timetable": [ // 每节课的信息
{
"course_id":"672364823" // 课程编号
"course_class":"1", // 课程开始节次
"begin_time":"08:00", // 课程开始时间(时:分)
"end_time":"10:00", // 课程结束时间(时:分)
"course_name":"数值分析", // 课程名字
"teacher":"麦克", // 课程老师名字
"day":"1", // 周几上课:1-周一;2-周二;以此类推
"class_name":"数学实验班", // 班级名称
"week":"5", // 第几周
"address":"中2-1204", // 上课地点
"required_course":"1", // 是否必修(1-是;0-否;-1-未知)
},
{
"course_class":"1",
...
},
...
]
}
注意: 1、timetable中每条数据为一节课。例:一周有12节课,一学期有18周,则timetable中应该有12*18条数据。 2、"session"字段表示学期数,需要强一致性,格式统一为“年份(4位)+学期编号(2位)”,如201601,表示2016年度第一学期。若格式不对,请求无效
# 附件
# 1. 签名算法
签名采用微信支付 (opens new window)后端签名算法,具体算法见签名算法 (opens new window)。
# 2 数据加密
采用AES对称加密算法(AES/CBC/ZeroPadding 128位模式),具体算法见加解密demo (opens new window)。
KEY = APP_KEY
IV = APP_SECRET 前16位。
APP_KEY和APP_SECRET的获取见接口对接指引 (opens new window)。