前言
今天聊聊微信服务号的消息推送功能,因为最近刚好有这么个需求需要通过微信给用户推送消息,个人号或者企业个人号没去详细研究,看了个大概是需要先登录在进行发消息的功能,略麻烦,过。刚好有个认证的服务号,直接上手
消息推送目前分为两种,一种是模板消息,一种是订阅通知。两种都体验过,订阅通知是比较坑的,因为他是需要用户点击订阅一次才能发送一次,对我没啥用(多用于那种上课通知开奖通知啥的)
我的需求是在用户有需要的,然后可以每天推送一个汇率通知,经过测试之后模板消息可以达到这个功能,但是缺点是无法自定义标题和关键词,如果需要自定义的话得跟官方申请让他们审核过后才允许,下图是当时被驳回的审核通知。
既然无法自定义,只能自己去找个相近的模板了,但是还要吐槽的是,微信关于筛选模板这一块做得也不尽人意,只能一页一页翻过去,或者根据标题搜索,但是相关行业的又没有相应的,最后勉强找个了这样的
那么最后完成的效果是什么样的呢?图片
正文
整体思路蛮清晰,数据都通过相应的 API 传送,根据官方的相关文档介绍
通过服务号的 APPID 和 APPSECRET 获取 Access token
通过 Access token 去使用对应模板,填入想要发送的信息,然后发送给对应的用户
分步骤介绍图片
# 获取access_token
def get_access_token():
## 因为我是从文件中读取的,你们嫌麻烦可以直接把两个填到链接的大括号内,并删除后面的.format(xxx)
# appId
app_id = config["app_id"]
# appSecret
app_secret = config["app_secret"]
post_url = ("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}"
.format(app_id, app_secret))
## 尝试使用get获取并转换成json,同时取其中的值
try:
access_token = get(post_url).json()['access_token']
except KeyError:
print("获取access_token失败,请检查app_id和app_secret是否正确")
os.system("pause")
sys.exit(1)
print(access_token)
return access_toke
## 发送消息
def send_message(to_user, access_token, money):
# 这个url是赋值包含access_token的链接,方便后续post用
url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}".format(access_token)
now = datetime.datetime.now()
date = now.strftime("%m月%d日")
# 这里是传输需要发送的数据
data = {
"touser": to_user,
"template_id": config["template_id"],
# 这个url是点击详情之后的跳转,这里跳转到百度汇率历史
"url": "https://gushitong.baidu.com/foreign/global-CNYTWD",
"data": {
# 其中thing15这些是按照模板详情中的参数来的
"thing15": {
"value": "汇率通知"
},
"thing16": {
"value": "1 CNY = {} TWD".format(money)
},
"time9": {
"value": date
},
"thing2": {
"value": "点击详情查看历史汇率"
}
}
}
# 这里就是推送消息了
response = post(url, json=data).json()
if response["errcode"] == 40037:
print("推送消息失败,请检查模板id是否正确")
elif response["errcode"] == 40036:
print("推送消息失败,请检查模板id是否为空")
elif response["errcode"] == 40003:
print("推送消息失败,请检查微信号是否正确")
elif response["errcode"] == 0:
print("推送消息成功")
else:
print(response)
整体思路是这个样子,接下来我只需要实现它定时推送,或者后续增加的低于某个值推送等,不过这是后续增加的其它需求了,不过目前有一个问题就是,只能自己加要通知哪些用户,其实应该是有个页面让用户自己选择是否需要这个推送的。不过这方面感觉还得搭个平台或者简单的记录,略麻烦,暂过。
后记
功能虽然简单,不过也算是通了一条路,后续再此基础上可以增加更多功能,仅以此记录,学无止境。
参考
[1]https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
本文由mdnice多平台发布
![](https://img-blog.csdnimg.cn/direct/67c64049147741939b85489caefbb597.png)
喜欢的朋友记得点赞、收藏、关注哦!!!