micropay.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import random
  4. import datetime
  5. from library.wechatpy.pay.utils import get_external_ip
  6. from library.wechatpy.pay.base import BaseWeChatPayAPI
  7. class WeChatMicroPay(BaseWeChatPayAPI):
  8. def create(self, body, total_fee, auth_code, client_ip=None, out_trade_no=None, detail=None, attach=None,
  9. fee_type='CNY', goods_tag=None, device_info=None, limit_pay=None):
  10. """
  11. 刷卡支付接口
  12. :param device_info: 可选,终端设备号(商户自定义,如门店编号)
  13. :param body: 商品描述
  14. :param detail: 可选,商品详情
  15. :param attach: 可选,附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
  16. :param client_ip: 可选,APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
  17. :param out_trade_no: 可选,商户订单号,默认自动生成
  18. :param total_fee: 总金额,单位分
  19. :param fee_type: 可选,符合ISO 4217标准的三位字母代码,默认人民币:CNY
  20. :param goods_tag: 可选,商品标记,代金券或立减优惠功能的参数
  21. :param limit_pay: 可选,指定支付方式,no_credit--指定不能使用信用卡支付
  22. :param auth_code: 授权码,扫码支付授权码,设备读取用户微信中的条码或者二维码信息
  23. :return: 返回的结果数据
  24. """
  25. now = datetime.datetime.now()
  26. if not out_trade_no:
  27. out_trade_no = '{0}{1}{2}'.format(
  28. self.mch_id,
  29. now.strftime('%Y%m%d%H%M%S'),
  30. random.randint(1000, 10000)
  31. )
  32. data = {
  33. 'appid': self.appid,
  34. 'device_info': device_info,
  35. 'body': body,
  36. 'detail': detail,
  37. 'attach': attach,
  38. 'out_trade_no': out_trade_no,
  39. 'total_fee': total_fee,
  40. 'fee_type': fee_type,
  41. 'spbill_create_ip': client_ip or get_external_ip(),
  42. 'goods_tag': goods_tag,
  43. 'limit_pay': limit_pay,
  44. 'auth_code': auth_code,
  45. }
  46. return self._post('pay/micropay', data=data)
  47. def query(self, transaction_id=None, out_trade_no=None):
  48. """
  49. 查询订单
  50. :param transaction_id: 微信的订单号,优先使用
  51. :param out_trade_no: 商户系统内部的订单号,当没提供transaction_id时需要传这个。
  52. :return: 返回的结果数据
  53. """
  54. data = {
  55. 'appid': self.appid,
  56. 'transaction_id': transaction_id,
  57. 'out_trade_no': out_trade_no,
  58. }
  59. return self._post('pay/orderquery', data=data)