qhfl-9 微信模板消息推送
开发中用的是测试号
微信公众号认证流程
用户登陆
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="/login/" method="post">{% csrf_token %}<input type="text" name="user" placeholder="用户名"><input type="password" name="pwd" placeholder="密码"><input type="submit" value="登录"></form>
</body>
</html>
login.html
{% load staticfiles %}<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div style="width: 600px;margin: 0 auto"><h1>请关注路飞学城服务号,并绑定个人用户(用于以后的消息提醒)</h1><div><h3>第一步:关注路飞学城微信服务号</h3><img style="height: 100px;width: 100px" src="{% static "img/wx.png" %}"></div><input type="button" value="下一步【获取绑定二维码】" onclick="getBindUserQcode()"><div><h3>第二步:绑定个人账户</h3><div id="qrcode" style="width: 250px;height: 250px;background-color: white;margin: 100px auto;"></div></div>
</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 getBindUserQcode() {$.ajax({url: '/bind_qcode/',type: 'GET',success: function (result) {console.log(result);$('#qrcode').empty().qrcode({text: result.data});}});}
</script></body>
</html>
登陆成功后跳转到页面
关注公众号的
然后绑定权限
模板信息的新建
用户登录,
关注公众号,刷二维码或点击链接(向微信服务器说授予某公众号应用权限),微信服务器再通过二维码里面回调url(绑定时里面链接或二维码的重定向url),通知开发服务器,我们在通过微信服务区通知我们的url里面的code,请求获取用户的openid(即权限id)然后保存到数据库。
import json
import functools
import requests
from django.conf import settings
from django.shortcuts import render, redirect, HttpResponse
from django.http import JsonResponse
from app01 import models
# 沙箱环境地质:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/logindef auth(func):@functools.wraps(func)def inner(request, *args, **kwargs):user_info = request.session.get('user_info')if not user_info:return redirect('/login/')return func(request, *args, **kwargs)return innerdef login(request):"""用户登录:param request::return:"""# models.UserInfo.objects.create(username='wen',password=123)if request.method == "POST":user = request.POST.get('user')pwd = request.POST.get('pwd')obj = models.UserInfo.objects.filter(username=user, password=pwd).first()if obj:request.session['user_info'] = {'id': obj.id, 'name': obj.username, 'uid': obj.uid}return redirect('/bind/')else:return render(request, 'login.html')@auth
def bind(request):"""用户登录后,关注公众号,并绑定个人微信(用于以后消息推送):param request::return:"""return render(request, 'bind.html')@auth
def bind_qcode(request):"""生成二维码 用户点击或扫描用于向微信服务器发送绑定某个微信公众号的请求(用户到微信服务器的公众号处报到)链接里面会含有重定向的url,和从微信请求携带的code(用于重定向的url再次向微信服务器请求用户openid):param request::return:"""ret = {'code': 1000}try: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 "access_url = access_url.format(appid=settings.WECHAT_CONFIG["app_id"],redirect_uri=settings.WECHAT_CONFIG["redirect_uri"],state=request.session['user_info']['uid'])ret['data'] = access_urlexcept Exception as e:ret['code'] = 1001ret['msg'] = str(e)return JsonResponse(ret)def callback(request):"""用户在手机微信上扫码后,微信自动调用该方法。 二维码中含有重定向的url,用于获取扫码用户的唯一ID,以后用于给他推送消息。:param request::return:"""code = request.GET.get("code") #像微信服务器要的code# 用户UIDstate = request.GET.get("state")# 获取该用户openId(用户唯一,用于给用户发送消息)res = requests.get(url="https://api.weixin.qq.com/sns/oauth2/access_token",params={"appid": settings.WECHAT_CONFIG["app_id"],"secret": settings.WECHAT_CONFIG["appsecret"],"code": code,"grant_type": 'authorization_code',}).json()# 获取的到openid表示用户授权成功openid = res.get("openid")print("get ",openid)if openid:models.UserInfo.objects.filter(uid=state).update(wx_id=openid)response = "<h1>授权成功 %s </h1>" % openidelse:response = "<h1>用户扫码之后,手机上的提示</h1>"return HttpResponse(response)def sendmsg(request):def get_access_token():"""获取微信全局接口的凭证(默认有效期俩个小时)如果不每天请求次数过多, 通过设置缓存即可"""result = requests.get(url="https://api.weixin.qq.com/cgi-bin/token",params={"grant_type": "client_credential","appid": settings.WECHAT_CONFIG['app_id'],"secret": settings.WECHAT_CONFIG['appsecret'],}).json()if result.get("access_token"):access_token = result.get('access_token')else:access_token = Nonereturn access_tokenaccess_token = get_access_token()print("---------",request.POST)# user_id = request.get()openid = models.UserInfo.objects.get(id=2).wx_id #获取用户id,而不是直接填一个数print("send msg",openid)# def send_custom_msg():# body = {# "touser": openid,# "msgtype": "text",# "text": {# "content": '要发送的内容...'# }# }# response = 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')# )# # 这里可根据回执code进行判定是否发送成功(也可以根据code根据错误信息)# result = response.json()# return resultdef send_template_msg():"""发送模版消息"""res = requests.post(url="https://api.weixin.qq.com/cgi-bin/message/template/send",params={'access_token': access_token},json={"touser": openid,"template_id": settings.WECHAT_CONFIG['template_id'],"data": {"key": {"DATA": "lalal","color": "#173177"},"value": {"DATA": "关注本公众号","color": "#173177"},}})result = res.json()return resultresult = send_template_msg()print(result)if result.get('errcode') == 0:return HttpResponse('发送成功')return HttpResponse('发送失败')
视图逻辑
qhfl-9 微信模板消息推送相关推荐
- php 异步请求微信模板消息_php实现微信模板消息推送
本文实例为大家分享了php微信模板消息推送的具体代码,供大家参考,具体内容如下 1.微信公众号模板消息配置 2.PHP代码/*** 发送模板消息*/ public function send_noti ...
- springboot实现微信模板消息推送
springboot实现微信模板消息推送 在上一篇文章我们已经知道了怎么获取openid 还不知道的可以查看我的上一篇文章springboot+微信小程序用codeid换取openid 这次我们不光要 ...
- java 微信模板_java开发微信模板消息推送
概述 微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添 ...
- PHP之 微信模板消息推送 的相关代码
温馨提示: 微信模板消息推送,得先去微信端,设置模板配置,会生成相应的消息模板id,这个是一串字符,需连同参数数据,传给微信端,切记!~ 第一部分:主体部分代码,负责业务模块,准备微信端所需参数 /* ...
- java开发微信模板消息推送
完整demo下载 概述 微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公 ...
- 微信模板消息推送(内附工具类代码)
文章目录 前言 一.添加模板消息 1.进入微信公众号后台 2.模板消息 3.填写信息 4.审核通过后 二.开发步骤 1.依赖坐标 2.实体类 1)AccessToken 2.WxTemplate模板消 ...
- Java实现微信模板消息推送
模板消息推送功能仅限于微信服务号才行. 1.准备:微信公众号 appId,app密钥(这俩没啥好说的,都知道在哪拿). 模板Id,添加之后就能看到,如果没有合适的模板可以自定义模板(需要审核7-15天 ...
- 微信模板消息推送接口说明
微信服务号可以给关注此号码的粉丝推送消息.消息分为三种: 1.群发消息:给所有关注此微信的人同时发送,但每个月的发送次数有限制. 2.向单个粉丝发送消息:此种功能发送次数没有限制,但是接受消息的粉丝必 ...
- 微信模板消息推送心得
我使用amp的软件,上百度找到相关的代码,复制,保存到php文件上,然后,打开浏览器,查看效果.遇到下面的问题 1.网页打不开,提示连接已重置. 后来发现,原来在apache下的logs文件夹内的er ...
最新文章
- MXNet动手学深度学习笔记:卷积计算
- 写给我的2015—开启工作新旅程
- HTML DOM Table 对象
- 根据各工序时间画aoe网_曲靖被动防护网RXI150被动网厂家
- 产品的三层境界:工具-平台-生态
- idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...
- bzoj1222: [HNOI2001]产品加工
- 【Python】strip()方法
- 花书+吴恩达深度学习(四)多分类 softmax
- 汽车燃料效率分析实例
- 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm
- jsp+servlet实现最基本的注册登陆功能
- 极大似然估计学习笔记
- web第三课html课堂笔记
- GAMIT新版本10.71发布了
- matlab命令窗口中常用快捷键命令(一)
- 基于CentOS7.2的服务器搭建教程《一》
- IDEA+MySQL+JavaFX之通讯录系统
- python如何从文本中提取数据_如何从文本文件中提取数据?
- SPICE二极管直流分析原理
热门文章
- 各层作用_土工布有什么作用呢?
- 计算机知识和技能,计算机基本知识和技能PPT课件.ppt
- Premiere Pro CC2017教程(三)
- Exception in thread main java.io.IOException: (null) entry in command string: null chmod 0700 E:\t
- 大公司病,真 TM 形象
- 深度学习模型大合集:GitHub趋势榜第一,两天斩获2000星
- 走在前沿的弄潮儿,怎能不会Git的那些奇技淫巧
- 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
- 浅谈 Python 中的多线程。
- oracle分页查询前10条,Oracle查询前十条记录及分页查询(第5条到第10记录)