coupon.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import random
  4. import datetime
  5. from library.wechatpy.pay.base import BaseWeChatPayAPI
  6. class WeChatCoupon(BaseWeChatPayAPI):
  7. def send(self, user_id, stock_id, op_user_id=None, device_info=None,
  8. out_trade_no=None):
  9. """
  10. 发放代金券
  11. :param user_id: 用户在公众号下的 openid
  12. :param stock_id: 代金券批次 ID
  13. :param op_user_id: 可选,操作员账号,默认为商户号
  14. :param device_info: 可选,微信支付分配的终端设备号
  15. :param out_trade_no: 可选,商户订单号,需保持唯一性,默认自动生成
  16. :return: 返回的结果信息
  17. """
  18. if not out_trade_no:
  19. now = datetime.datetime.now()
  20. out_trade_no = '{0}{1}{2}'.format(
  21. self.mch_id,
  22. now.strftime('%Y%m%d%H%M%S'),
  23. random.randint(1000, 10000)
  24. )
  25. data = {
  26. 'appid': self.appid,
  27. 'coupon_stock_id': stock_id,
  28. 'openid': user_id,
  29. 'openid_count': 1,
  30. 'partner_trade_no': out_trade_no,
  31. 'op_user_id': op_user_id,
  32. 'device_info': device_info,
  33. 'version': '1.0',
  34. 'type': 'XML',
  35. }
  36. return self._post('mmpaymkttransfers/send_coupon', data=data)
  37. def query_stock(self, stock_id, op_user_id=None, device_info=None):
  38. """
  39. 查询代金券批次
  40. :param stock_id: 代金券批次 ID
  41. :param op_user_id: 可选,操作员账号,默认为商户号
  42. :param device_info: 可选,微信支付分配的终端设备号
  43. :return: 返回的结果信息
  44. """
  45. data = {
  46. 'appid': self.appid,
  47. 'coupon_stock_id': stock_id,
  48. 'op_user_id': op_user_id,
  49. 'device_info': device_info,
  50. 'version': '1.0',
  51. 'type': 'XML',
  52. }
  53. return self._post('mmpaymkttransfers/query_coupon_stock', data=data)
  54. def query_coupon(self, coupon_id, user_id,
  55. op_user_id=None, device_info=None):
  56. """
  57. 查询代金券信息
  58. :param coupon_id: 代金券 ID
  59. :param user_id: 用户在公众号下的 openid
  60. :param op_user_id: 可选,操作员账号,默认为商户号
  61. :param device_info: 可选,微信支付分配的终端设备号
  62. :return: 返回的结果信息
  63. """
  64. data = {
  65. 'coupon_id': coupon_id,
  66. 'openid': user_id,
  67. 'appid': self.appid,
  68. 'op_user_id': op_user_id,
  69. 'device_info': device_info,
  70. 'version': '1.0',
  71. 'type': 'XML',
  72. }
  73. return self._post('promotion/query_coupon', data=data)