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

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

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

首要:

注册直通车

1. 你需要注册一个微信公众平台的服务号或者订阅号, 我使用的是企业版的

2. 完成之后呢, 需要你去 :开发--基本配置--配置你的 appid 和 appsecret

3. 学会读开发文档,

开发文档

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

import requests

import json

def get_access_token():

"""

获取微信全局接口的凭证(默认有效期俩个小时)

如果不每天请求次数过多, 通过设置缓存即可, 每天的次数限制大概是2000次

"""

# 获取access_token 需要的参数

grant_type = 'client_credential' # 这个固定不变

appid= "appid"

secret="appsecret"

response = requests.get(

url="https://api.weixin.qq.com/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 = None

return access_token

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

发送图文消息(点击跳转到外链) 图文消息条数限制在1条以内,

注意,如果图文数超过1,则将会返回错误码45008。

{

def sendmsg():

# 调用函数获取token

access_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.weixin.qq.com/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.weixin.qq.com/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.weixin.qq.com/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 , 这个问题我暂时没有去测试, 如果有大佬知道的可以分享一下经验哦!!

**

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

**

相关文章

詹俊:致敬老兵莫德里奇 摩洛哥也大大鼓舞了非洲足球
365bet育在线网址

詹俊:致敬老兵莫德里奇 摩洛哥也大大鼓舞了非洲足球

⌚ 07-28 👁️‍🗨️ 2456
不同月龄的宝宝每天要吃多少奶才够?该如何控制奶量?
beat365手机版官方网站

不同月龄的宝宝每天要吃多少奶才够?该如何控制奶量?

⌚ 07-09 👁️‍🗨️ 6536
各种发电方式大评比
beat365手机版官方网站

各种发电方式大评比

⌚ 08-05 👁️‍🗨️ 5780