开发中用的是测试号

微信公众号认证流程

用户登陆

<!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 微信模板消息推送相关推荐

  1. php 异步请求微信模板消息_php实现微信模板消息推送

    本文实例为大家分享了php微信模板消息推送的具体代码,供大家参考,具体内容如下 1.微信公众号模板消息配置 2.PHP代码/*** 发送模板消息*/ public function send_noti ...

  2. springboot实现微信模板消息推送

    springboot实现微信模板消息推送 在上一篇文章我们已经知道了怎么获取openid 还不知道的可以查看我的上一篇文章springboot+微信小程序用codeid换取openid 这次我们不光要 ...

  3. java 微信模板_java开发微信模板消息推送

    概述 微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添 ...

  4. PHP之 微信模板消息推送 的相关代码

    温馨提示: 微信模板消息推送,得先去微信端,设置模板配置,会生成相应的消息模板id,这个是一串字符,需连同参数数据,传给微信端,切记!~ 第一部分:主体部分代码,负责业务模块,准备微信端所需参数 /* ...

  5. java开发微信模板消息推送

    完整demo下载 概述 微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公 ...

  6. 微信模板消息推送(内附工具类代码)

    文章目录 前言 一.添加模板消息 1.进入微信公众号后台 2.模板消息 3.填写信息 4.审核通过后 二.开发步骤 1.依赖坐标 2.实体类 1)AccessToken 2.WxTemplate模板消 ...

  7. Java实现微信模板消息推送

    模板消息推送功能仅限于微信服务号才行. 1.准备:微信公众号 appId,app密钥(这俩没啥好说的,都知道在哪拿). 模板Id,添加之后就能看到,如果没有合适的模板可以自定义模板(需要审核7-15天 ...

  8. 微信模板消息推送接口说明

    微信服务号可以给关注此号码的粉丝推送消息.消息分为三种: 1.群发消息:给所有关注此微信的人同时发送,但每个月的发送次数有限制. 2.向单个粉丝发送消息:此种功能发送次数没有限制,但是接受消息的粉丝必 ...

  9. 微信模板消息推送心得

    我使用amp的软件,上百度找到相关的代码,复制,保存到php文件上,然后,打开浏览器,查看效果.遇到下面的问题 1.网页打不开,提示连接已重置. 后来发现,原来在apache下的logs文件夹内的er ...

最新文章

  1. MXNet动手学深度学习笔记:卷积计算
  2. 写给我的2015—开启工作新旅程
  3. HTML DOM Table 对象
  4. 根据各工序时间画aoe网_曲靖被动防护网RXI150被动网厂家
  5. 产品的三层境界:工具-平台-生态
  6. idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...
  7. bzoj1222: [HNOI2001]产品加工
  8. 【Python】strip()方法
  9. 花书+吴恩达深度学习(四)多分类 softmax
  10. 汽车燃料效率分析实例
  11. 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm
  12. jsp+servlet实现最基本的注册登陆功能
  13. 极大似然估计学习笔记
  14. web第三课html课堂笔记
  15. GAMIT新版本10.71发布了
  16. matlab命令窗口中常用快捷键命令(一)
  17. 基于CentOS7.2的服务器搭建教程《一》
  18. IDEA+MySQL+JavaFX之通讯录系统
  19. python如何从文本中提取数据_如何从文本文件中提取数据?
  20. SPICE二极管直流分析原理

热门文章

  1. 各层作用_土工布有什么作用呢?
  2. 计算机知识和技能,计算机基本知识和技能PPT课件.ppt
  3. Premiere Pro CC2017教程(三)
  4. Exception in thread main java.io.IOException: (null) entry in command string: null chmod 0700 E:\t
  5. 大公司病,真 TM 形象
  6. 深度学习模型大合集:GitHub趋势榜第一,两天斩获2000星
  7. 走在前沿的弄潮儿,怎能不会Git的那些奇技淫巧
  8. 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
  9. 浅谈 Python 中的多线程。
  10. oracle分页查询前10条,Oracle查询前十条记录及分页查询(第5条到第10记录)