wifi.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import datetime
  4. from optionaldict import optionaldict
  5. from library.wechatpy.client.api.base import BaseWeChatAPI
  6. class WeChatWiFi(BaseWeChatAPI):
  7. API_BASE_URL = 'https://api.weixin.qq.com/bizwifi/'
  8. def list_shops(self, page_index=1, page_size=20):
  9. """
  10. 获取门店列表
  11. 详情请参考
  12. http://mp.weixin.qq.com/wiki/15/bcfb5d4578ea818b89913472cf2bbf8f.html
  13. :param page_index: 可选,分页下标,默认从1开始
  14. :param page_size: 可选,每页的个数,默认20个,最大20个
  15. :return: 返回的 JSON 数据包
  16. """
  17. res = self._post(
  18. 'shop/list',
  19. data={
  20. 'pageindex': page_index,
  21. 'pagesize': page_size,
  22. },
  23. result_processor=lambda x: x['data']
  24. )
  25. return res
  26. def get_shop(self, shop_id=0):
  27. """
  28. 查询门店的WiFi信息
  29. http://mp.weixin.qq.com/wiki/15/bcfb5d4578ea818b89913472cf2bbf8f.html
  30. :param shop_id: 门店 ID
  31. :return: 返回的 JSON 数据包
  32. """
  33. res = self._post(
  34. 'shop/get',
  35. data={
  36. 'shop_id': shop_id,
  37. },
  38. result_processor=lambda x: x['data']
  39. )
  40. return res
  41. def add_device(self, shop_id, ssid, password, bssid):
  42. """
  43. 添加设备
  44. 详情请参考
  45. http://mp.weixin.qq.com/wiki/10/6232005bdc497f7cf8e19d4e843c70d2.html
  46. :param shop_id: 门店 ID
  47. :param ssid: 无线网络设备的ssid。非认证公众号添加的ssid必需是“WX”开头(“WX”为大写字母),
  48. 认证公众号和第三方平台无此限制;所有ssid均不能包含中文字符
  49. :param password: 无线网络设备的密码,大于8个字符,不能包含中文字符
  50. :param bssid: 无线网络设备无线mac地址,格式冒号分隔,字符长度17个,并且字母小写
  51. :return: 返回的 JSON 数据包
  52. """
  53. return self._post(
  54. 'device/add',
  55. data={
  56. 'shop_id': shop_id,
  57. 'ssid': ssid,
  58. 'password': password,
  59. 'bssid': bssid,
  60. }
  61. )
  62. def list_devices(self, shop_id=None, page_index=1, page_size=20):
  63. """
  64. 查询设备
  65. 详情请参考
  66. http://mp.weixin.qq.com/wiki/10/6232005bdc497f7cf8e19d4e843c70d2.html
  67. :param shop_id: 可选,门店 ID
  68. :param page_index: 可选,分页下标,默认从1开始
  69. :param page_size: 可选,每页的个数,默认20个,最大20个
  70. :return: 返回的 JSON 数据包
  71. """
  72. data = optionaldict(
  73. shop_id=shop_id,
  74. pageindex=page_index,
  75. pagesize=page_size
  76. )
  77. res = self._post(
  78. 'device/list',
  79. data=data,
  80. result_processor=lambda x: x['data']
  81. )
  82. return res
  83. def delete_device(self, bssid):
  84. """
  85. 删除设备
  86. 详情请参考
  87. http://mp.weixin.qq.com/wiki/10/6232005bdc497f7cf8e19d4e843c70d2.html
  88. :param bssid: 无线网络设备无线mac地址,格式冒号分隔,字符长度17个,并且字母小写
  89. :return: 返回的 JSON 数据包
  90. """
  91. return self._post('device/delete', data={'bssid': bssid})
  92. def get_qrcode_url(self, shop_id, img_id):
  93. """
  94. 获取物料二维码图片网址
  95. 详情请参考
  96. http://mp.weixin.qq.com/wiki/7/fcd0378ef00617fc276be2b3baa80973.html
  97. :param shop_id: 门店 ID
  98. :param img_id: 物料样式编号:0-二维码,可用于自由设计宣传材料;
  99. 1-桌贴(二维码),100mm×100mm(宽×高),可直接张贴
  100. :return: 二维码图片网址
  101. """
  102. res = self._post(
  103. 'qrcode/get',
  104. data={
  105. 'shop_id': shop_id,
  106. 'img_id': img_id,
  107. },
  108. result_processor=lambda x: x['data']['qrcode_url']
  109. )
  110. return res
  111. def set_homepage(self, shop_id, template_id, url=None):
  112. """
  113. 设置商家主页
  114. 详情请参考
  115. http://mp.weixin.qq.com/wiki/6/2732f3cf83947e0e4971aa8797ee9d6a.html
  116. :param shop_id: 门店 ID
  117. :param template_id: 模板ID,0-默认模板,1-自定义url
  118. :param url: 自定义链接,当template_id为1时必填
  119. :return: 返回的 JSON 数据包
  120. """
  121. data = {
  122. 'shop_id': shop_id,
  123. 'template_id': template_id,
  124. }
  125. if url:
  126. data['struct'] = {'url': url}
  127. return self._post('homepage/set', data=data)
  128. def get_homepage(self, shop_id):
  129. """
  130. 查询商家主页
  131. 详情请参考
  132. http://mp.weixin.qq.com/wiki/6/2732f3cf83947e0e4971aa8797ee9d6a.html
  133. :param shop_id: 门店 ID
  134. :return: 返回的 JSON 数据包
  135. """
  136. res = self._post(
  137. 'homepage/get',
  138. data={'shop_id': shop_id},
  139. result_processor=lambda x: x['data']
  140. )
  141. return res
  142. def list_statistics(self, begin_date, end_date, shop_id=-1):
  143. """
  144. Wi-Fi数据统计
  145. 详情请参考
  146. http://mp.weixin.qq.com/wiki/8/dfa2b756b66fca5d9b1211bc18812698.html
  147. :param begin_date: 起始日期时间,最长时间跨度为30天
  148. :param end_date: 结束日期时间戳,最长时间跨度为30天
  149. :param shop_id: 可选,门店 ID,按门店ID搜索,-1为总统计
  150. :return: 返回的 JSON 数据包
  151. """
  152. if isinstance(begin_date, (datetime, datetime.date)):
  153. begin_date = begin_date.strftime('%Y-%m-%d')
  154. if isinstance(end_date, (datetime, datetime.date)):
  155. end_date = end_date.strftime('%Y-%m-%d')
  156. res = self._post(
  157. 'statistics/list',
  158. data={
  159. 'begin_date': begin_date,
  160. 'end_date': end_date,
  161. 'shop_id': shop_id
  162. },
  163. result_processor=lambda x: x['data']
  164. )
  165. return res