Feng’ Blog

微信公众号发送模板消息
微信公众号发送模板消息因需要用到appid和appsecret,若没有公众号的就先申请一个测试账号: http:/...
扫描右侧二维码阅读全文
02
2019/03

微信公众号发送模板消息

微信公众号发送模板消息

因需要用到appid和appsecret,若没有公众号的就先申请一个测试账号: http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

发送微信模板消息需要在公众号后台设置相应的模板。方便测试,我设置的模板如下:

{{title.DATA}} 姓名:{{name.DATA}} 时间:{{time.DATA}} 工资:{{number.DATA}}

只显示4个字段

w2.png

w1.png

创建好后,记住创建后的模板id。(当然也可以使用微信提供的api获取模板)

获取微信access_token值

@classmethod
def get_wx_access_token(cls, appid, secret):
   """
   获取微信access_token值 该值有效期为2小时,超过时间需要重新获取
   :param appid:
   :param secret:
   :return: string
   """
   url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}".format(appid, secret)
   try:
      result = requests.get(url=url)
      result = json.loads(result.text)
      return result.get('access_token')
   except KeyError:
      raise UserWarning("获取微信access_token值失败!")

appid和secret在自己的公众号中。

获取公众号用户列表,用户获取用户的openid

@classmethod
def get_wx_users(cls, access_token, next_openid):
   """获取用户类表
   :param access_token: 调用接口凭证
   :param next_openid: 第一个拉取的OPENID,不填默认从头开始拉取
   :return 第一个用户的openid
   """
   url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={}&next_openid={}".format(access_token, next_openid)
   result = requests.get(url=url)
   result_data = json.loads(result.text).get('data')
   for openid in result_data.get('openid'):
      return openid

这个函数只是返回了第一个用户的openid,因为我只是测试我自己的微信号,在公众号中也只有我一个。

发送消息至用户

@classmethod
def send_message_touser(cls, access_token, openid, template_id):
   """发送模板消息
   :param access_token 凭证秘钥
   :param openid 接受消息的用户openid
   :param template_id 消息模板id
   """
   url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}'.format(access_token)
   data = {
      "touser": openid,
      "template_id": template_id,
      "data": {
         "title": {
            "value": "测试发送工资消息!",
            "color": "#0000CD"
         },
         "name": {
            "value": "张三",
            "color": "#DC143C"
         },
         "time": {
            "value": str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
            "color": "#006400"
         },
         "number": {
            "value": '¥100000000',
            "color": "#FFA500"
         }
      }
   }
   headers = {'Content-Type': 'application/json'}
   result = requests.post(url=url, headers=headers, data=json.dumps(data))
   result_data = json.loads(result.text)
   if result_data.get('errcode') != 0:
      logging.info("微信消息模板发送不成功!")
   else:
      logging.info("发送消息模板成功!")

最后测试发送

@api.multi
def send_message(self):
   appid = 'appid'   # 替换为自己的appid
   secret = 'secret'  # 替换为自己的secret
   access_token = self.get_wx_access_token(appid, secret)
   print(access_token)
   openid = self.get_wx_users(access_token, next_openid='')
   print(openid)
   template_id = 'Wlfh6i2AKo_5cbogdr_1hZHqHYGAgsjLmvnm8oD0MSc'
   self.send_message_touser(access_token, openid, template_id)

效果图:
15DFD14B2F9A04B8294E40A51404B162.png

Last modification:March 2nd, 2019 at 08:04 pm
If you think my article is useful to you, please feel free to appreciate

One comment

  1. adapt

    大佬,能分享一下源码吗?

Leave a Comment