码迷,mamicode.com
首页 > 微信 > 详细

微信模板消息推送

时间:2018-12-30 22:18:52      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:open   oauth   gif   发送   dump   ret   ==   pattern   二维码   

微信公众号消息推送

前提

环境: 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

 

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

 

微信模板消息推送

标签:open   oauth   gif   发送   dump   ret   ==   pattern   二维码   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!