revoke_withdraw.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import getopt
  4. import os
  5. import sys
  6. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  7. sys.path.insert(0, PROJECT_ROOT)
  8. from script.base import init_env
  9. os.environ["DJANGO_SETTINGS_MODULE"] = "configs.production"
  10. init_env(False)
  11. def revoke(order_no, check):
  12. from library.alipay import AliPayServiceException
  13. from library.wechatbase.exceptions import WeChatPayException
  14. from apps.web.common.models import WithdrawRecord
  15. record = WithdrawRecord.objects(order = order_no).first() # type: WithdrawRecord
  16. if not record:
  17. print 'order<> not exists.'.format(order_no)
  18. from apps.web.core.payment.base import WithdrawGateway
  19. gateway = WithdrawGateway.from_withdraw_gateway_key(
  20. record.withdrawGatewayKey, record.extras.get('gateway_version', 'v1'))
  21. try:
  22. if record.payType == WithdrawRecord.WithdrawPayType.BANK:
  23. print gateway.get_transfer_result_via_bank(record.order)
  24. elif record.payType == WithdrawRecord.WithdrawPayType.WECHAT:
  25. print gateway.get_transfer_result_via_changes(record.order)
  26. except (WeChatPayException, AliPayServiceException) as e:
  27. if e.errCode not in ['ORDERNOTEXIST', 'NOT_FOUND', 'ORDER_NOT_EXIST']:
  28. if check:
  29. return
  30. from apps.web.core import ROLE
  31. payee = ROLE.from_role_id(record.role, record.ownerId)
  32. handler = payee.new_withdraw_handler(record)
  33. handler.revoke(remarks = u'平台退单', description = u'提现失败')
  34. if __name__ == '__main__':
  35. try:
  36. options, args = getopt.getopt(sys.argv[1:], 'o:c:', ['order=', 'check='])
  37. except getopt.GetoptError as e:
  38. print(str(e))
  39. sys.exit()
  40. order_no = None
  41. check = True
  42. for name, value in options:
  43. if name in ('-o', '--order'):
  44. order_no = value
  45. if name in ('-c', '--check'):
  46. if value == 'y' or value == 'Y':
  47. check = True
  48. else:
  49. check = False
  50. revoke(order_no, check)