人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

python代碼實現(xiàn)掃碼關(guān)注公眾號登錄的實戰(zhàn)

發(fā)布日期:2021-12-16 18:22 | 文章來源:源碼之家

大致思路:調(diào)用微信帶參數(shù)二維碼接口生成二維碼,前端顯示二維碼同時于服務(wù)器進行長鏈接通信,監(jiān)控關(guān)注狀態(tài),如果有對應(yīng)的場景碼參數(shù)的關(guān)注,則進行登錄操作。

下面是服務(wù)示意圖

主要代碼實現(xiàn):

獲取二維碼部分

1.取access_token

app_id = 'xxxx'
app_secret = 'xxxxxx'
url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}'.format(app_id, app_secret)
resp = requests.get(url)
rs = util.get_redis_con()
access_token = resp.json()['access_token']
print(access_token)

這個access_token的有效期是兩小時,所以建議寫個定時任務(wù),每一小時執(zhí)行一下,存到redis,用的時候redis取一下。

2.取ticket

my_scene_str = 'xxxxx'  # 場景碼可以做個key放到redis里并設(shè)置一個和二維碼一樣的過期時間 
url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}'.format(access_token)
data = {
  "expire_seconds": 604800,
  "action_name": "QR_STR_SCENE",
  "action_info": {"scene": {"scene_str": md5_user_key}}
}
resp = requests.post(url, json=data)
ticket = resp.json()['ticket']

3.取二維碼圖片(這里返回圖片的同時把場景碼也一并返回給前端,這樣如果前端用輪詢獲取關(guān)注狀態(tài)的話就可以不使用長鏈接了)

url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' + ticket
resp = requests.get(url)
img = base64.b64encode(resp.content).decode('ascii')
print(img)

這個里取到的圖片用base64返回給前端,前端使用src="data:image/png;base64,"+img 就可以顯示了

獲取關(guān)注狀態(tài)值

方法一:使用場景碼輪詢
發(fā)送請求輪詢md5_user_key
方法二:使用場景碼建立長鏈接連接,等待服務(wù)器推送
flask建議使用socketio

解析微信服務(wù)器報文

新關(guān)注用戶掃碼報文內(nèi)容

<xml>
<ToUserName><![CDATA[xxxxxxxxxxxxx]]></ToUserName>
<FromUserName><![CDATA[xxxxxxxxxxx]]></FromUserName>
<CreateTime>1609128953</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[xxxxxx]]></EventKey>
<Ticket><![CDATA[xxxxxxxx]]></Ticket>
</xml>

老用戶掃碼報文內(nèi)容

<xml>
<ToUserName><![CDATA[xxxxxxxxxxxx]]></ToUserName>
<FromUserName><![CDATA[xxxxxxxxxxxxx]]></FromUserName>
<CreateTime>1609127524</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[xxxxxxxxxxxxxx]]></EventKey>
<Ticket><![CDATA[xxxxxxxxxxxxxxxxxxx]]></Ticket>
</xml>

ToUserName:公眾號的id
FromUserName:用戶的openid

import xml.etree.ElementTree as ET
root = ET.fromstring(request.data.decode('utf-8'))
dic = {}
for x in root:
 dic[x.tag] = x.text
if dic.get('MsgType') == 'event':
 if dic.get('Event') == 'subscribe':
  parse_subscribe(dic)  # 新關(guān)注用戶掃碼
 if dic.get('Event') == 'SCAN':
  parse_scan(dic)  # 已經(jīng)關(guān)注用戶掃碼

使用openid獲取關(guān)注的微信用戶信息

url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={access_token}&openid={open_id}&lang=zh_CN"
resp = requests.get(url.format(access_token=access_token, open_id=open_id))
resp.encoding = 'utf-8'
return resp.json()

返回參數(shù)

{'subscribe': 1, 
'openid': 'xxxxxxxxxxxxxxxxxxx', 
'nickname': 'xxx', 
'sex': 1, 
'language': 'zh_CN', 
'city': 'xx',
 'province': 'xx', 
 'country': 'xx', 
 'headimgurl': 'http://thirdwx.qlogo.cn/mmopen/xxxxxxxxxxxxxxxxxx/xxx', 
 'subscribe_time': 1609128953, 
 'unionid': 'xxxxxxxxxxxxxxxxx', 
 'remark': '', 
 'groupid': 0, 
 'tagid_list': [], 
 'subscribe_scene': 'ADD_SCENE_QR_CODE', 
 'qr_scene': 0, 
 'qr_scene_str': 'xxxxxxxxxxxxxxxxxxxx'}

到此這篇關(guān)于python代碼實現(xiàn)掃碼關(guān)注公眾號登錄的實戰(zhàn)的文章就介紹到這了,更多相關(guān)python 掃碼關(guān)注公眾號登錄內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部