123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import logging
- import os
- import sys
- PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
- sys.path.insert(0, PROJECT_ROOT)
- from script.base import init_env
- os.environ["DJANGO_SETTINGS_MODULE"] = "configs.production_local"
- init_env(False)
- from apps.web.user.models import RechargeRecord, RefundMoneyRecord
- from apps.web.core.payment import PaymentGateway
- from apps.web.common.transaction.pay import PayManager, PayRecordPoller, PayNotifyAction
- from apilib.monetary import RMB, VirtualCoin
- from apps.web.user.transaction_deprecated import refund_cash
- REPAIR = False # false 的情况下 只输入记录 不对任何记录进行修改
- LEFT_TIME = datetime.datetime.strptime("2022-04-01 00:00:00", "%Y-%m-%d %H:%M:%S") # 修复记录的起始时间
- RIGHT_TIME = datetime.datetime.strptime("2022-04-02 00:00:00", "%Y-%m-%d %H:%M:%S") # 修复记录的结束时间
- RECHARGE_NO = '20220425121623PQ0000000005483RKJ'
- logger = logging.getLogger(__name__)
- def unpay_post_pay(record):
- # type:(RechargeRecord)->None
- # 不分账也是说明已经完成分账动作
- record.set_ledgered()
- refund_order = refund_cash(record, RMB(record.money), VirtualCoin(0)) # type: RefundMoneyRecord
- if not refund_order:
- logger.error('refund for order<id={}> failure.'.format(str(record.id)))
- def get_records():
- if RECHARGE_NO:
- filters = {"orderNo": RECHARGE_NO, 'result': RechargeRecord.PayResult.UNPAY}
- else:
- filters = {
- "dateTimeAdded__gte": LEFT_TIME,
- "dateTimeAdded__lt": RIGHT_TIME,
- "result": RechargeRecord.PayResult.UNPAY,
- }
- records = RechargeRecord.objects.filter(
- **filters
- )
- return records
- def do_unpay_record(record):
- payment_gateway = PaymentGateway.from_gateway_key(
- record.gateway,
- record.payGatewayKey,
- record.payAppType)
- # 根据支付方式不通拿到不同的请求实例
- pollCls = PayManager().get_poller(pay_app_type=payment_gateway.pay_app_type)
- poll = pollCls(
- record_id=str(record.id),
- interval=False,
- total_count=1,
- record_cls=RechargeRecord,
- post_pay=unpay_post_pay
- ) # type: PayRecordPoller
- if REPAIR:
- poll.start()
- else:
- payment_gateway = PaymentGateway.from_gateway_key(
- record.gateway,
- record.payGatewayKey,
- record.payAppType)
- action, result = poll.action_of_pay(payment_gateway, record)
- if action == PayNotifyAction.NeedHandle:
- print 'record<id={},order={}> need to do.'.format(str(record.id), record.orderNo)
- def run():
- records = get_records()
- for record in records: # type: RechargeRecord
- # 去第三方查询 支付结果
- do_unpay_record(record)
- if __name__ == '__main__':
- run()
|