# 微信学生身份快速验证

# 一、能力简介

“微信学生身份快速验证”是由微信官方开放给小程序开发者用于校验用户学生身份的功能。

该功能基于多维度要素信息核验,旨在为小程序提升识别用户学生身份的效率,同时为用户提供更便捷地验证流程。

注:如开发者需要提升校验结果准确性,建议可在重要环节设置人工审核进行确认,以提高验证准确性。

首次快速验证

若用户快速验证未通过,可以选择补充学籍信息继续进行验证。

# 二、准入规则

同时满足如下条件的小程序开发者可向平台申请接入“微信学生身份快速验证”功能:

(1) 小程序主体为境内非个人主体;

(2) 小程序已完成微信认证;

(3) 小程序近3个月无严重违规记录;

(4) 小程序的服务类目在以下范围内:

一级类目 二级类目
教育服务 学历教育(培训机构)、学历教育(学校)、驾校培训、驾校平台、教育平台、在线视频课程
物流服务 收件/派件、邮政、货物运输
交通服务 网约车、顺风车/拼车、出租车、航空业务、航空、火车/高铁/动车、公交/地铁、长途汽车、骑车
生活服务 求职/招聘、营业性演出服务
IT科技 音视频设备、基础电信运营商、电信业务代理商、转售移动通信、多方通信
工具 办公
电商平台 电商平台
餐饮服务 餐饮服务场所/餐饮服务管理企业、点餐平台、外卖平台
旅游服务 旅游管理单位、旅行社、OTA、住宿服务、景区服务
商家自营 食品饮料、百货商场/购物中心、图书报刊/音像/影视/游戏/动漫、电话卡销售、玩具、鞋靴、箱包皮具、个护家清、时尚首饰、眼镜、钟表、服饰内衣、3C数码、美妆、运动户外、办公/文具
商业服务 摄影/扩印
金融 银行

此外,开发者应合理使用本功能,若被发现或用户举报开发者不合理要求用户提供学生身份等个人信息或存在其他不合理使用本功能的行为,中断用户对本功能的正常使用流程,影响用户使用体验,微信有权依据《微信小程序平台运营规范》对该小程序进行处理。

# 三、接入指引

第一步:符合开通类目的小程序,登录小程序后台(mp.weixin.qq.com),按照“侧边栏->功能->学生验证”的路径,点击开通按钮——

开通界面

第二步:仔细查阅《微信学生身份快速验证功能服务条款》后,勾选“我已阅读并同意”后点击“确定申请开通”——

协议界面

第三步:请正确填写服务信息,点击“下一步”——

服务信息界面

第四步:请按照业务实际需求填写使用学生身份验证接口的用途与场景,活动预计上线时间以及优惠明细,上传服务主要交互图,点击“下一步”——

使用信息界面

第五步:请填写运营联系人信息,点击“确定”——

联系人信息界面

第六步:提交后请耐心等待3-5个工作日的审核期,审核结果将以站内信通知——

如申请期间遇到问题,可联系腾讯工作邮箱(wx_city@tencent.com),将会有相关工作人员进一步指引。

邮件标题:【学生身份快速验证】+开通小程序名称+开通小程序appid
邮件内容:1、能力用途与场景;2、上线时间;3、优惠明细;4、需要咨询的问题等。

# 四、常见问题

Q:该功能的识别准确性是否可以保证?

该功能旨在帮助小程序开发者更便捷快速地识别学生群体,由于技术及数据的局限性,腾讯不对该功能下验证结果的准确性进行任何明示或默示的声明或保证。

Q:该功能可识别哪些类型的学生用户?

覆盖全国高等学校(除港澳台)在读大学生(包括但不限于在读专科生、本科生、硕博研究生)。目前仅支持二代身份证的大陆居民用户完成验证,港澳台及外籍用户暂不支持验证。

Q:该功能是否会进行收费?

目前,该功能面向微信小程序开发者限时免费开放。

Q:学生身份是否返回有效期?如何查询已授权用户的身份状态(如是否毕业)?

该功能会基于用户授权,向用户及微信小程序开发者提供当前学生身份验证状态查询等技术服务。如超过code查询有效期,建议开发者在提供学生权益的必要场景下,重新获得用户授权,了解实时状态。

# 五、开发文档

验证流程说明

目前学生身份验证方式为快速验证和学籍验证两种方式的承接。首次验证的用户采取快速验证的方式。若用户快速验证未通过,可以选择继续补充学籍信息完成验证。

业务流程说明

第一步:业务方小程序的界面,需要学生验证身份时,拉起微信学生验证授权插件提供的授权组件,使用插件的代码如下5.1。

第二步:用户在微信授权插件点击同意确认后,微信会返回业务方小程序,并在bind:auth事件返回wx_studentcheck_code参数(通过e.detail.wx_studentcheck_code获取)。

第三步:业务方页面获得wx_studentcheck_code之后,需要通过后台调用微信提供的后台API,获取用户学生身份。获取完成后,业务方再根据具体情况,完成自有的业务流程。

# 5.1 跳转授权插件弹窗

a.首先在app.json里面引入插件

{
  "plugins": {
    "studentVerify": {
      "version": "latest",
      "provider": "wxa16657d57059e0f0"
    }
  }
}

b. 在页面的json文件里面引入

{
    "usingComponents": {
        "studentVerify": "plugin://studentVerify/verify"
    }
}

c.在页面的wxml文件里面引入

<view wx:if="isStudent">
  <button bind:tap="onShowStudentVerifyDialog">授权学生身份</button>
</view>
<view wx:else>
  当前用户是学生
</view>
<studentVerify bind:auth="onStudentVerifyAuth" bind:reject="onStudentVerifyReject" bind:close="onStudentVerifyClose" show="{{showStudentVerifyDialog}}" isQuick="{{true}}"></studentVerify>

d. 用户点击“允许”按钮触发auth事件,关闭弹窗的时候触发close事件,在页面JS里面编写auth和close事件等逻辑

const CODE_STORAGE_KEY = 'CODE_STORAGE_KEY'
Page({
  data: {
    showStudentVerifyDialog: false,
    isStudent: false, // 是否是学生
    studentcheckCode: '', // 获取学生身份的code
  },
  onLoad() {
    // 如果缓存里面有code, 获取一下
    const code = wx.getStorageSync(CODE_STORAGE_KEY) || ''
    if (code) {
      this.setData({
        studentcheckCode: code
      })
      this.checkStudentIdentity()
    }
    this.checkStudentPluginForUpdate()
  },
  checkStudentPluginForUpdate() {
    if (!wx.getPluginUpdateManager || !wx.getUpdateManager) {
      return
    }
    // 检查学生验证插件更新
    const pluginManager = wx.getPluginUpdateManager({
      pluginId: 'wxa16657d57059e0f0'
    })
    const weappManager = wx.getUpdateManager()
    console.log('pluginManager', pluginManager, 'weapp manager', weappManager)
    pluginManager.onUpdateReady(() => {
      console.log('onUpdateReady pluginManager')
      weappManager.applyUpdate()
    })
    pluginManager.onUpdateFailed(() => {
      console.log('onUpdateFailed pluginManager')
      // TODO: 更新失败开发者可做上报,方便监控
    })
  },
  onShowStudentVerifyDialog() {
    this.setData({
      showStudentVerifyDialog: true
    })
  },
  onStudentVerifyClose() {
    if (!this.data.studentcheckCode) {
      return
    }
    // 验证学生身份
    this.checkStudentIdentity()
  },
  onStudentVerifyAuth(e) {
    const code = e.detail.wx_studentcheck_code
    if (code) {
      this.setData({
        studentcheckCode: code
      })
      // 2小时有效,缓存到本地
      wx.setStorageSync(CODE_STORAGE_KEY, code)
      // 验证学生身份
      this.checkStudentIdentity()
    }
  },
  checkStudentIdentity(opt = {}) {
    if (!this.data.studentcheckCode) {
      opt.fail && opt.fail({errMsg: 'no student code'})
      return
    }
    // TODO: 后台需要提供一个https请求接口,调用5.2提供的API,直接把API的结果返回给前端
    wx.request({
      // TODO: 需替换成开发者的URL
      url: 'https://xxx/checkstudentidentity',
      data: {
        wx_studentcheck_code: this.data.studentcheckCode
      },
      ...opt,
      success: (res) => {
        if (res.data.errcode === 0) {
          this.setData({
            isStudent: res.data.bind_status === 3 && res.data.is_student
          })
        } else if (res.data.errcode !== -1) {
          // wx_studentcheck_code过期或无效, 清除掉这个字段
          this.setData({
            studentcheckCode: '',
          })
          wx.setStorageSync(CODE_STORAGE_KEY, '')
        } else {
          // TODO: 系统错误, 可以尝试ß重试一次
        }
        opt.success && opt.success(res)
      }
    })
  }
})

在bind:auth事件返回wx_studentcheck_code参数(通过e.detail.wx_studentcheck_code获取)。

isQuick参数表示是否使用新版本校验方式。

注意

1.auth事件和close事件没有必然关系,可能会出现有close,但是没有auth事件的情况,所以如果有wx_studentcheck_code,在auth和close事件里面都调用后台API获取一下学生身份即可。

2.引用的插件的版本,必须设置为latest,并且加上自动更新的逻辑,参考上面checkStudentPluginForUpdate函数,低版本的插件,可能会在一段时间内被禁用。

# 5.2 快速获取学生身份API

a.请求方式:POST

b.请求地址:https://api.weixin.qq.com/intp/quickcheckstudentidentity?access_token=ACCESSTOKEN

说明:此处的access_token获取方式,可点击此处参考详细说明。接口单日限额:100w/日。

如有提额需求可以联系腾讯工作邮箱(wx_city@tencent.com)。
邮件标题:【学生身份快速验证提额需求】+小程序名称+小程序appid
邮件内容:1、能力用途与场景;2、上线时间;3、需要提额的原因等。

c.请求格式:JSON

d.请求参数:

字段 类型 说明 备注
openid string 用户在业务方下的openid 需为已开通接口权限小程序对应的用户openid。
wx_studentcheck_code string 用户授权查询code 由授权插件返回,插件可选择不同场景:是否为快速验证。
微信学生身份验证和微信学生身份快速验证需要使用对应场景生成的不同的code。
code有效期两小时。

e.返回字段

字段 类型 说明 备注
errcode int 0为接口调用成功 错误码:
-1:系统错误
61007/48001:无api权限
43002:非POST方法
40097:check_code和openid不匹配;check_code不存在
83400:check_code过期
83401:本日该用户信息查询次数已达上限
83402:code不匹配,快查接口只能用快查code查询
errmsg string 失败时的错误提示 错误原因
bind_status uint32 绑定状态:
1-未绑定
2-审核中
3-已绑定
is_student bool true-是学生,false-不是学生 用户学生身份绑定状态说明

文档更新时间:202405