360 Secure SkillHub
360 安全技能中心

wechat-auth

提供微信小程序 code 换 openid/session_key、公众号 OAuth 网页授权与获取用户信息的后端集成说明,附 Python/Flask 示例代码,调用微信接口并生成自定义 token,并列出 session_key 不外传等安全注意事项。未提供前端实现、token 存储与刷新逻辑。

guyulong
热度 0.00
最近更新 2026-10-18 23:40:11
分类:开发依赖:代码执行 / 第三方 API应用场景:API 集成 / 代码生成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add guyulong/cn-agent-skills/wechat-auth
Metadata
name
wechat-auth
description
微信登录授权集成指南(公众号/小程序/开放平台)
category
后端开发
tags
["微信","授权","OAuth"]
tools
["claude-code","cursor"]

微信登录授权集成

使用场景

集成微信登录功能,支持公众号、小程序、开放平台三种方式。

小程序登录流程

前端 wx.login() → 获取 code
        ↓
后端用 code 换取 openid/session_key
        ↓
生成自定义 token 返回给前端
        ↓
前端保存 token,后续请求携带

后端代码 (Python/Flask)

import requests

def wx_login(code: str) -> dict:
    """微信小程序登录"""
    url = "https://api.weixin.qq.com/sns/jscode2session"
    params = {
        "appid": APPID,
        "secret": SECRET,
        "js_code": code,
        "grant_type": "authorization_code"
    }
    resp = requests.get(url, params=params).json()
    
    if "errcode" in resp:
        raise ValueError(f"微信登录失败: {resp['errmsg']}")
    
    openid = resp["openid"]
    session_key = resp["session_key"]
    
    # 生成自定义token
    token = generate_token(openid)
    return {"token": token, "openid": openid}

公众号OAuth登录

def get_wechat_auth_url(redirect_uri: str, state: str = "STATE") -> str:
    """获取微信授权URL"""
    return (
        f"https://open.weixin.qq.com/connect/oauth2/authorize"
        f"?appid={APPID}"
        f"&redirect_uri={redirect_uri}"
        f"&response_type=code"
        f"&scope=snsapi_userinfo"
        f"&state={state}"
        f"#wechat_redirect"
    )

def get_wechat_userinfo(code: str) -> dict:
    """通过code获取用户信息"""
    # 1. 获取access_token
    token_url = "https://api.weixin.qq.com/sns/oauth2/access_token"
    token_resp = requests.get(token_url, params={
        "appid": APPID, "secret": SECRET,
        "code": code, "grant_type": "authorization_code"
    }).json()
    
    # 2. 获取用户信息
    user_url = "https://api.weixin.qq.com/sns/userinfo"
    user_resp = requests.get(user_url, params={
        "access_token": token_resp["access_token"],
        "openid": token_resp["openid"],
        "lang": "zh_CN"
    }).json()
    
    return user_resp

安全注意事项

  • session_key 不要返回给前端
  • 不要用 wx.getUserInfo(已废弃),用 wx.getUserProfile
  • 建议使用云函数处理敏感逻辑
  • 定期刷新 access_token