国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸

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

基于python 實(shí)現(xiàn)公眾掃碼登陸

前提 申請(qǐng)公眾號(hào)服務(wù),配置相關(guān)信息,并在相關(guān)平臺(tái)進(jìn)行配置,就這么多東西

Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸

實(shí)現(xiàn)邏輯,使用臨時(shí)臨時(shí)二維碼,帶參數(shù)的二維碼掃碼登陸

流程,用戶已經(jīng)掃碼關(guān)注,在登陸頁(yè)面直接掃碼登陸,

用戶未關(guān)注,則需要點(diǎn)擊關(guān)注后,直接登錄,

我們使用帶參數(shù)的場(chǎng)景值來(lái)區(qū)別是哪個(gè)用戶進(jìn)行掃碼登陸

場(chǎng)景值用戶可以自定義,但是必須是唯一的,我用的時(shí)間戳

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

流程1

當(dāng)用戶已經(jīng)關(guān)注過(guò),并且綁定賬號(hào),直接掃碼登陸,當(dāng)用戶已經(jīng)關(guān)注過(guò),未綁定,需要掃碼后,跳轉(zhuǎn)到綁定手機(jī)號(hào)頁(yè)面,綁定后,進(jìn)行登錄,當(dāng)用戶取消關(guān)注,相當(dāng)于解綁,進(jìn)行掃碼后,重新到綁定頁(yè)面,進(jìn)行掃碼登陸,當(dāng)然也要,對(duì)綁定已經(jīng)綁定過(guò)的手機(jī)號(hào)驚醒判斷。

代碼如下

接口1 帶參數(shù)的場(chǎng)景值生成的二維碼

def get_wxcode(request): ''' 公眾號(hào)掃碼登陸 獲取帶參數(shù)二維碼 參數(shù): 返回值: { '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', # 唯一掃碼場(chǎng)景值,用來(lái)判斷哪個(gè)用戶進(jìn)行掃碼登陸 '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('微信', '微信公共號(hào)正在維護(hù)中,給你帶來(lái)的不便,敬請(qǐng)?jiān)?) except: raise FieldError('微信', '微信公共號(hào)正在維護(hù)中,給你帶來(lái)的不便,敬請(qǐng)?jiān)?)

接口返回有url 和sceneid URL直接就是一個(gè)二維碼,前端可以直接拿來(lái)展示,sceneid 是返回前端,讓前端進(jìn)行保存,來(lái)進(jìn)行判斷用戶是否掃碼,因?yàn)?微信服務(wù),目前不支持sessionid 的緩存,所以需要我們自行緩存,我使用的將場(chǎng)景值存入redis

2 前端展示出來(lái)二維后,用戶開始掃碼,點(diǎn)擊關(guān)注后,微信服務(wù)就用戶信息,回調(diào)給我們?cè)谖⑿殴娞畹姆?wù)器地址,如圖片

Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸

現(xiàn)在我們開始寫回調(diào)地址的代碼:

微信關(guān)注,類型是事件 來(lái)發(fā)送,具體類型看文檔

1 先通過(guò)于微信通信驗(yàn)證,是get 請(qǐng)求

Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸

獲取用戶信息是post 請(qǐng)求

event 屬于關(guān)注事件

Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸

Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸

我們可以access_token 獲取用戶信息,將用戶信息保存,并將 場(chǎng)景值 eventkey 存入Redis 我設(shè)置的過(guò)期時(shí)間為1個(gè)小時(shí)致此微信回調(diào)結(jié)束,3接口2 ,開始判斷用戶是否進(jìn)行掃碼關(guān)注,我們需要前端給后端傳一個(gè)場(chǎng)景值,我們通過(guò)從redis 的場(chǎng)景值來(lái)獲取存入數(shù)據(jù)的用戶信息,如果已經(jīng)存入,則用戶掃碼成功,直接登錄,用戶的openid 是唯一的

如果用戶信息,獲取,則用戶并沒(méi)有進(jìn)行掃碼,這個(gè)獲取狀態(tài)的接口,需要一輪詢的方式進(jìn)行查看 可以5s 進(jìn)行一次

def get_public_wx_status(request): ’’’ 參數(shù) scene_id 場(chǎng)景值 必傳 判斷是哪個(gè)用戶 掃碼 輪詢查看 公眾號(hào) 是否掃碼關(guān)注,掃碼關(guān)注是否綁定手機(jī)號(hào) :param request: :return: { 'formError': {}, 'delta_time': 713, 'errorCode': 0, 'params': {}, 'message': '', 'data': { 'focus_state': 1, # 微信關(guān)注的狀態(tài) 1 已掃碼關(guān)注 0 未關(guān)注 'state': 0 # 關(guān)注后,是否綁定手機(jī)號(hào) 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 }

到此這篇關(guān)于Python版實(shí)現(xiàn)微信公眾號(hào)掃碼登陸的文章就介紹到這了,更多相關(guān)Python公眾號(hào)掃碼登陸內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: 微信 Python
相關(guān)文章:
主站蜘蛛池模板: 视频二区在线观看 | 国产在线播放成人免费 | 久操免费在线视频 | a级片在线免费播放 | 香港三级日本三级人妇三级四 | 欧美人成一本免费观看视频 | 国产亚洲人成网站在线观看 | 国产一区在线观看免费 | 欧美日韩国产在线观看一区二区三区 | 国产欧美日韩综合精品一区二区 | 国产91久久精品一区二区 | 欧美一级毛片免费播放器 | 成人69 | 看中国一级毛片 | 国内自拍网站 | 最新国产毛片 | 国产在线欧美精品 | 国产精品18久久久久久vr | 久久一日本道色综合久 | 欧美一级久久久久久久大片 | 女人扒开腿让男人捅啪啪 | 欧美xxxxxxxx | 最新欧美精品一区二区三区 | 欧美一级黄视频 | 国产成人精品视频播放 | 久久久久久中文字幕 | 日本午夜高清视频 | 亚洲精品99久久久久中文字幕 | 亚洲欧美国产日韩天堂在线视 | 久久99精品视频在线在线观看 | 欧美在线视频 一区二区 | 天天五月天丁香婷婷深爱综合 | 女人18毛片a级毛片 女人aaaaa片一级一毛片 | 三级a毛片| 老司机久久影院 | 国产在线观看网址你懂得 | 午夜在线成人 | 欧美亚洲一区二区三区四 | 亚洲日本视频在线 | 国产精品久久久久久久专区 | 久青草免费视频手机在线观看 |