微信公众号模板消息接口使用,附后台python程序

首先:

    登录到微信公众平台:https://mp.weixin.qq.com/,在菜单列表选择“模板消息”,接着在模板库选择自己适合的模板,点击添加,回到我的模板,如下图,这个模板ID等下我们会用到。

微信公众号模板消息接口使用,附后台python程序_第1张图片

另外,点击菜单列表的“基本配置”,如下图所示,这里我需要两个信息,分别是AppID和AppSecret,这个后面我们会用到。

微信公众号模板消息接口使用,附后台python程序_第2张图片

    接下来我们看下微信模板消息接口的文档,微信公众平台技术文档:点击打开链接,选择“消息管理”--》“模板消息接口”。

微信公众号模板消息接口使用,附后台python程序_第3张图片

这里我们主要看下“发送模板消息”,在目录里点击“发送模板消息”,特别要注意的是

1.post的数据中,字段“template_id”即为前面我们添加的模板ID,直接填入即可。

2.请求的url后面的access_token参数,

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

微信公众号模板消息接口使用,附后台python程序_第4张图片

关于access_token,我们在微信公众平台开发文档里找到,点击菜单栏,“开始开发”--》“获取access_token”,可以看到access_token的详细说明,以及如何获取它。从文档给出的url和参数,我们可以看到需要三个参数,grant_type是固定的,获取access_token填写client_credential,appid和secret就是我们前面说到的公众平台的AppID和AppSecret,直接填入即可。

返回码说明:

-1 系统繁忙
0 请求成功
40001 验证失败
40002 不合法的凭证类型
40003 不合法的OpenID
40004 不合法的媒体文件类型
40005 不合法的文件类型
40006 不合法的文件大小
40007 不合法的媒体文件id
40008 不合法的消息类型
40009 不合法的图片文件大小
40010 不合法的语音文件大小
40011 不合法的视频文件大小
40012 不合法的缩略图文件大小
40013 不合法的APPID
41001 缺少access_token参数
41002 缺少appid参数
41003 缺少refresh_token参数
41004 缺少secret参数
41005 缺少多媒体文件数据
41006 access_token超时
42001 需要GET请求
43002 需要POST请求
43003 需要HTTPS请求
44001 多媒体文件为空
44002 POST的数据包为空
44003 图文消息内容为空
45001 多媒体文件大小超过限制
45002 消息内容超过限制
45003 标题字段超过限制
45004 描述字段超过限制
45005 链接字段超过限制
45006 图片链接字段超过限制
45007 语音播放时间超过限制
45008 图文消息超过限制
45009 接口调用超过限制
46001 不存在媒体数据
47001 解析JSON/XML内容错误


主要流程

        要提交发送模板消息,我们请求的url需要一个access_token,要得到一个access_token,我们请求的url需要AppID和AppSecret。首先我们程序需要获取access_token,特别要注意的是access_token的有效期只有两个小时,所以每次获取access_token后要记录好获取的时间,下次使用access_token时我们应该先判断access_token是否失效,如果没有就直接拿已有的access_token来提交发送模板消息,如果已经超过两个小时,就要重新获取access_token的值。下面是我写的一个python程序,用来提交发送模板消息,我的做法是先将获取到的access_token和当前时间写入文件中,然后下次获取access_token时,先从文件中读取出来,判断时间是否已经过期,过期的话就重新请求网络获取,没有的过期的话就直接使用。

# -*- coding: utf-8 -*-
import datetime
import requests
import json

class WeChat():
    def __init__(self,openid,name,phone,content):
        self.openid=openid
        self.name=name
        self.phone=phone
        self.data=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.content=content

    def get_token(self):
        try:
            with open("access_token.txt","r") as f:
                content=f.read()
                data_dict=eval(content)
                time=datetime.datetime.strptime(data_dict["time"],'%Y-%m-%d %H:%M:%S')

            if (datetime.datetime.now()-time).seconds<7000:
                print("未到两小时,从文件读取")
                return data_dict["access_token"]
            else:
                #超过两小时,重新获取
                print("超过两小时,重新获取")
                payload = {
                     'grant_type': 'client_credential',
                     'appid': '*********',                #公众号appid,按自己实际填写
                     'secret': '********',待按自己实际填写
                     }
                url="https://api.weixin.qq.com/cgi-bin/token?"

                try:
                    respone=requests.get(url, params=payload, timeout=50)
                    access_token=respone.json().get("access_token")
                    content="{'access_token':"+str(access_token)+",'time':"+str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+"}"
                    #写入文件
                    with open("access_token.txt","w") as f:
                        f.write(content)

                    print("get_token",access_token)
                    return access_token
                except Exception as e:
                    print(e)
        except Exception as e:
            print("get_token,file",e)


    def post_data(self):
        data={
               "touser":self.openid,
               "template_id":"O00LtF3f6abpw6B48PiSYo_VO9hzB5SVWD2lrnqJF8w",#模板ID
               # "miniprogram":{
               #   "appid":"wx67afc56d7f6cfac0",  #待使用上线小程序appid
               #   "path":"pages/reserve/mgr/mgr"
               # },
               "data":{
                       "first": {
                           "value":"有新的客户预约,请及时处理!",
                           "color":"#173177"
                       },
                       "keyword1":{
                           "value":self.name,
                           "color":"#173177"
                       },
                       "keyword2": {
                           "value":self.phone,
                           "color":"#173177"
                       },
                       "keyword3": {
                           "value":self.data,
                           "color":"#173177"
                       },
                         "keyword4": {
                           "value":self.content,
                           "color":"#173177"
                       },
                       "remark":{
                           "value":"点击跳转处理!",
                           "color":"#173177"
                       }
               }
           }
        json_template=json.dumps(data)
        access_token=self.get_token()
        print("access_token--",access_token)
        url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token
        try:
            respone=requests.post(url,data=json_template, timeout=50)
            #拿到返回值
            errcode=respone.json().get("errcode")
            print("test--",respone.json())
            if(errcode==0):
                print("模板消息发送成功")
            else:
                print("模板消息发送失败")
        except Exception as e:
            print("test++",e)



使用:

my_wechat=wechat.WeChat(oprnid,name,phone,course_name)  
my_wechat.post_data()


你可能感兴趣的:(python)