Django后端发送小程序微信模板消息示例(服务通知)


Posted in Python onDecember 17, 2019

模板消息

官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html

模板消息如下图所示

Django后端发送小程序微信模板消息示例(服务通知)

Django中获取access_token

根据文档描述,获取access_token文档,后端必须获取一个access_token才能够发送模板消息,文档中说明该token有效期为两小时,需要后端定时去获取。我们这里使用Django-crontab第三方包来实现定时任务。

pip install django-crontab

根据文档描述,需要向https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET这个地址发送get请求,返回结果为access_token

我把access_token存入到缓存中

Python代码如下:

response = requests.get(f'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={settings.APPID}&secret={settings.APPSECRET}')
response = response.json()
if response.get('access_token', ''):
 cache.set('access_token', response['access_token'])
 cache.expire('access_token', response['expires_in'])

在settings.py中配置:

CRONJOBS = (
 #每隔7200秒都生成一次access——token
 ('0 */2 * * *', 'django.core.management.call_command', ['runstat', '--token']),
)

这样就实现了每隔两小时自动获取token

Django发送模板消息

我们首先在微信公众平台中创建模板消息

Django后端发送小程序微信模板消息示例(服务通知)

然后把模板ID复制到项目中,编写视图函数。

@require_http_methods(["POST"])
@csrf_exempt
def notifications(request):
 if request.method == 'POST':
  access_token = cache.get('access_token')

  template_id = '你的模板id'
  push_data = {
   "keyword1": {
    "value": obj.order_sn
   },
   "keyword2": {
    "value": obj.time
   },
   "keyword3": {
    "value": "{:.2f}".format(float(obj.total_price))
   },
  }

  if access_token:
   # 如果存在accesstoken
   payload = {
    'touser': req_data.get('openid', ''), #这里为用户的openid
    'template_id': template_id, #模板id
    'form_id': req_data.get('form_id', ''), #表单id或者prepay_id
    'data': push_data #模板填充的数据
   }

   response = requests.post(f'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={access_token}',
       json=payload)

   #直接返回res结果
   return JsonResponse(response.json())
  else:
   return JsonResponse({
    'err': 'access_token missing'
   })

配置urls.py

#模板消息通知
path('api/v1/notifications/', notifications),

用户向notifications这个接口发送post请求后即可推送模板消息到微信中!!

以上这篇Django后端发送小程序微信模板消息示例(服务通知)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中Genarator函数用法分析
Apr 08 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
PHP统计代码行数的小代码
Sep 19 Python
使用 Python 遍历目录树的方法
Feb 29 Python
python实现简单学生信息管理系统
Apr 09 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 #Python
python主线程与子线程的结束顺序实例解析
Dec 17 #Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 #Python
Django集成celery发送异步邮件实例
Dec 17 #Python
python学生信息管理系统实现代码
Dec 17 #Python
pymysql模块的操作实例
Dec 17 #Python
Django异步任务线程池实现原理
Dec 17 #Python
You might like
php设计模式 Strategy(策略模式)
2011/06/26 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
Symfony生成二维码的方法
2016/02/04 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
解读! Python在人工智能中的作用
2017/11/14 Python
使用python实现BLAST
2018/02/12 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python netmiko模块的使用
2020/02/14 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
电子信息工程专业自荐书
2014/06/24 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
高温慰问简报
2015/07/21 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python