成绩请求接口

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' 可得到 RR = AES_CBC_DECRYPT(R·)
{
    "card_number":"07302590",  // 校园账号,一般是学号
    "result": {             // 每个学期的数据
        "201501": [        // 表示2015~2016年度第一学期
            {
                "course_id":"672364823",    // 课程编号
                "course_name":"1",        // 课程名称
                "score":"90",          // 成绩
                "gpa":"4.0"             // 绩点
            },
            {
                "course_id":"672364823",
                ...
            },
            ...
        ],
        "201502":[
            {
                "course_id":"672364823",    // 课程编号
                "course_name":"1",        // 课程名称
                "score":"90",          // 成绩
                "gpa":"4.0"             // 绩点
            },
            {
                "course_id":"672364823",
                ...
            },
            ...
        ]

    }
}

注意: 返回的数据为在校所有学期的成绩

附件

1. 签名算法

签名采用微信支付后端签名算法,具体算法见签名算法

2 数据加密

采用AES对称加密算法(AES/CBC/ZeroPadding 128位模式),具体算法见加解密demo

KEY = APP_KEY
IV = APP_SECRET 前16位。

APP_KEY和APP_SECRET的获取见接口对接指引