Files
hair-keeper/.claude/skills/pku-iaaa/references/account-verify.md

1.9 KiB
Raw Blame History

北京大学账号验证

用于验证某个学号/职工号是否为有效的北京大学账号,不涉及登录流程。

API

GET https://iaaa.pku.edu.cn/iaaa/svc/pub/validate.do
    ?userId={USERID}
    &userName={USERNAME}
    &appId={APPID}
    &msgAbs={MD5MSG}

参数

参数 说明
userId 学号或职工号
userName 账号姓名(传输时需 URLEncode但计算 MD5 摘要时使用原始值,不做 URLEncode
appId 应用 ID
msgAbs MD5 消息摘要

msgAbs 计算

与其他端点规则一致:除 msgAbs 外所有参数按参数名升序排列拼接,再拼接 Key取 MD5。

PARA_STR 排序后为:appId={APPID}&userId={USERID}&userName={USERNAME}

注意:userName 在 PARA_STR 中使用原始值(不做 URLEncode只有在 URL 传输时才 URLEncode。

返回

正常:

{
  "success": true,
  "valid": true,
  "userType": "用户身份类别"
}

validtrue 表示账号存在,false 表示不存在。

异常:

{
  "success": false,
  "errCode": "错误代码",
  "errMsg": "错误信息"
}

Python 示例

import hashlib
import urllib.parse
import requests

def verify_pku_account(user_id: str, user_name: str, app_id: str, key: str) -> dict:
    """验证北大账号是否存在"""
    # msgAbs 中 userName 使用原始值
    para_str = f"appId={app_id}&userId={user_id}&userName={user_name}"
    msg_abs = hashlib.md5((para_str + key).encode('utf-8')).hexdigest()

    # URL 中 userName 需要 URLEncode
    url = (
        f"https://iaaa.pku.edu.cn/iaaa/svc/pub/validate.do"
        f"?appId={app_id}"
        f"&userId={user_id}"
        f"&userName={urllib.parse.quote(user_name)}"
        f"&msgAbs={msg_abs}"
    )
    resp = requests.get(url, timeout=10)
    resp.raise_for_status()
    return resp.json()