最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年05月28日 11:36:11   作者:瓶瓶罐罐的  
這篇文章主要介紹了Python版實(shí)現(xiàn)微信公眾號掃碼登陸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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


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

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

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

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

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

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

流程1

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

代碼如下

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

def get_wxcode(request):
  """
  公眾號掃碼登陸
  獲取帶參數(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", # 唯一掃碼場景值,用來判斷哪個用戶進(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ù)中,給你帶來的不便,敬請?jiān)?)
  except:
    raise FieldError("微信", "微信公共號正在維護(hù)中,給你帶來的不便,敬請?jiān)?)

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

2 前端展示出來二維后,用戶開始掃碼,點(diǎn)擊關(guān)注后,微信服務(wù)就用戶信息,回調(diào)給我們在微信公眾填的服務(wù)器地址,如圖片


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

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

1 先通過于微信通信驗(yàn)證,是get 請求


獲取用戶信息是post 請求

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



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

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

def get_public_wx_status(request):
  '''
  參數(shù)
   scene_id 場景值   必傳   判斷是哪個用戶 掃碼
  輪詢查看 公眾號 是否掃碼關(guān)注,掃碼關(guān)注是否綁定手機(jī)號

  :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ī)號 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.uid
        request.apisession["pwd_updatetime"] = _.pwd_updatetime
        ip = ''
        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)微信公眾號掃碼登陸的文章就介紹到這了,更多相關(guān)Python公眾號掃碼登陸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript控制兩個列表框listbox左右交換數(shù)據(jù)的方法

    JavaScript控制兩個列表框listbox左右交換數(shù)據(jù)的方法

    這篇文章主要介紹了JavaScript控制兩個列表框listbox左右交換數(shù)據(jù)的方法,實(shí)例分析了javascript操作列表框listbox的技巧,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-03-03
  • js確認(rèn)框confirm()用法實(shí)例詳解

    js確認(rèn)框confirm()用法實(shí)例詳解

    這篇文章主要針對js確認(rèn)框confirm()用法進(jìn)行實(shí)例講解,介紹了javascript確認(rèn)框的三種使用方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JS與HTML結(jié)合實(shí)現(xiàn)流程進(jìn)度展示條思路詳解

    JS與HTML結(jié)合實(shí)現(xiàn)流程進(jìn)度展示條思路詳解

    基于js與html相結(jié)合實(shí)現(xiàn)的流程進(jìn)度展示條,非常實(shí)用,在各大網(wǎng)站都可以用到,下面小編給大家?guī)砹薐S與HTML結(jié)合實(shí)現(xiàn)流程進(jìn)度展示條思路詳解,需要的朋友參考下吧
    2017-09-09
  • BootStrap便簽頁的簡單應(yīng)用

    BootStrap便簽頁的簡單應(yīng)用

    本文通過實(shí)例代碼給大家簡單介紹了bootstrap便簽頁的簡單應(yīng)用,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • javascript框架設(shè)計之類工廠

    javascript框架設(shè)計之類工廠

    這篇文章主要介紹了javascript框架設(shè)計之類工廠的相關(guān)資料,非常淺顯易懂,有需要的小伙伴可以查看下。
    2015-06-06
  • js實(shí)現(xiàn)YouKu的漂亮搜索框效果

    js實(shí)現(xiàn)YouKu的漂亮搜索框效果

    這篇文章主要介紹了js實(shí)現(xiàn)YouKu的漂亮搜索框效果的方法,通過javascript結(jié)合鼠標(biāo)事件與頁面樣式實(shí)現(xiàn)漂亮的搜索框效果,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-08-08
  • 用javascript實(shí)現(xiàn)倒計時效果

    用javascript實(shí)現(xiàn)倒計時效果

    這篇文章主要為大家詳細(xì)介紹了用javascript實(shí)現(xiàn)倒計時效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • JavaScript中的事件與異常捕獲詳析

    JavaScript中的事件與異常捕獲詳析

    這篇文章主要給大家介紹了關(guān)于JavaScript中事件與異常捕獲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法

    防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 深入淺出理解JavaScript閉包的功能與用法

    深入淺出理解JavaScript閉包的功能與用法

    這篇文章主要介紹了深入淺出理解JavaScript閉包的功能與用法,結(jié)合實(shí)例形式從變量、函數(shù)的內(nèi)部屬性與作用域鏈分析了javascript閉包的相關(guān)概念、功能與使用技巧,需要的朋友可以參考下
    2018-08-08

最新評論

哈尔滨市| 墨江| 抚州市| 辽中县| 鹿泉市| 铜鼓县| 阳山县| 水城县| 马公市| 宣武区| 东光县| 潜山县| 三门县| 原阳县| 社旗县| 台前县| 忻城县| 枣阳市| 鄢陵县| 五大连池市| 密山市| 徐水县| 兰州市| 芦山县| 荥经县| 厦门市| 英吉沙县| 衡水市| 罗甸县| 宝坻区| 兴义市| 吉木乃县| 楚雄市| 绥中县| 深泽县| 青阳县| 昌乐县| 丹东市| 沙河市| 左云县| 扶绥县|