赞
踩
今天基于客服要求, 需要主动推送一个消息外链接到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’
{
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 , 这个问题我暂时没有去测试, 如果有大佬知道的可以分享一下经验哦!!
**
- 作者不易, 辛苦码字.... 动动小手给个赞吧!!!!
**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。