咱們先那測試環境試一下 和真實環境幾乎無差異(微信公衆開發平臺)html
測試環境: 前端
import json import requests # 其實就比如咱們的cookie同樣 須要給你關注的用戶一個token # 1. 僞造瀏覽器向 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential... 發送GET請求,並獲取token r1 = requests.get( url = "https://api.weixin.qq.com/cgi-bin/token", params = { "grant_type": "client_credential", "appid":"wxe022764ef61336e9", #這個是你的信息 "secret": "29def1418cdd8c8317fd5ad39a127890" #也oypXF000rxnm9-5PTTaVM851sXL4是捏信息 }, ) access_token = r1.json().get('access_token') print(access_token) wx_id = "oypXF000rxnm9-5PTTaVM851sXL4" # 這個是關注你的微信的別人的id body = { "touser": wx_id, "msgtype": "text", "text": { "content": '老王' # 這個是你要給別人發送的信息 } } r2 = requests.post( url="https://api.weixin.qq.com/cgi-bin/message/custom/send", params ={ 'access_token': access_token, }, data=bytes(json.dumps(body, ensure_ascii=False), encoding='utf-8') ) print(r2.text)
若是要發模板信息就要先去開發平臺增長模板內容jquery
r1 = requests.get( url = "https://api.weixin.qq.com/cgi-bin/token", params = { "grant_type": "client_credential", "appid":"wxe022764ef61336e9", "secret":"29def1418cdd8c8317fd5ad39a127890" } ) access_token = r1.json().get('access_token') wx_id = "oypXF000rxnm9-5PTTaVM851sXL4" body = { "touser": wx_id, "template_id": 'dD0dm09eqDra4TlbFjXiPlO5fb00Fjz0IL_cyprIkJM', # 這個是你的在微信開發平臺設置的模板id "data": { "user": { "value": "老王", # 這個是拼接的內容 能夠給你的模板中憑藉內容 "color": "#173177" # 顏色 } } } r2 = requests.post( url="https://api.weixin.qq.com/cgi-bin/message/template/send", params={ 'access_token': access_token }, data=json.dumps(body) ) print(r2.text)
咱們來寫一個微信能夠推送信息的界面ajax
views:數據庫
from django.shortcuts import render,redirect,HttpResponse from django.http import JsonResponse,HttpResponse # Create your views here. from first import models def login(request): ''' 用戶登錄界面 :param request: :return: ''' if request.method == "GET": return render(request,"login.html") user = request.POST.get("user") pwd = request.POST.get("pwd") obj = models.UserInfo.objects.filter(name = user,pwd =pwd).first() # 獲取這個用戶對象 if obj: request.session["user_info"] = {"id":obj.id,"name":obj.name} # 設置session 能夠全局取到 return redirect("/index/") # 存在就設置值而後就重新定向到 index界面 return render(request,"login.html",{"msg":"用戶名或密碼錯誤"}) def index(request): current_user_id = request.session["user_info"]["id"] # 取到全局的 session值 return render(request,"index.html") def get_grcode(request): ''' 生成第二個圖片的 :param request: :return: ''' ret = {"status":True,"data":None} access_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={ redirect_uri}&response_type=code&scope=snsapi_userinfo&state={state}#wechat_redirect" # 把你的信息拼接進去 url = access_url.format( appid = "wxe022764ef61336e9", redirect_uri="", # 這個是重定向的ip state=request.session['user_info']['id'] # 用戶id ) ret["data"] = url return JsonResponse(ret) def get_wx_id(request): ''' 獲取微信id 而且跟新到數據庫 :param request: :return: ''' import requests # 能夠模仿http請求 code = request.GET.get("code") state = request.GET.get("state") #獲取用戶openID(用戶惟一) r1 = requests.get( url="https://api.weixin.qq.com/sns/oauth2/access_token", # 固定IP params = { "appid":"wxe022764ef61336e9", # 你的 測試帳號的id "secret":"29def1418cdd8c8317fd5ad39a127890", # 你的測試帳帳號的信息 "code": code, "grant_type": 'authorization_code', } ).json() # 獲取的到openid表示用戶受權成功 wx_id = r1.get("openid") user = models.UserInfo.objects.filter(id = state).first() if not user.wx_id: user.wx_id = wx_id user.save() return HttpResponse('受權成功') def test(request): user_list = models.UserInfo.objects.all() return render(request, 'test.html', {'user_list': user_list}) def send_msg(request): """ 發送消息 :param request: :return: """ id = request.session['user_info']['id'] obj = models.UserInfo.objects.filter(id=id).first() import json import requests # 1. 僞造瀏覽器向 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential... 發送GET請求,並獲取token r1 = requests.get( url="https://api.weixin.qq.com/cgi-bin/token", params={ "grant_type": "client_credential", "appid": 'wxe022764ef61336e9', "secret": '29def1418cdd8c8317fd5ad39a127890', } ) access_token = r1.json().get('access_token') body = { "touser": obj.wx_id, "template_id": '5t4MreDNs1Ns6reAz3U-fbjNRzXQjPpjkC10z-GyngI', # 你的模板的id "data": { "user": { "value": "asdfasdfadfasd", "color": "#173177" } } } r2 = requests.post( url="https://api.weixin.qq.com/cgi-bin/message/template/send", params={ 'access_token': access_token }, data=json.dumps(body) ) print(r2.text) return HttpResponse('發送成功')
models:django
from django.db import models # Create your models here. class UserInfo(models.Model): name = models.CharField(max_length = 32) pwd = models.CharField(max_length=64) wx_id = models.CharField(max_length=32,null = True, blank = True)
前端界面:json
login:api
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="post"> {% csrf_token %} <input type="text" name="user"> <input type="text" name="pwd"> <input type="submit" value="提交">{{ msg }} </form> </body> </html>
index:瀏覽器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {# #} <h1>歡迎{{ request.session.user_info.name }}使用大保健2.0</h1> {#從全局中取值 #} <h3> 掃描關注近期大保健優惠信息(必須關注才能看到近期的姑娘)</h3> <img style="width:200px" src="/static/img/0.jpg" alt=""> <h3>下一步請將您的微信ID發給我</h3> <div id = "qrcode" style="width: 250px;height: 250px;background-color: white;"> </div> <script src="/static/js/jquery.min.js"></script> <script src="/static/js/jquery.qrcode.min.js"></script> <script src="/static/js/qrcode.js"></script> <script> $(function(){ get_qcode(); }) function get_qcode() { $.ajax({ url:'/get_qrcode/', type:'GET', dataType:'JSON', success:function (arg) { //arg = {status:True,data:'xxx'} $('#qrcode').empty().qrcode({text: arg.data}); } }) } </script> </body> </html>
test:微信
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for item in user_list %} <li>{{ item.name }} {{ item.wx_id }} <a href="/send_msg/">發送消息</a></li> {% endfor %} </ul> </body> </html>
urls:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^login/', views.login), url(r'^get_qrcode/', views.get_qrcode), url(r'^get_wx_id/', views.get_wx_id), url(r'^test/', views.test), ]