這篇文章主要介紹了python如何實現(xiàn)微信小程序用戶登錄、模板推送,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
站在用戶的角度思考問題,與客戶深入溝通,找到天臺網(wǎng)站設(shè)計與天臺網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋天臺地區(qū)。Python 實現(xiàn)微信小程序的用戶登錄
小程序可以通過官方提供的登錄鄧麗來獲取用戶身份的標(biāo)示, 具體文檔可以參考 官方文檔, 通過流程時序可以看到, 對于需要和前端配合的服務(wù)端開發(fā), 主要實現(xiàn)的就是通過小程序提供的 code 換取用戶的 openid 和 session_key, 并用換取到的 openid 和 secret_key 作為自定義的登錄態(tài). 分析后得知, 作為小程序后端的開發(fā), 主要實現(xiàn)以下幾部分內(nèi)容:
提供一個 HTTP 接口, 供小程序方使用, 傳遞code;
換取用戶身份標(biāo)識;
維護一個自定義的登錄態(tài);
需要存儲用戶的 openid , 以備后續(xù)使用.
1.提供給小程序一個 HTTP 接口, 接口而使用 Tornado 框架
簡化闡述, 代碼沒有做異常處理
class LoginHandler(RequestHandler): def post(self): req_data = json.loads(self.request.body) js_code = req_data.get('js_code') # 開始換取用戶的信息 user_info = get_user_info(js_code=js_code) openid = user_info['openid'] session_key = user_info['session_key'] user_uuid = str(uuid.uuid4()) # 暴露給小程序端的用戶標(biāo)示 # 用來維護用戶的登錄態(tài) User.save_user_session( user_uuid=user_uuid, openid=openid, session_key=session_key ) # 微信小程序不能設(shè)置cookie, 把用戶信心存在了headers中 self.set_header('Authorization', user_uuid) # 存儲用戶信息 User.save_user_info(open_id=openid) self.set_status(204)
2.換取用戶身份標(biāo)示, 直接使用 Requests包 請求微信的相關(guān)接口, 獲取數(shù)據(jù)
def get_user_info(js_code): req_params = { "appid": 'app_id', # 小程序ID "secret": 'secret', # 小程序 secret "js_code": js_code, "grant_type": 'authorization_code' } req_resutl = requests.get('https://api.weixin.qq.com/sns/jscode2session', params=req_params, timeout=3, verify=False) return req_result.json()
3.維護一個自定義的登錄態(tài), 使用 Redis
user_redis = StrictRedis.from_url('redis//localhost:6379') class User(object): REDIS_EXPIRES = 7 * 24 * 60 * 60 @classmethod def save_user_session(cls, user_uuid, openid, session_key): user_session_value = { 'openid':openid, 'session_key':session_key } user_session_key = 'US:' + user_uuid with user_redis.pipeline(transaction=False) as pipe: pipe.hmset(user_session_key, user_session_value) pipe.expire(user_session_key, cls.REDIS_EXPIRES) pipe.execute()
4.存儲用戶信息, 以備后用, ORM使用 SQLAlchemy
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base # mysql 相關(guān)設(shè)置 engine = create_engine('mysql://root:pwd@localhost/wechat') conn = engine.connect() Base = declarative_base() Base.metadata.reflect(engine) tables = Base.metadata.tables class User(object): table = tables['user'] @classmethod def save_user_info(cls, open_id): # 存儲用戶信心 sql = cls.table.insert().values(open_id=open_id) conn.execute(sql)
SQL 語句
CREATE TABLE `user`( `id` int(20) unsigned NOT NULL AUTO_INCREMENT, `open_id` varchar(32) NOT NULL COMMENT '用戶 open_id', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`), KEY `idx_oid` (`open_id`) ) ENGINE=InnoDB default CHARSET=utf8mb4;
Template: 通過代碼發(fā)送微信模板消息
import json import requests from redis import StrictRedis from tornado.web import RequestHandler redis = StrictRedis.from_url('redis//localhost:6379') def get_access_token(): payload = { 'grant_type': 'client_credential', 'appid': 'appid', 'secret': 'secret' } req = requests.get('https://api.weixin.qq.com/cgi-bin/token', params=payload, timeout=3, verify=False) access_token = req.json().get('access_token') redis.set('ACCESS_TOKEN', access_token) class FormHandler(RequestHandler): def post(self): req_data = self.request.body req_data = json.loads(req_data) form_id = req_data.get('from_id') remplate_push(form_id) # 使用消息進行模板推送 def template_push(form_id): data = { "touser": 'open_id', "template_id": 'template_id', "page": 'pages/index/index', "form_id": form_id, "data":{ "keyword1":{ "value": "value" } } "emphasis_keyword": '' } access_token = redis.get('ACCESS_TOKEN') push_url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={}'.format(access_token) requests.post(push_url, json=data, timeout=3, verify=False)
感謝你能夠認真閱讀完這篇文章,希望小編分享的“python如何實現(xiàn)微信小程序用戶登錄、模板推送”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
名稱欄目:python如何實現(xiàn)微信小程序用戶登錄、模板推送-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://www.muchs.cn/article39/dppdph.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)站收錄、網(wǎng)站設(shè)計、靜態(tài)網(wǎng)站、網(wǎng)站制作、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容