模板消息接口

'''
使用规则
1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
3、在所选择行业的模板库中选用已有的模板进行调用;
4、每个账号可以同时使用25个模板。
5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。
''' import werobot
import requests,json
robot = werobot.WeRoBot(token='tteexx')
robot.config['APP_SECRET'] = 'fee02e53beed0e49f2c597adcca8cf56'
robot.config['APP_ID'] = 'wx94efe9defbf49573'
client = robot.client
ACCESS_TOKEN = "17_v7LVKYFlHSH5CperVCJQ2TeuzzT_F6oIBVYphwmKyADa3xnjp_GeAX6wxCwpjOMcZvIpzwE1EzNcchtIQh7AHB0W76c7jM2VtQOsBsq9wwbecIF2ARzvIMx0Ng6sbv1sFh5lSycwoTNyCPYbPGFhADACTS" #————————刷新ACCESS_TOKEN——————————
#判断ACCESS_TOKEN 是不是 42001 ,是说明过期,需要刷新
def access(url,ACCESS_TOKEN):
url = url + ACCESS_TOKEN
req = requests.get(url).text
a = eval(req).get('errcode')
# print(a)
if a == "":
ACCESS_TOKEN = client.get_access_token()
return ACCESS_TOKEN
access(url="https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=",ACCESS_TOKEN=ACCESS_TOKEN)
print(ACCESS_TOKEN) #———————设置所属行业——————————————————
#assess_token 注意时效 ,行业的参数代码,必选2个行业 url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token="+ str(ACCESS_TOKEN)
data = {
"industry_id1": "",
"industry_id2": ""
}
data_json = json.dumps(data)
req = requests.post(url,data_json).text
print(req) #————————获取设置的行业信息——————————————
#注意assess_token 注意时效 url = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=" + str(ACCESS_TOKEN)
req =requests.get(url).text
print(req) #————————获取行业模板ID——————————————
#template_id_short:模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式 url = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=" + str(ACCESS_TOKEN)
data ={"template_id_short":"TM00015"}
req =requests.post(url,data).text
print(req) #————————获取行业模板列表—————————————— url = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=" + str(ACCESS_TOKEN)
req =requests.get(url).text
print(req) #————————删除模板——————————————
#template_id 公众帐号下模板消息ID url = "https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=" + str(ACCESS_TOKEN)
data ={"template_id" : "Dyvp3-Ff0cnail_CDSzk1fIc6-9lOkxsQE7exTJbwUE"}
req =requests.post(url,data).text
print(req) #————————发送模板消息——————————————
'''
touser 是 接收者openid
template_id 是 模板ID
url 否 模板跳转链接(海外帐号没有跳转能力)
miniprogram 否 跳小程序所需数据,不需跳小程序可不用传该数据
appid 是 所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)
pagepath 否 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),暂不支持小游戏
data 是 模板数据
color 否 模板内容字体颜色,不填默认为黑色
'''
url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + str(ACCESS_TOKEN)
data = {
{
"touser": "OPENID",
"template_id": "ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url": "http://weixin.qq.com/download",
"miniprogram": {
"appid": "xiaochengxuappid12345",
"pagepath": "index?foo=bar"
},
"data": {
"first": {
"value": "恭喜你购买成功!",
"color": "#173177"
},
"keyword1": {
"value": "巧克力",
"color": "#173177"
},
"keyword2": {
"value": "39.8元",
"color": "#173177"
},
"keyword3": {
"value": "2014年9月22日",
"color": "#173177"
},
"remark": {
"value": "欢迎再次购买!",
"color": "#173177"
}
}
}
}
req =requests.post(url,data).text
print(req)

自定义菜单栏

 #自定义菜单栏
from werobot import WeRoBot
import requests
#定义app_id,app_secret
robot = WeRoBot(token='tteexx',app_id='wx94efe9defbf49573',app_secret= 'fee02e53beed0e49f2c597adcca8cf56')
#继承client的方法
client = robot.client
#获取acceaccess token
acceaccess_token = client.grant_token()
#刷新acceaccess token
acceaccess_token = client.get_access_token()
#自定义菜单地址
url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' + str(acceaccess_token)
#自定义菜单目录
menu = {
"button":[
{
"type": "view",
"name": "百度",
"url": "http://www.baidu.com",
},
{
"name": "腾讯",
"sub_button": [
{
"type": "view",
"name": "腾讯主页",
"url": "http://www.tencent.com"
},
{
"type": "view",
"name": "腾讯招聘",
"url" : "https://join.qq.com/"
},
{
"type": "view",
"name": "腾讯网",
"url": "https://www.qq.com/"
},
{
"type": "view",
"name": "腾讯视频",
"url": "https://v.qq.com/"
}
]
},
{
"name": "博客园",
"sub_button": [
{
"type": "view",
"name": "我的博客",
"url": "https://www.cnblogs.com/cy708/"
},
{
"type": "view",
"name": "博客园主页",
"url": "https://www.cnblogs.com/"
}
]
}
]
}
#创建自定义菜单
bacg = client.create_menu(menu_data=menu)
#提交数据
response = requests.post(url,bacg)

 注:1、40164报错:未将IP地址添加到白名单中,将提示的IP加入IP地址白名单中

   2、48001报错:非授权的账户不可使用自定义菜单栏

Python——WeRobot(微信公众号开发)的更多相关文章

  1. python之微信公众号开发(基本配置和校验)

    前言 最近有微信公众号开发的业务,以前没有用python做过微信公众号开发,记录一下自己的学习和开发历程,共勉! 公众号类型 订阅号 普通订阅号 认证订阅号 服务号 普通服务号 认证服务号 服务方式 ...

  2. 细数Python Flask微信公众号开发中遇到的那些坑

    最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...

  3. Python webpy微信公众号开发之 回复图文消息

    新建图文回复模板reply_pictext.xml: $def with (toUser,fromUser,createTime,title1,description1,picurl1,url1)&l ...

  4. 微信公众号开发被动回复用户消息,回复内容Content使用了"\n"换行符还是没有换行

    使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架 需求:在微信公众号开发时,需要实现自动回复,即被关注回复.收到消息回复.关键词回复 发现问题: ...

  5. 微信公众号开发(一)--验证服务器地址的Java实现

    现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...

  6. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  7. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  8. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  9. NET微信公众号开发-5.0微信支付(待测试)

    开发前准备. 1.0微信支付官方开发者文档 2.0官方demo下载 我们用c#所以选择.net版本 不过这个官方的demo根本跑步起来 3.0官方demo运行起来解决方案 4.0微信支付官方.net版 ...

  10. .NET开发者如何愉快的进行微信公众号开发

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这篇文章只是一个如何提高开发效率的简单指导和记录,不会涉及具体的微信公众号开发内容. ...

随机推荐

  1. nn.ReLU(inplace=True)中inplace的作用

    在文档中解释是: 参数: inplace-选择是否进行覆盖运算 意思是是否将得到的值计算得到的值覆盖之前的值,比如: x = x + 即对原值进行操作,然后将得到的值又直接复制到该值中 而不是覆盖运算 ...

  2. Python 在 Terminal 中的自动补全

    为了在 Terminal 中使用 Python 更加方便,在 home 目录下添加脚本 .pythonstartup,内容如下, 然后在 .bashrc 中添加 export PYTHONSTARTU ...

  3. 面试官问,说一个你在工作非常有价值的bug

    如果你去参考面试,做足了准备,面对面试官员从容不迫,吐沫横飞的大谈自己的工作经历.突然,面试官横插一句:说一个你在工作非常有价值的bug.顿时,整个空气都仿佛都凝固了!“What?”... 我想没几个 ...

  4. HTTP与HTTPS对访问速度(性能)的影响

    1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗. 本文主要介绍 https 对用户体验的影响. ...

  5. LeetCode264:Ugly Number II

    自己的做法超时了.主要是每次生成一个数据,保存到list中,然后对List重新排序.排序太耗费时间 记录下讨论组里的写法 public int NthUglyNumber(int n) { int[] ...

  6. vue编程式导航

    vue项目中使用到了组件间传值,通过路由跳转实现从产品页进入产品详情页查看功能. 使用了this.$router.push(编程式导航) product页面中:因为只需要遮住产品列表页来显示产品详情页 ...

  7. Django signals 信号作用及用法说明

    参考:https://docs.djangoproject.com/en/1.11/ref/signals/ 1.Model signals django.db.models.signales 作用于 ...

  8. python代码风格指南:pep8 中文版

    本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Python代码.请参阅PEP关于Python的C实现的C编码风格指南的描述. 本文档和PEP257(文档字符串规范)改编自Guid ...

  9. 第十二次oo作业

    作业十二 规格化设计简介 规格化设计的发展历史 1950年代,第一次分离,主程序与子程序的分离结构是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过 ...

  10. HNOI2013 BZOJ3144 切糕

    在n×m的表格上,在(x,y)填v的代价是w(x,y,v),且相邻格子填的数相差≤d.求填满表格的最小代价.n,m,maxv≤40. 每个点上选择一个数填,因此将上面的数串起来.考虑限制条件,矛盾条件 ...