events.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from wechatpy import events
  4. from wechatpy.fields import BaseField, IntegerField
  5. EVENT_TYPES = {}
  6. def register_event(event_type):
  7. def register(cls):
  8. EVENT_TYPES[event_type] = cls
  9. return cls
  10. return register
  11. @register_event('subscribe')
  12. class SubscribeEvent(events.SubscribeEvent):
  13. """
  14. 成员关注事件
  15. 详情请参阅
  16. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  17. """
  18. agent = IntegerField('AgentID', 0)
  19. @register_event('unsubscribe')
  20. class UnsubscribeEvent(events.UnsubscribeEvent):
  21. """
  22. 成员取消关注事件
  23. 详情请参阅
  24. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  25. """
  26. agent = IntegerField('AgentID', 0)
  27. @register_event('click')
  28. class ClickEvent(events.ClickEvent):
  29. """
  30. 点击菜单拉取消息事件
  31. 详情请参阅
  32. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  33. """
  34. agent = IntegerField('AgentID', 0)
  35. @register_event('view')
  36. class ViewEvent(events.ViewEvent):
  37. """
  38. 点击菜单跳转链接事件
  39. 详情请参阅
  40. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  41. """
  42. agent = IntegerField('AgentID', 0)
  43. @register_event('location')
  44. class LocationEvent(events.LocationEvent):
  45. """
  46. 上报地理位置事件
  47. 详情请参阅
  48. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  49. """
  50. agent = IntegerField('AgentID', 0)
  51. @register_event('scancode_push')
  52. class ScanCodePushEvent(events.ScanCodePushEvent):
  53. """
  54. 扫码推事件的事件
  55. 详情请参阅
  56. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  57. """
  58. agent = IntegerField('AgentID', 0)
  59. @register_event('scancode_waitmsg')
  60. class ScanCodeWaitMsgEvent(events.ScanCodeWaitMsgEvent):
  61. """
  62. 扫码推事件且弹出“消息接收中”提示框的事件
  63. 详情请参阅
  64. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  65. """
  66. agent = IntegerField('AgentID', 0)
  67. @register_event('pic_sysphoto')
  68. class PicSysPhotoEvent(events.PicSysPhotoEvent):
  69. """
  70. 弹出系统拍照发图事件
  71. 详情请参阅
  72. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  73. """
  74. agent = IntegerField('AgentID', 0)
  75. @register_event('pic_photo_or_album')
  76. class PicPhotoOrAlbumEvent(events.PicPhotoOrAlbumEvent):
  77. """
  78. 弹出拍照或相册发图事件
  79. 详情请参阅
  80. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  81. """
  82. agent = IntegerField('AgentID', 0)
  83. @register_event('pic_weixin')
  84. class PicWeChatEvent(events.PicWeChatEvent):
  85. """
  86. 弹出微信相册发图器事件
  87. 详情请参阅
  88. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  89. """
  90. agent = IntegerField('AgentID', 0)
  91. @register_event('location_select')
  92. class LocationSelectEvent(events.LocationSelectEvent):
  93. """
  94. 弹出地理位置选择器事件
  95. 详情请参阅
  96. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  97. """
  98. agent = IntegerField('AgentID', 0)
  99. @register_event('enter_agent')
  100. class EnterAgentEvent(events.BaseEvent):
  101. """
  102. 用户进入应用的事件推送
  103. 详情请参阅
  104. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  105. """
  106. agent = IntegerField('AgentID', 0)
  107. event = 'enter_agent'
  108. @register_event('batch_job_result')
  109. class BatchJobResultEvent(events.BaseEvent):
  110. """
  111. 异步任务完成事件
  112. 详情请参阅
  113. http://qydev.weixin.qq.com/wiki/index.php?title=接受事件
  114. """
  115. event = 'batch_job_result'
  116. batch_job = BaseField('BatchJob')
  117. @property
  118. def job_id(self):
  119. return self.batch_job['JobId']
  120. @property
  121. def job_type(self):
  122. return self.batch_job['JobType']
  123. @property
  124. def err_code(self):
  125. return self.batch_job['ErrCode']
  126. @property
  127. def err_msg(self):
  128. return self.batch_job['ErrMsg']