您的位置:首页 > 移动开发 > 微信开发

调用微信公众平台API免费给自己发消息

2017-04-04 17:10 197 查看

素材:

注册 微信公众平台的订阅号

开通开发者中心功能,注册公众平台测试账号。获取到appID和appsecret

摘要:

使用Python 2.7

基于 微信‘公众平台测试账号’的appID和appsecret实现自动刷新 access_token,和(根据接收列表)发送消息的功能

代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 03 21:24:18 2017

@author: Selay
"""

import requests
import json
import threading

# 字典allusers用于存储 由 索引名和openID构成的键值对
# 微信关注‘测试号’时,会生成openID用于与对应微信账号通讯
# 索引名 是为了便于自己识别和管理而对openID起的别名
allusers = {'大大':'eXIuShYFO7tghjb_4YWA'}

def usersto(users = None):
if users == None:
return allusers['大大']
elif users == "All":
return ','.join(set(allusers.values()))
else:
if isinstance(users,list):
usersinfo = []
for user in users:
usersinfo.append(allusers[user])
return ','.join(set(usersinfo))
else:
print "'users' must be a list!"
return

def json_post_data_generator(content='Hi!你好!',users = None):
msg_content = {}
msg_content['content'] = content
post_data = {}
post_data['text'] = msg_content
post_data['touser'] = "%s" % usersto(users)
post_data['toparty'] = ''
post_data['msgtype'] = 'text'
post_data['agentid'] = '9'
post_data['safe'] = '0'
#由于字典格式不能被识别,需要转换成json然后在作post请求
#注:如果要发送的消息内容有中文的话,第三个参数一定要设为False
return json.dumps(post_data,False,False)

# 需将此处的APPID,APPSECRET换为自己‘测试号管理’页面内显示的内容
def appInfos():
APPID = "****************"
APPSECRET = "******************"
return (APPID,APPSECRET)

def get_token_info():
APPInfo = appInfos()
r = requests.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" % APPInfo)
#print "Accessing %s" %r.url
js =  r.json()
if "errcode" not in js:
access_token = js["access_token"]
expires_in = js["expires_in"]
else:
print "Can not get the access_token"
print js
quit()
return access_token,expires_in

post_url_freshing = ['']

def post_url():
access_token,expires_in = get_token_info()
print "token expires_in:%s" % expires_in
timer = threading.Timer((expires_in-200),post_url)
timer.start()
post_url_freshing[0] = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s' %access_token

post_url()

def sender(text_str,user_lis = None):
posturl = post_url_freshing[0]
post_data = json_post_data_generator(content=text_str,users = user_lis)
r = requests.post(posturl,data=post_data)
result = r.json()
if result["errcode"] == 0:
print "Sent successfully"
else:
print result["errmsg"]

if __name__ == "__main__":
text_str = "你好"
user_lis = None
sender(text_str,user_lis)


附加信息:

微信公众号有多种,订阅号易申请,使用限制不多。申请地址https://mp.weixin.qq.com/ (自行百度 ‘申请微信订阅号’)

公众平台测试帐号:无需申请公众帐号、可在测试帐号中体验并测试微信公众平台所有高级接口。

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

微信公众平台开发者文档:https://mp.weixin.qq.com/wiki/home/index.html

参考:

监控服务调用微信API如何给自己发告警信息

用python给微信公众号发消息

使用微信公众平台发送报警信息(Python版)

用Python实现Zabbix微信报警

关于Zabbix3版本发送微信报警配置

报错信息:

out of response count limit hint: [0ns1wa0056ge20]:

在连续或累计发送20条消息或一段时间(48H)后,对方无回复,则会出现此错误;对方回复后,即可继续发送。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐