微信公众号之主动图文消息推送 ---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 , 这个问题我暂时没有去测试, 如果有大佬知道的可以分享一下经验哦!!

**

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

**微信公众号之主动图文消息推送 ---python_第1张图片

你可能感兴趣的:(python)