如何用 Python 实现微信公众号授权登录的网页签到?

直接给公众号回复 文字 签到,可以使用 itchat 模版来实现

但需要使用微信授权登录的网页签到,如何实现呢?
如何用 Python 实现微信公众号授权登录的网页签到?

7 回复

在公众号里发位置是不是可以,有 wchatpy 开源框架


要搞微信公众号网页授权登录并签到,得先搞定微信开放平台的配置和OAuth2.0流程。核心就是让用户访问一个URL,微信会回调你的服务器并带上code,再用code换access_token和用户信息。

首先确保你有认证服务号,并在微信公众平台配置了网页授权域名。然后安装requests库。

主要分三步:

  1. 生成授权URL,引导用户访问
  2. 处理微信回调,用code换token和用户信息
  3. 实现签到逻辑
import requests
from flask import Flask, request, redirect, jsonify
import time

app = Flask(__name__)

# 你的公众号配置
APP_ID = '你的appid'
APP_SECRET = '你的appsecret'
REDIRECT_URI = 'http://你的域名.com/callback'  # 授权回调地址

@app.route('/login')
def wechat_login():
    """生成授权URL并重定向"""
    auth_url = (
        f"https://open.weixin.qq.com/connect/oauth2/authorize?"
        f"appid={APP_ID}&redirect_uri={REDIRECT_URI}&response_type=code"
        f"&scope=snsapi_userinfo&state=STATE#wechat_redirect"
    )
    return redirect(auth_url)

@app.route('/callback')
def callback():
    """微信回调处理"""
    code = request.args.get('code')
    
    if not code:
        return "授权失败"
    
    # 用code获取access_token
    token_url = (
        f"https://api.weixin.qq.com/sns/oauth2/access_token?"
        f"appid={APP_ID}&secret={APP_SECRET}&code={code}&grant_type=authorization_code"
    )
    
    resp = requests.get(token_url).json()
    access_token = resp.get('access_token')
    openid = resp.get('openid')
    
    if not access_token:
        return f"获取token失败: {resp}"
    
    # 获取用户信息
    user_info_url = (
        f"https://api.weixin.qq.com/sns/userinfo?"
        f"access_token={access_token}&openid={openid}&lang=zh_CN"
    )
    
    user_info = requests.get(user_info_url).json()
    
    # 这里实现签到逻辑
    sign_result = do_sign(openid, user_info.get('nickname', ''))
    
    return jsonify({
        'status': 'success',
        'user': user_info.get('nickname'),
        'sign_result': sign_result
    })

def do_sign(openid, nickname):
    """签到逻辑示例"""
    # 这里应该连接数据库,记录签到
    # 示例:返回签到成功信息
    sign_date = time.strftime('%Y-%m-%d')
    return {
        'openid': openid,
        'nickname': nickname,
        'sign_date': sign_date,
        'continuous_days': 1  # 示例连续签到天数
    }

if __name__ == '__main__':
    app.run(debug=True, port=5000)

注意几个关键点:

  • snsapi_userinfo scope能获取用户昵称头像,snsapi_base只能拿openid
  • 回调地址必须在公众号后台配置,且带http/https
  • access_token有有效期,但签到一般用openid就够了
  • 生产环境要用HTTPS,存储用户信息要加密

签到逻辑自己实现,比如用数据库记录openid和签到时间,判断连续签到。记得处理重复签到的情况。

总结:核心就是OAuth2.0授权流程加个签到逻辑。

其实就是一个外部网页签到,网站没开通公众号之前,可以使用 用户名+密码 模拟登录并签到,但现在网站方估计为了推广公众号,关闭了用户名登录,改为必须微信授权登录,所以也没办法模拟登录签到了。用浏览器打开网页,提示请在微信客户端内打开~~~

用 PC 微信打开链接

能否具体点? pc 微信打开链接,抓包的 用户 token 和微信 app 内抓包的 token 时效性应该是一样的吧? 这个 token 有效期很短,还是说用 itchat 来打开链接?

authing.cn

支持小程序扫码登录,你可以看看文档: https://docs.authing.cn/#/

有不明白的可以问我~

authing 也支持直接配置 微信的 OAuth 登录,不过申请微信的 OAuth 需要开发者认证,想比较快的话可以用小程序扫码登录

回到顶部