python 微信扫码登录_flask 微信扫码登录

import re

import time

import requests

from flask import Flask, render_template, session, jsonify

app = Flask(__name__)

app.secret_key = '1231sdfasdf'

from bs4 import BeautifulSoup

def xml_parse(text):

result = {}

soup = BeautifulSoup(text, 'html.parser')

tag_list = soup.find(name='error').find_all()

for tag in tag_list:

result[tag.name] = tag.text

return result

@app.route('/login')

def login():

ctime = int(time.time() * 1000)

qcode_url = "https://login.wx2.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_={0}".format(

ctime)

rep = requests.get(

url=qcode_url

)

# print(rep.text) # window.QRLogin.code = 200; window.QRLogin.uuid = "gb8UuMBZyA==";

qcode = re.findall('uuid = "(.*)";', rep.text)[0]

session['qcode'] = qcode

return render_template('login.html', qcode=qcode)

@app.route('/check/login')

def check_login():

qcode = session['qcode']

ctime = int(time.time() * 1000)

# https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=oeq3xdRFig==&tip=0&r=-412057997&_=1546600257051

# https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=oa95cvIS5w==&tip=0&r=-413943228&_=1546602155746

check_login_url = 'https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid={0}&tip=0&r=-413943228&_={1}'.format(

qcode, ctime)

rep = requests.get(

url=check_login_url

)

result = {'code': 408}

if 'window.code=408' in rep.text:

# 用户未扫码

result['code'] = 408

elif 'window.code=201' in rep.text:

# 用户扫码,获取头像

result['code'] = 201

result['avatar'] = re.findall("window.userAvatar = '(.*)';", rep.text)[0]

elif 'window.code=200' in rep.text:

# 用户确认登录

redirect_uri = re.findall('window.redirect_uri="(.*)";', rep.text)[0]

print(redirect_uri)

# https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A_pgPh0SjvyHWTDEF3kce2Wg@qrticket_0&uuid=wbewGl1rwQ==&lang=zh_CN&scan=1546599481&fun=new&version=v2

# https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A_pgPh0SjvyHWTDEF3kce2Wg@qrticket_0&uuid=wbewGl1rwQ==&lang=zh_CN&scan=15

redirect_uri = redirect_uri + "&fun=new&version=v2"

ru = requests.get(url=redirect_uri)

# 0@crypt_2272b9c9_c4a1df2d806c0b32bc7f8b678b907bd6hKPtRPRAn0yZWwZW1440810436%2BuiXaDx68luSpK5djbIrAqKoVLi4vSlxTg7dQe4105vIaFK93ORlG1kPgO5uQsSi1

ticket_dict = xml_parse(ru.text)

# print(ticket_dict)

session['ticket_dict'] = ticket_dict

result['code'] = 200

return jsonify(result)

@app.route('/index')

def index():

pass_ticket = session['ticket_dict']['pass_ticket']

init_url = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-412030554&lang=zh_CN&pass_ticket={0}".format(

pass_ticket)

rep = requests.post(

url=init_url,

json={

'BaseRequest': {

'DeviceID': "e572672200373583",

'Sid': session['ticket_dict']['wxsid'],

'Skey': session['ticket_dict']['skey'],

# 'Uin': session['ticket_dict']['wxuin'],

'Uin': "1440810436",

}

}

)

rep.encoding = 'utf-8'

init_user_dict = rep.json()

print(init_user_dict)

return render_template('index.html', init_user_dict=init_user_dict)

if __name__ == '__main__':

app.run()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask是一种轻量级的Python Web框架,能够方便地构建网页应用程序。要实现微信公众号码关注并登录网页功能,可以使用Flask结合微信开发接口进行实现。 首先,需要在微信公众平台上注册并创建一个公众号,并获取到相关的开发者ID和密钥。 接下来,搭建Flask应用程序,先安装Flask库,并导入相关的依赖库,如wechatpy和requests库等。 然后,创建一个Flask路由,用于接收微信服务器的验证请求和菜单跳转等请求。根据微信开发文档,编写逻辑代码,进行验证和处理微信服务器的各种请求。 在处理菜单跳转请求时,可以通过微信JS-SDK提供的功能,生成一个特定的二维码,用于用户关注公众号。二维码中包含一个唯一的标识码,用于识别用户和公众号之间的关系。 当用户描二维码关注公众号后,微信服务器会向事先设置的回调URL发送消息通知。在Flask应用程序中,可以通过编写对应的路由来处理该通知,获取到用户的唯一标识码。然后,可以将该标识码与用户相关的信息存储到数据库中,以便后续使用。 最后,通过编写相关的路由和模板,实现用户登录网页功能。当用户点击网页中的登录按钮时,可以跳转到微信授权登录页面。用户授权后,微信会将用户的唯一标识码和相关信息返回到事先设置的回调URL。在Flask应用程序中,处理该回调URL的路由中,可以获取到用户的标识码,从数据库中获取用户信息,并进行登录操作。 综上所述,通过使用Flask框架结合微信开发接口,可以实现微信公众号码关注并登录网页功能。这样的实现方式能够方便地与微信公众号进行交互,并提供给用户一个方便、安全的登录方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值