亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python版實現微信公眾號掃碼登陸

瀏覽:2日期:2022-07-24 09:52:11

基于python 實現公眾掃碼登陸

前提 申請公眾號服務,配置相關信息,并在相關平臺進行配置,就這么多東西

Python版實現微信公眾號掃碼登陸

實現邏輯,使用臨時臨時二維碼,帶參數的二維碼掃碼登陸

流程,用戶已經掃碼關注,在登陸頁面直接掃碼登陸,

用戶未關注,則需要點擊關注后,直接登錄,

我們使用帶參數的場景值來區別是哪個用戶進行掃碼登陸

場景值用戶可以自定義,但是必須是唯一的,我用的時間戳

我現在要做的功能,有賬戶綁定需求,并且是前后端分離的情況下,

流程1

當用戶已經關注過,并且綁定賬號,直接掃碼登陸,當用戶已經關注過,未綁定,需要掃碼后,跳轉到綁定手機號頁面,綁定后,進行登錄,當用戶取消關注,相當于解綁,進行掃碼后,重新到綁定頁面,進行掃碼登陸,當然也要,對綁定已經綁定過的手機號驚醒判斷。

代碼如下

接口1 帶參數的場景值生成的二維碼

def get_wxcode(request): ''' 公眾號掃碼登陸 獲取帶參數二維碼 參數: 返回值: { 'formError': {}, 'delta_time': 951, 'errorCode': 0, 'params': { 'scene_id': '512' }, 'message': '', 'data': { 'url': 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQEi8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyUFNnZ2RNRlU5Y1QxWkJqZDF1Y1QAAgTlmMReAwSAOgkA', 'sceneid': '2500', # 唯一掃碼場景值,用來判斷哪個用戶進行掃碼登陸 'type': 'get' } } ''' try: scene_id = str(int((time.time()))) access_token = get_access_token() if access_token: user_info_url = u’https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=’ + access_token params = {’expire_seconds’: 604800,’action_name’: ’QR_STR_SCENE’,’action_info’: {'scene': {'scene_str': scene_id}}, } params = json.dumps(params) userinfo = requests.post(user_info_url, data=params).json() ticket = userinfo[’ticket’] # except: # raise FieldError('ticket', 'ticket獲取異常') data = {'type': ’get’,’url’: ’https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=’ + ticket,’sceneid’:scene_id } return data else: raise FieldError('微信', '微信公共號正在維護中,給你帶來的不便,敬請原諒') except: raise FieldError('微信', '微信公共號正在維護中,給你帶來的不便,敬請原諒')

接口返回有url 和sceneid URL直接就是一個二維碼,前端可以直接拿來展示,sceneid 是返回前端,讓前端進行保存,來進行判斷用戶是否掃碼,因為 微信服務,目前不支持sessionid 的緩存,所以需要我們自行緩存,我使用的將場景值存入redis

2 前端展示出來二維后,用戶開始掃碼,點擊關注后,微信服務就用戶信息,回調給我們在微信公眾填的服務器地址,如圖片

Python版實現微信公眾號掃碼登陸

現在我們開始寫回調地址的代碼:

微信關注,類型是事件 來發送,具體類型看文檔

1 先通過于微信通信驗證,是get 請求

Python版實現微信公眾號掃碼登陸

獲取用戶信息是post 請求

event 屬于關注事件

Python版實現微信公眾號掃碼登陸

Python版實現微信公眾號掃碼登陸

我們可以access_token 獲取用戶信息,將用戶信息保存,并將 場景值 eventkey 存入Redis 我設置的過期時間為1個小時致此微信回調結束,3接口2 ,開始判斷用戶是否進行掃碼關注,我們需要前端給后端傳一個場景值,我們通過從redis 的場景值來獲取存入數據的用戶信息,如果已經存入,則用戶掃碼成功,直接登錄,用戶的openid 是唯一的

如果用戶信息,獲取,則用戶并沒有進行掃碼,這個獲取狀態的接口,需要一輪詢的方式進行查看 可以5s 進行一次

def get_public_wx_status(request): ’’’ 參數 scene_id 場景值 必傳 判斷是哪個用戶 掃碼 輪詢查看 公眾號 是否掃碼關注,掃碼關注是否綁定手機號 :param request: :return: { 'formError': {}, 'delta_time': 713, 'errorCode': 0, 'params': {}, 'message': '', 'data': { 'focus_state': 1, # 微信關注的狀態 1 已掃碼關注 0 未關注 'state': 0 # 關注后,是否綁定手機號 0 未綁定 1 已綁定,直接登錄 } } ’’’ post_info = request.POST scene_id = post_info.get('scene_id', ’’) if not scene_id: raise FieldError(’scene_id’,’scene_id不能為空’) openid = redis_conn.get(scene_id) if openid == None: return {’focus_state’: 0} else: uid = redis_conn.get(str(openid)) if uid == None: return {’focus_state’:0} else: user = UserWxInfo.objects.get(openid=openid) if user.focus_state == 1:state = 1_ = User.objects.get(uid=user.uid)request.apisession['uid'] = user.uidrequest.apisession['pwd_updatetime'] = _.pwd_updatetimeip = ’’if request.META.has_key(’HTTP_X_FORWARD_FOR’): ip = request.META[’HTTP_X_FORWARD_FOR’]else: ip = request.META[’REMOTE_ADDR’]UserLoginLog(uid=user.uid, ip=ip).save() else:state = 0 return {’focus_state’:1,’state’:state }

到此這篇關于Python版實現微信公眾號掃碼登陸的文章就介紹到這了,更多相關Python公眾號掃碼登陸內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 微信 Python
相關文章:
主站蜘蛛池模板: 日产一一到六区麻豆 | 一级片aaaa| 国产xxwwxxww视频 | 黑人操中国美女 | 轻轻操在线播放 | 亚洲无线观看 | 久久成人免费大片 | 亚洲大尺度在线 | 久久国产经典视频 | 国产精品成久久久久三级 | 91在线高清 | 一级日韩一级欧美 | 国产91短视频| 九九精品视频在线免费观看 | 黄站无毒不卡秒播网站免费观看 | 欧美一区中文字幕 | 99精品免费在线 | 亚洲欧美一区二区久久香蕉 | 黄a视频| 色综合久久久久综合99 | 污视频在线观看网址 | 黄网站在线播放视频免费观看 | 国产精品亚洲欧美日韩一区在线 | 2021久久精品国产99国产精品 | 婷婷久久激情综合啪啪 | 国产肥老妇视频69 | 中国女与老外在线精品 | 国产视频第二页 | 免费日本黄色网址 | 美女被拍拍拍拍拍拍拍拍 | 黑人和黑人激情一级毛片 | 色天天综合色天天害人害己 | 日本一级特级毛片视频 | 成人亲子乱子伦视频 | 久久成人免费 | 欧美一级毛片不卡免费观看 | 911亚洲精品 | 美女视频一区二区三区在线 | 亚洲精品国产第一区第二区国 | 中文字幕曰韩一区二区不卡 | 国产在线91区精品 |