from django_redis import get_redis_connection from dspt_api.models import EcChannel, EcEnv from django.db.models import Q from dspt_api.util.general.sign import Sign import requests def get_card(ip, env, pid, cid, card=None): if card is not None and card != "请手动输入会员卡号": set_card(ip, env, pid, cid, card) return True, card redis_con = get_redis_connection() redis_key = f"card_{ip}_{env}_{pid}_{cid}" print('get_card-card_num', redis_key) if redis_con.exists(redis_key): card_num = redis_con.get(redis_key) print('get_card-card_num', card_num) return True, str(card_num, encoding='utf-8') return False, '请手动输入会员卡号' def set_card(ip, env, pid, cid, card): redis_con = get_redis_connection() redis_key = f"card_{ip}_{env}_{pid}_{cid}" if redis_con.exists(redis_key): redis_con.delete(redis_key) return redis_con.set(redis_key, card) def get_card_type(env, pid, cid, card): params = { 'format': 'json', 'pid': pid, 'cid': cid, 'card': card, } try: base_url = EcEnv.objects.filter(Q(code=env) & Q(type='member')).values('host').first()['host'] except Exception as e: return False, e request_url = f"{base_url}/card/detail" try: key = EcChannel.objects.filter(Q(pid=pid) & Q(env=env)).values('channel_key').first()['channel_key'] except Exception as e: return False, e sign = Sign(key) req_params = sign.add_sig(params) response = requests.get(request_url, params=req_params) if response.json()['res']['status'] != 1: return False else: return response.json()['res']['data']['cardType'] def get_card_val(env, pid, cid, card, param): params = { 'format': 'json', 'pid': pid, 'cid': cid, 'card': card, } try: base_url = EcEnv.objects.filter(Q(code=env) & Q(type='member')).values('host').first()['host'] except Exception as e: return False, e card_request_url = f"{base_url}/card/detail" try: key = EcChannel.objects.filter(Q(pid=pid) & Q(env=env)).values('channel_key').first()['channel_key'] except Exception as e: return False, e sign = Sign(key) card_req_params = sign.add_sig(params) card_response = requests.get(card_request_url, params=card_req_params) if card_response.json()['res']['status'] != 1: return False else: return card_response.json()['res']['data'][param] def get_card_level_val(env, pid, cid, card, param): card_params = { 'format': 'json', 'pid': pid, 'cid': cid, 'card': card, } try: base_url = EcEnv.objects.filter(Q(code=env) & Q(type='member')).values('host').first()['host'] except Exception as e: return False, e card_request_url = f"{base_url}/card/detail" try: key = EcChannel.objects.filter(Q(pid=pid) & Q(env=env)).values('channel_key').first()['channel_key'] except Exception as e: return False, e sign = Sign(key) card_req_params = sign.add_sig(card_params) card_response = requests.get(card_request_url, params=card_req_params) if card_response.json()['res']['status'] != 1: return False card_level_id = card_response.json()['res']['data']['cardLevelId'] card_level_params = { 'format': 'json', 'pid': pid, 'cid': cid, } card_level_request_url = f"{base_url}/cinema/card-level-rule" card_level_req_params = sign.add_sig(card_level_params) card_level_response = requests.get(card_level_request_url, params=card_level_req_params) if card_level_response.json()['res']['status'] != 1: return False for level in card_level_response.json()['res']['data']['rule']: if level['levelId'] == card_level_id: return level[param] return False