1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信公众号之主动图文消息推送 ---python

微信公众号之主动图文消息推送 ---python

时间:2023-08-29 03:18:18

相关推荐

微信公众号之主动图文消息推送 ---python

今天基于客服要求, 需要主动推送一个消息外链接到H5页面, 也是做了几套方案, 做程序猿真的太难了!!!

回到正题:

首要:

注册直通车

1. 你需要注册一个微信公众平台的服务号或者订阅号, 我使用的是企业版的2. 完成之后呢, 需要你去 :开发--基本配置--配置你的 appid 和 appsecret 3. 学会读开发文档,

开发文档

ok 一切就绪以后, 我们首要任务是先获取access_token, 获取token呢就需要用到我们刚刚配置的东西了

import requestsimport jsondef get_access_token():"""获取微信全局接口的凭证(默认有效期俩个小时)如果不每天请求次数过多, 通过设置缓存即可, 每天的次数限制大概是2000次 """# 获取access_token 需要的参数grant_type = 'client_credential' # 这个固定不变appid= "appid"secret="appsecret"response = requests.get(url="https://api./cgi-bin/token?grant_type={}&appid={}&secret={}".format(grant_type,appid,secret))# 如果返回的结果 errcode :40164 表示没有设置ip白名单 复制返回结果里的ip地址 去 基本设置里加上就 ok 了 print(response.json()) #输出请求返回的结果if response.get("access_token"):access_token = response.get('access_token')else:access_token = Nonereturn access_token

拿到了我们需要的token, 就可以就行消息的推送了, 推送的类型有很多种就不一一讲了, 就演示图文消息 它的类型是 ‘news’

发送图文消息(点击跳转到外链) 图文消息条数限制在1条以内,
注意,如果图文数超过1,则将会返回错误码45008。

{

def sendmsg():# 调用函数获取tokenaccess_token = get_access_token()body = {"touser": "openid", # 用户的openid "msgtype":"news", # 发送类型 图文消息"news":{"articles": [{"url":"url", # 用户点击跳转的外链地址"picurl":"picurl", # 图片的地址'title':"josiny 新款!", # 标题'description': "text", # 内容描述}]}}# 请求response = requests.post(url="https://api./cgi-bin/message/custom/send?access_token={}".format(access_token),data=bytes(json.dumps(body, ensure_ascii=False), encoding='utf-8'))# 这里可根据回执code进行判定是否发送成功(也可以根据code根据错误信息)res = response.json()print(res)

问题来了, 上面用户的openid 从哪儿来呢? 没关系,再写一段代码获取关注了本公众号粉丝的openid

def get_openid()# 这里获取到的是对象, 解析出来的是list 列表包含的openid# access_token 必须要的# next_openid 为空的话表示从头开始获取, 不为空的话填写 openid , 也就是说从当前的openid 往后开始获取, 一次请求好像上限是10000条, 所以, 一般用不到哈哈!openids = requests.get('https://api./cgi-bin/user/get?access_token={}&next_openid='''.format(access_token)).json()for openid in openids.get('data').get('openid'):return openid

推送图片类型image , 需要获取media_id , 这里呢也把我测试的代码贴出来, 大家自己研究!

def get_media_id():img_url = 'https://api./cgi-bin/material/add_material'payload_img = {'access_token': access_token,'type': 'image'}data = {'media': open (r"具体图片的path", 'rb' )}# 请求并返回结果r = requests.post ( url=img_url, params=payload_img, files=data )dict = r.json ()# 输出 media_id 并返回media_id = dict[ 'media_id' ]print(media_id)return media_id

写了这么多, 其实微信最坑的地方就在于, 这一类型的消息推送, 只能限制于用户与公众号互动时间小于24小时的, 如果大于24小时, 那么就将接收不到此类消息!!!

真的是…

太难了…

但是也是有一个能解决的办法, 可以先在公众平台发送一条模板文章的消息, 这样呢也能有效的解决此类问题, 但是具体是不是我们发送了之后, 用户需要点击查看文章才能算是互动, 还是说就需要我们推送一条消息就ok , 这个问题我暂时没有去测试, 如果有大佬知道的可以分享一下经验哦!!

**

- 作者不易, 辛苦码字.... 动动小手给个赞吧!!!!

**

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。