前言

这是在开发小程序过程中用到的一个类,这里放出来希望对大家有一些帮助。

class WeAPP():def __new__(cls, *args, **kwargs):if not hasattr(cls, '_instance'):cls._instance = super(WeAPP, cls).__new__(cls, *args, **kwargs)return cls._instancedef __init__(self):self.id = WEAPP_IDself.secret = WEAPP_SECRETself.base_url = "https://api.weixin.qq.com"self.headers = {"content-type": "application/json"}self.expire_date = 0self.access_token=Noneself.get_token()def get_token(self):d=self.expire_date - int(time.time()/1000)if  d>0:return self.access_tokenelse:d=self.req("/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"%(self.id,self.secret))self.expire_date=int(time.time()/1000) + d.get("expires_in") - 200self.access_token=d["access_token"]log.debug("weapp 获取新的token: %s" % self.access_token)return d["access_token"]def req(self, url, method="get", data={}):log.debug("url=>%s data=>%s" %(self.base_url+url,json.dumps(data)))r = requests.request(method, self.base_url+url,json=data, headers=self.headers)body = json.loads(r.text)return bodydef login(self, code):log.debug("小程序登录: /sns/jscode2session?appid=?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" %(self.id, self.secret, code))url = '/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code' % (self.id, self.secret, code)return self.req(url)def send_subscribeMessage(self,openid,template_id,data,page=None,miniprogram_state="formal"):'''page: 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。data: 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }miniprogram_state:跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版'''url="/cgi-bin/message/subscribe/send?access_token=%s"%self.get_token()res=self.req(url,method="post",data={"access_token":self.get_token(),"touser":openid,"template_id":template_id,"data":data,"page":page,"miniprogram_state":miniprogram_state})if res.get("errcode") != 0:log.debug("发送订阅消息失败: %s "% res.get("errmsg"))

用法

这里通过new方法,限制类的重复初始化(主要为了避免token重复请求失效)

# 小程序登录
WeAPP().login("小程序login生成的code")
# 发送订阅消息
WeAPP().send_subscribeMessage(openid,template_id,data,page=None,miniprogram_state="formal")

有哪里不明白的可以给我留言。

使用python封装了一个获取小程序token,发送订阅消息的类相关推荐

  1. 微信小程序之发送通知消息(通过openid推送消息给用户)

    微信小程序之发送通知消息(通过openid推送消息给用户) 一.获取access_token access_token是接口调用的凭证,目前有效期为两个小时,需要定时刷新,重复获取将导致上次获取的ac ...

  2. 【微信小程序】(三)订阅消息实现

    微信小程序订阅消息指的是用户在你的小程序中进行了一些操作,你的小程序可以在某一个时间点向该用户发送消息,通知用户操作的结果.比如用户想要小程序在某一天通知他去买票,在小程序中授予通知权限之后,小程序在 ...

  3. 微信小程序云开发-订阅消息下发系统

    一.前言 本篇文章需要实现的是一个基于云开发搭配CMS实现的消息下发系统.当然不是简简单单的实现功能就好,在实现之前我们需要考虑这个功能的可拓展性以及可复性. 具体的业务场景:管理员登陆CMS系统后可 ...

  4. 使用微信小程序新的订阅消息接口,主动推送。

    小程序订阅消息,昨天刚上线,今天就体验了一下,遇到不少问题,不过还好都解决了. 首先:你需要在小程序后台,选择一个模板,和公众号差不多,不过这里一定要注意,选择模板和你的类目有关系,只出现你类目相关的 ...

  5. 微信小程序 云开发 订阅消息 获取下发权限失败 errCode: 20001

    通过下面的代码获取订阅消息的下发权限 提示错误 errMsg: "requestSubscribeMessage:fail No template data return, verify t ...

  6. 小程序如何使用订阅消息(PHP代码+小程序js代码)

    ??? 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,欢迎加入人工智能交流群(看我的动态),更多周边福利等你??? 欢迎订阅本专栏或者关注我,大家一起努力每天一题算法题 最后,希望 ...

  7. 微信小程序|基于小程序实现发送语音消息及转文字

    此文主要在小程序内聊天的基础上实现语音发送及文字转换. 小程序 账号创建及工具准备 页面大体设计 实现录音功能 实现对话界面 语音转换文字 账号创建及应用申请 实现语音转文字 小程序 账号创建及工具准 ...

  8. PHP小程序接口的模板消息,微信小程序PHP 发送模板消息通知

    注意: 首先,模板消息接口需写在后台服务器上.[追加!目前微信小程序  模板消息只能本人触发并发给本人.] 2018.4.9修改 :1次提交表单可下发1条,多次提交下发条数独立,相互不影响: 1次支付 ...

  9. 微信小程序js发送模板消息

    微信小程序的Java的的后台获取的的的access_token存储数据库并接通本更新https://blog.csdn.net/weixin_41716049/article/details/8406 ...

最新文章

  1. React for循环渲染组件
  2. 美团高级技术专家:DDD 在旅游电商架构演进中的实践
  3. angularjs 日期倒计时效果
  4. HTML中常用字符实体
  5. 程序员的职业素养-读书笔记
  6. python学习笔记之——range()函数
  7. ABAP应用服务器的HTTP响应状态码(Status Code)
  8. qt如何实现backspace的功能_如何实现知识星球列表拖拽功能
  9. 0-5v转0-20ma和0-5v转4-20ma
  10. SSH连接GitHub并配置ssh key
  11. java sqlite sqlite_busy_sqlite3出现SQLITE_BUSY错误码的原因以及解决方法
  12. 计算机专科大学三年规划书,专科大学规划书范文
  13. 损失函数 Loss、梯度 grad、参数 ω 和 学习率 lr 之间的关系
  14. 综合架构——网站服务
  15. 计算机的许可服务在哪里打开,Win10服务在哪里,怎么打开Win10服务列表?
  16. linux 键盘测试程序员,程序员之家打字测试
  17. 更开放的苹果能否改变iOS越狱市场的未来?
  18. linux surface pro 4 driver,重置出错?微软Win10平板Surface Pro 4重装系统教程详解
  19. 电子商务系统安全的解决方案
  20. 哈希表及哈希冲突的解决

热门文章

  1. 005_HTML制作炫酷登录界面(CSS精灵图、背景图片局部显示)
  2. OFDMA正交频分技术
  3. Octapharma Group公布强劲的2018年业绩
  4. ios 根据日期知道周几_iOS 获取当前日期是周几
  5. 大数据路线,大数据要学习什么知识技能
  6. mininet 主机双网关拓扑设计
  7. 普通平键的主要尺寸有_平键的基本参数
  8. java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0
  9. TTL与非门多余的输入端处置办法及其优缺点
  10. 如何扩充C盘空间,不需要删除其余盘的任何东西。