# 查考试数据同步
# 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", // 校园账号,一般是学号
"session": "201601", // 学期,表示2016~2017年度第一学期
"result": [ // 每个学期的数据
{
"course_name": "高等数学", // 课程名称
"time": "7月9号 9:00~11:00", // 时间
"location": "教学楼101", // 地址
"seat": "15" // 座位号
},
{
"course_name": "高等数学", // 课程名称
"time": "7月9号 9:00~11:00", // 时间
"location": "教学楼101", // 地址
"seat": "15" // 座位号
},
...
]
}
# 附件
# 1. 签名算法
签名采用微信支付 (opens new window)后端签名算法,具体算法见签名算法 (opens new window)。
# 2 数据加密
采用AES对称加密算法(AES/CBC/ZeroPadding 128位模式),具体算法见加解密demo (opens new window)。
KEY = APP_KEY
IV = APP_SECRET 前16位。
# 3 APP_KEY & APP_SECRET
由腾讯微卡生成,每个公众号拥有一对唯一的APP_KEY
和 APP_SECRET
。
APP_KEY和APP_SECRET的获取见接口对接指引 (opens new window)。