微信模板消息推送

微信公众号消息推送

前提

环境: python 3

框架: django 1.11.9

需要有自己的服务器来响应微信发送的Token验证~~

当然, 下面的代码用上了博主的服务器, 直接复制博主的也能用, 如果没有响应, 说明博主没启服务

测试环境

这里先介绍测试号的开发;

测试接口链接: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

点击链接进入页面,会看到一个二维码,用微信扫描后就会分配给你一个微信公众测试账号;

如下

当然也可以多人测试;

然后找到如下这个位置,点击“新增测试模板”按钮,填写

注意要修改的地方 :

下面是相关代码: 

urlpatterns = [
    url(r‘^bind/$‘, views.bind),
    url(r‘^bind_qcode/$‘, views.bind_qcode),
    url(r‘^callback/$‘, views.callback),
    url(r‘^sendmsg/$‘, views.sendmsg),
]

urls.py

# ############# 微信 ##############
WECHAT_CONFIG = {
    ‘app_id‘: ‘自己的测试号appID‘,
    ‘appsecret‘: ‘自己的测试号appsecret‘,
    ‘redirect_uri‘: ‘http://140.143.63.45:8080/callback/‘,  # 服务器响应url
    ‘template_id‘: "自己的模板ID"
}

settings.py

import json
import time
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

def bind(request):
    """
    关注公众号,并绑定个人微信(用于以后消息推送)
    """
    return render(request, ‘bind.html‘)

def bind_qcode(request):
    """
    生成二维码
    """
    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_url
    except Exception as e:
        ret[‘code‘] = 1001
        ret[‘msg‘] = str(e)

    return JsonResponse(ret)

def callback(request):
    """
    用户在手机微信上扫码后,微信自动调用该方法。
    用于获取扫码用户的唯一ID,以后用于给他推送消息。
    """
    code = request.GET.get("code")

    # 用户UID
    state = 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")
    if openid:
        models.UserInfo.objects.filter(uid=state).update(wx_id=openid)
        response = "<h1>授权成功 %s </h1>" % openid
    else:
        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 = None
        return access_token

    access_token = get_access_token()

    openid = models.UserInfo.objects.get(id=1).wx_id

    def send_custom_msg():
        body = {
            "touser": "oxdWJ1CwhFai5Gwq4GpZO3Cfls-0",
            "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 result

    def 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": {
                    "time": {
                        "DATA": "2018-12-28",
                        "color": "#173177"
                    },
                    "name": {
                        "DATA": "李二",
                        "color": "#173177"
                    },
                },
            }
        )
        result = res.json()
        print(result, ‘<--result‘)
        return result

    # result = send_custom_msg()
    result = send_template_msg()

    if result.get(‘errcode‘) == 0:
        return HttpResponse(‘发送成功‘)
    return HttpResponse(‘发送失败‘)

views.py

注意: 上面的代码并非完整的代码, 有些地方还需自行修改

原文地址:https://www.cnblogs.com/peng104/p/10200544.html

时间: 2024-08-12 23:49:59

微信模板消息推送的相关文章

C# MVC 微信支付之微信模板消息推送

微信支付之微信模板消息推送 今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不牛逼吗?现在的社会,人多多少少都有或轻或重的"强迫症".就是,看到有未读消息,都要去看一下.特别是现在的微信,大部分可以几个小时不看手机QQ有没有新消息来,但是这大部分人绝对做不到一个小时不看微信有没有消息来.现在的微信,真特么是神一样的存在,几乎人人手机上都会有微信.而且,如果你的公众号是服务号的话,这个

php实现微信模板消息推送

转自:https://www.jb51.net/article/137428.htm 这篇文章主要为大家详细介绍了php实现微信模板消息推送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了php微信模板消息推送的具体代码,供大家参考,具体内容如下 1.微信公众号模板消息配置 2.PHP代码 /** * 发送模板消息 */ public function send_notice(){ //获取access_token if ($_COOKIE['access_token']

ASP.NET 微信公众平台模板消息推送功能完整开发

最近公众平台的用户提出了新需求,他们希望当收到新的邮件或者日程的时候,公众平台能主动推送一条提醒给用户.看了看平台提供的接口,似乎只有[模板消息]能尽量满足这一需求,但不得不说微信提供的实例太少,而且只有PHP的,不过摸索了一下还是成功的实现了. 首先是准备工作,需要申请开通[模板消息]功能,网上教程很多.然后申请通过之后,用户可以从现有的模板里选择15个使用,也可以自己添加模板使用.这里吐槽一下:申请添加新的模板时,微信出于保护用户的目的禁止了一些“看起来会很频繁”的消息类型,比如这图里的——

微信小程序之模板消息推送

最近在用sanic框架写微信小程序,其中写了一个微信消息推送,还挺有意思的,写了个小demo 具体见官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/template-message/sendTemplateMessage.html 文档其实写的很详细清除了,包括返回数据的类型,报错信息 大致流程就是:调用微信小程序的接口,获取access_token,然后再调用发送模板信息的接口,发送消息 获取access_t

Java对接微信公众号模板消息推送

内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 不过请注意这一点 ok,我们继续:再来完成公众号的基本配置: 服务器地址(URL):必须以http://或https://开头,分别支持80端口和443端口.这个URL是很重要的,需要响应微信发送的token验证 令牌(To

微信公众号助手如何设置模板消息推送?

说到运营微信服务号,其目的自然是广告推广,通过微信关注粉丝获取商业价值,而广告推广的主要途径是模块链接实现价值的核心在于模板消息. 你想想如果看到一条关于"投资策略,消息提醒,预约通知"的消息,引起了客户的注意,点击量就高,而且纷纷留言服务很周到! A君:这是什么消息提醒? B君:服务号具有模板消息功能,推送的这条是模板消息. A君:有什么优势? B君:模板消息群发能够让信息第一时间送达客户手机,保障信息的及时性以及安全性. 使用鱼塘软件的模板消息群发,能够很好地跟踪.回访客户,聆听他

errcode 4103 invalid page hint 小程序模板消息推送遇到的坑

invalid page hint一直提示这个坑爹的就是,我的小程序没发布之前,也就是测试版本用这个格式是可以的 /pages/myGroup/myGroup?groupid=22***但是发布成功以后,线上版本经常报错.说页面无效,后来不断的改,也百度搜了下别人踩到的坑,后来发现去掉斜杠,用相对路径就可以了. pages/myGroup/myGroup?groupid=22**** 上面这个格式就可以了 仅此记录下我踩到的坑 其他如果还有不明白的地方   可以加我微信 qiufeng2983

PHP 微信公众号开发 - 消息推送

项目微信公众号开发,需要做用户消息推送,记录下来以便日后使用 1,接上一篇文章,可以查看如何获取用户openid PHP 微信公众号开发 - 获取用户信息 2,添加模板消息 3,查看模板详情 根据模板详情设置对应推送消息 4,代码实现 1 <?php 2 // 字符编码 3 header("Content-Type:text/html; charset=utf-8"); 4 5 // 微信接口类 6 class WeChat{ 7 private static $appid; 8

微信公众号模版消息与小程序消息推送不同场景不同应用

1.公众号-插件-模板消息 图1.1 图1.2 图1.3 2.小程序-模板消息 图2.1 图2.2 图2.3 3.区别   1.推送条数不同 公众号的消息推送(以下简称公推)可以采用接口在后台调用接口无限向用户推送消息 小程序的消息推送(一下简称微推)只能允许开发者向用户在7天内推送有限条数的模板消息(引用官方的话)解释过来是:很难实现无限制推送用户消息(但是可以实现) 2.出现位置不同 公推消息形式会在该公众号下,与微信消息等级相同(如图1.2形式) 微推且消息出现在位置如图2.2,在"服务通