qrcode.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import requests
  4. import six
  5. from library.wechatpy.client.api.base import BaseWeChatAPI
  6. class WeChatQRCode(BaseWeChatAPI):
  7. def create(self, qrcode_data):
  8. """
  9. 创建二维码
  10. 详情请参考
  11. https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
  12. :param qrcode_data: 你要发送的参数 dict
  13. :return: 返回的 JSON 数据包
  14. 使用示例::
  15. from wechatpy import WeChatClient
  16. client = WeChatClient('appid', 'secret')
  17. res = client.qrcode.create({
  18. 'expire_seconds': 1800,
  19. 'action_name': 'QR_SCENE',
  20. 'action_info': {
  21. 'scene': {'scene_id': 123},
  22. }
  23. })
  24. # 创建永久的二维码, 参数使用字符串而不是数字id
  25. res = client.qrcode.create({
  26. 'action_name': 'QR_LIMIT_STR_SCENE',
  27. 'action_info': {
  28. 'scene': {'scene_str': "scan_qrcode_from_scene"},
  29. }
  30. })
  31. """
  32. return self._post(
  33. 'qrcode/create',
  34. data=qrcode_data
  35. )
  36. def show(self, ticket):
  37. """
  38. 通过ticket换取二维码
  39. 详情请参考
  40. https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
  41. :param ticket: 二维码 ticket 。可以通过 :func:`create` 获取到
  42. :return: 返回的 Request 对象
  43. 使用示例::
  44. from wechatpy import WeChatClient
  45. client = WeChatClient('appid', 'secret')
  46. res = client.qrcode.show('ticket data')
  47. """
  48. if isinstance(ticket, dict):
  49. ticket = ticket['ticket']
  50. return requests.get(
  51. url='https://mp.weixin.qq.com/cgi-bin/showqrcode',
  52. params={
  53. 'ticket': ticket
  54. },
  55. timeout = 15
  56. )
  57. @classmethod
  58. def get_url(cls, ticket):
  59. """
  60. 通过ticket换取二维码地址
  61. 详情请参考
  62. https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
  63. :param ticket: 二维码 ticket 。可以通过 :func:`create` 获取到
  64. :return: 返回的二维码地址
  65. 使用示例::
  66. from wechatpy import WeChatClient
  67. client = WeChatClient('appid', 'secret')
  68. url = client.qrcode.get_url('ticket data')
  69. """
  70. url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={ticket}'
  71. if isinstance(ticket, dict):
  72. ticket = ticket['ticket']
  73. ticket = six.moves.urllib.parse.quote(ticket)
  74. return url.format(ticket=ticket)