-
確定Django環境可以正常運行,環境搭建見:Linux 搭建Nginx+uwsgi+Django環境
-
安裝 wechatpy[cryptography]
sudo pip3 install wechatpy[cryptography]
-
修改settings.py
-
接入微信公眾號的連接去掉csrf驗證,詳情參考:解決Django+Vue前后端分離的跨域問題及關閉csrf驗證的后半部分
-
在settings.py 加入微信公眾號配置
AppID = '' AppSecret = '' Token = ''
-
-
接入
-
Django接入微信公眾號代碼
# wx.view代碼 from wechatpy.utils import check_signature from back import settings from wechatpy.exceptions import InvalidSignatureException from django.http import HttpResponse from wechatpy import parse_message, create_reply from wechatpy.replies import BaseReply from wechatpy import WeChatClient from wechatpy.oauth import WeChatOAuth from django.shortcuts import redirect import wx.wechat as wx_wechat # 連接微信公眾號的方法 def serve(request): # GET 方式用於微信公眾平台綁定驗證 if request.method == 'GET': signature = request.GET.get('signature', '') timestamp = request.GET.get('timestamp', '') nonce = request.GET.get('nonce', '') echo_str = request.GET.get('echostr', '') try: check_signature(settings.Token, signature, timestamp, nonce) except InvalidSignatureException: echo_str = '錯誤的請求' response = HttpResponse(echo_str) else: msg = parse_message(request.body) msg_dict = msg.__dict__['_data'] # print(msg.id, msg.source, msg.create_time, msg.type, msg.target, msg.time, msg.__dict__['_data']['Event'], '====') if msg.type == 'text': pass elif msg.type == 'event': if msg_dict['Event'] == 'subscribe': # 關注后 將獲取的用戶的信息保存到數據庫 wx_wechat.subscribe(getWxUserInfo(msg.source)) elif msg_dict['Event'] == 'unsubscribe': # 取關后,將用戶的關注狀態更改為 未關注 wx_wechat.unsubscribe(msg.source) else: pass response = HttpResponse('', content_type="application/xml") return response def getWxClient(): return WeChatClient(settings.AppID, settings.AppSecret) def getWxUserInfo(openid): wxClient = getWxClient() wxUserInfo = wxClient.user.get(openid) return wxUserInfo def getWeChatOAuth(redirect_url): return WeChatOAuth(settings.AppID, settings.AppSecret, redirect_url) # 定義授權裝飾器 def oauth(method): def warpper(request): if request.session.get('user_info', None) is None: code = request.GET.get('code', None) wechat_oauth = getWeChatOAuth(request.get_raw_uri()) url = wechat_oauth.authorize_url if code: try: wechat_oauth.fetch_access_token(code) user_info = wechat_oauth.get_user_info() except Exception as e: print(str(e)) # 這里需要處理請求里包含的 code 無效的情況 # abort(403) else: request.session['user_info'] = user_info else: return redirect(url) return method(request) return warpper @oauth def get_wx_user_info(request): user_info = request.session.get('user_info') return HttpResponse(str(user_info))
# wx.url代碼 from django.urls import path from . import views urlpatterns = [ path('wechat/', views.serve), path('user/info', views.get_wx_user_info) ]
這樣等后台配置完畢后,就可以通過訪問get_wx_user_info方法來獲取當前授權登錄的用戶的信息
-
微信后台設置
-
如需轉載請注明出處:https://www.cnblogs.com/zhuchenglin/p/10755547.html