使用python实现微信模板消息

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import urllib2,json
import datetime,time
from config import *
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

class WechatPush():

    def __init__(self,appid,secrect,file_name):
        # 传入appid
        self.appid = appid
        # 传入密码
        self.secrect = secrect
        # 传入记录token和过期时间的文件名
        self.file_name=file_name

    def build_timestamp(self,interval):
        # 传入时间间隔,得到指定interval后的时间 格式为"2015-07-01 14:41:40"
        now = datetime.datetime.now()
        delta = datetime.timedelta(seconds=interval)
        now_interval=now + delta
        return now_interval.strftime(‘%Y-%m-%d %H:%M:%S‘)

    def check_token_expires(self):
        # 判断token是否过期
        with open(self.file_name,‘r‘) as f:
            line=f.read()
            if len(line)>0:
                expires_time=line.split(",")[1]
                token=line.split(",")[0]
            else:
                return "","true"
        curr_time=time.strftime(‘%Y-%m-%d %H:%M:%S‘)
        # 如果过期返回false
        if curr_time>expires_time:
            return token,"false"
        # 没过期返回true
        else:
            return token,"true"

    def getToken(self):
        # 获取accessToken
        url = ‘https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=‘+self.appid + "&secret="+self.secrect
        try:
            f = urllib2.urlopen(url)
            s = f.read()
            # 读取json数据
            j = json.loads(s)
            j.keys()
            # 从json中获取token
            token = j[‘access_token‘]
            # 从json中获取过期时长
            expires_in =j[‘expires_in‘]
            # 将得到的过期时长减去300秒然后与当前时间做相加计算然后写入到过期文件
            write_expires=self.build_timestamp(int(expires_in-300))
            content="%s,%s" % (token,write_expires)
            with open(self.file_name,‘w‘) as f:
                f.write(content)
        except Exception,e:
            print e

        return token

    def post_data(self,url,para_dct):
        """触发post请求微信发送最终的模板消息"""
        para_data = para_dct
        f = urllib2.urlopen(url,para_data)
        content = f.read()
        return content

    def do_push(self,touser,template_id,url,topcolor,data):
        ‘‘‘推送消息 ‘‘‘
        #获取存入到过期文件中的token,同时判断是否过期
        token,if_token_expires=self.check_token_expires()
        #如果过期了就重新获取token
        if if_token_expires=="false":
            token=self.getToken()
        # 背景色设置,貌似不生效   
        if topcolor.strip()==‘‘:
            topcolor = "#7B68EE"
        #最红post的求情数据
        dict_arr = {‘touser‘: touser, ‘template_id‘:template_id, ‘url‘:url, ‘topcolor‘:topcolor,‘data‘:data}
        json_template = json.dumps(dict_arr)
        requst_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token
        content = self.post_data(requst_url,json_template)
        #读取json数据
        j = json.loads(content)
        j.keys()
        errcode = j[‘errcode‘]
        errmsg = j[‘errmsg‘]
        #print errmsg

if __name__ == "__main__":

    def alarm(title,hostname,timestap,level,message,state,tail):
        """报警函数"""
        color="#FF0000"
        data={"first":{"value":title},"keyword1":{"value":hostname,"color":color},"keyword2":{"value":timestap,"color":color},"keyword3":{"value":level,"color":color},"keyword4":{"value":message,"color":color},"keyword5":{"value":state,"color":color},"remark":{"value":tail}}
        return data

    def recover(title,message,alarm_time,recover_time,continue_time,tail):
        """恢复函数"""
        re_color="#228B22"
        data={"first":{"value":title},"content":{"value":message,"color":re_color},"occurtime":{"value":alarm_time,"color":re_color},"recovertime":{"value":recover_time,"color":re_color},"lasttime":{"value":continue_time,"color":re_color},"remark":{"value":tail}}
        return data

    

    # data=alarm("测试的报警消息","8.8.8.8",time.ctime(),"最高级别","然并卵","挂了","大傻路赶紧处理")

    # 实例化类
    webchart=WechatPush(appid,secrect,file_name)
    url="http://www.xiaoniu88.com"

    print len(sys.argv)
    # 发送报警消息
    if len(sys.argv) == 9:
        title=sys.argv[1]
        hostname=sys.argv[2]
        timestap=sys.argv[3]
        level=sys.argv[4]
        message=sys.argv[5]
        state=sys.argv[6]
        tail=sys.argv[7]

        print "sys.argv[1]"+sys.argv[1]
        print "sys.argv[2]"+sys.argv[2]
        print "sys.argv[3]"+sys.argv[3]
        print "sys.argv[4]"+sys.argv[4]
        print "sys.argv[5]"+sys.argv[5]
        print "sys.argv[6]"+sys.argv[6]
        print "sys.argv[7]"+sys.argv[7]
        print "sys.argv[8]"+sys.argv[8]

        with open("/etc/zabbix/moniter_scripts/test.log",‘a+‘) as f:
            f.write(title+"\n")
            f.write(hostname+"\n")
            f.write(timestap+"\n")
            f.write(level+"\n")
            f.write(message+"\n")
            f.write(state+"\n")
            f.write(tail+"\n")
            f.write("%s_%s" % ("group",sys.argv[8])+"\n")

        data=alarm(title,hostname,timestap,level,message,state,tail)
        group_name="%s_%s" % ("group",sys.argv[8])
        for touser in eval("%s_%s" % ("group",sys.argv[8])):
            webchart.do_push(touser,alarm_id,url,"",data)

        for touser in group_super:
            webchart.do_push(touser,alarm_id,url,"",data)
    #发送恢复消息
    elif len(sys.argv) == 8:
        title=sys.argv[1]
        message=sys.argv[2]
        alarm_time=sys.argv[3]
        recover_time=sys.argv[4]
        continue_time=sys.argv[5]
        tail=sys.argv[6]

        print "sys.argv[1]"+sys.argv[1]
        print "sys.argv[2]"+sys.argv[2]
        print "sys.argv[3]"+sys.argv[3]
        print "sys.argv[4]"+sys.argv[4]
        print "sys.argv[5]"+sys.argv[5]
        print "sys.argv[6]"+sys.argv[6]
        print "sys.argv[7]"+sys.argv[7]

        data=recover(title,message,alarm_time,recover_time,continue_time,tail)

        for touser in eval("%s_%s" % ("group",sys.argv[7])):
            webchart.do_push(touser,recover_id,url,"",data)

        for touser in group_super:
            webchart.do_push(touser,recover_id,url,"",data)
时间: 2024-10-24 21:35:26

使用python实现微信模板消息的相关文章

微信模板消息

以下文档只适合新手,如果你已经是一个微信开发的老鸟 就不用浪费时间阅读了: 需求分析:昨天晚上 有几个人在上一期的微信活动中 中奖了,领导给了一个案例说发送一条 微信模板消息 实现步骤: 1.查阅相关接口资料 以下内容提取 微信官方文档 模板消息调用时主要需要模板ID和模板中各参数的赋值内容: 模板中参数内容必须以".DATA"结尾,否则视为保留字: 模板保留符号"{{ }}"当我读到这里时候仍旧是一脸懵逼的样子,完全不知所云,于是接着往下看 到此 官方文档已看完,

微信模板消息接口-给用户发送订单成功信息/支付成功等等

微信模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. <?php //curl模拟请求发送信息 function send_template_message($data,$access_token){ //return $data.'----'.$access_token; //$access_token = get_access_token($appId,$appSe

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

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

微信模板消息发送

整个开发流程,我在"简书" 上看到了一个完整的开发流程. https://www.jianshu.com/p/eb0e9c4dcdfe 微信官方接口为: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277 自己开发中总结了一下,如下,方便后续备查: ①微信的模板消息,其实是微信公众号上推送给用户的一条消息记录. 在开发的时候,需要获取到用户的openId(用户关注公众号就会产生一个唯一的openId

php实现微信模板消息推送

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

微信模板消息下线后订阅消息是否可以满足各行业通知提醒

微信模板消息下线后订阅消息是否可以满足各行业通知提醒,如何在短信平台和订阅号直接选择一个最佳方案? 一.青鸟报修云工单提醒短信业务及微信订阅消息选择思考 作为工单系统如何科学合理解决用户.技术员.管理员之间的信息提醒对于青鸟报修云工单系统是一种挑战,新版本2.0采用微信消息模板,但在4月10号官方下线模板消息,经平台进行用户调查最终只有2个选择,平台引用第三方短信平台或调整为订阅消息,今天简单做一个对比: 方案选择:订阅消息 三.选择理由1.短信提醒:弊端短信通知要帮助用户充值,单独开户,显示余

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

微信模板消息测试

模板消息定义 目前允许发的模板消息示例   1.1资料变更类通知示例如下: 标题 内容 示例 会员卡申请资料变更通知 {{first.DATA}} 会员卡号:{{keyword1.DATA}} 会员姓名:{{keyword2.DATA}} 变更内容:{{keyword3.DATA}} 时间:{{keyword4.DATA}} {{remark.DATA}} 尊敬的会员,您的资料变更成功 会员卡号:0000 0000 会员姓名:李XX 变更内容:1234567890 时间:2015年5月5日 感谢

在测试环境发送 微信模板消息 调试 --Sangit

一.如何在测试环境发送 1.强制access_token,把正式公众号的token写到测试环境代码,发送模板消息微信只根据access_token来判断公众号 2.同时把测试用户在正式环境的openid也写到测试环境的代码 二.如何查看模板消息是否发送成功 因为系统发送模板消息用的是 swoole服务 来监听发送,所以需要通过 strace命令 追踪进程状态信息 1.通过ps命令查看进程的pid 2.通过strace命令追踪进程 3.然后调用发送模板消息,可以看到追踪进程 发送的数据与返回值,可