zoukankan      html  css  js  c++  java
  • Django后端发送小程序微信模板消息(服务通知)

    模板消息

    官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html
    模板消息如下图所示

    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发送模板消息

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

    然后把模板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请求后即可推送模板消息到微信中!!

  • 相关阅读:
    day16(链表中倒数第k个结点)
    day15(C++格式化输出数字)
    day14(调整数组顺序使奇数位于偶数前面 )
    day13(数值的整数次)
    day12(二进制中1的个数)
    day11(矩形覆盖)
    day10(跳台阶)
    hadoop 又一次环境搭建
    Hive 学习
    hadoop -工具合集
  • 原文地址:https://www.cnblogs.com/PyKK2019/p/11610482.html
Copyright © 2011-2022 走看看