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的Flask框架中使用模版的入门教程
Apr 20 Python
详解Django缓存处理中Vary头部的使用
Jul 24 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
对python判断是否回文数的实例详解
Feb 08 Python
Python实现Restful API的例子
Aug 31 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python基础教程之输入输出和运算符
Jul 26 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 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保存session到memcache服务器的方法
2016/01/19 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
JS检测移动端横竖屏的代码
2016/05/30 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
python实现3D地图可视化
2020/03/25 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
一名老师的自我评价
2014/02/07 职场文书
给公司的建议书范文
2014/05/13 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
一篇文章学会Vue中间件管道
2021/06/20 Vue.js