2025-03-18 08:46:50 +08:00

161 lines
9.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework.views import APIView
from apps.lyTiktokUnion.models import DYSystemAccount
from utils.jsonResponse import SuccessResponse,ErrorResponse,DetailResponse
from utils.common import get_parameter_dic,formatdatetime,float2dot,getminrandomodernum,ast_convert,getLyStateEncrypt,verifyLyStateEncript
from django.db.models import Q,F,Sum,Count
from django.db import transaction
from rest_framework import serializers
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework.permissions import IsAuthenticated
from utils.pagination import CustomPagination
from utils.douyin.doudian_utils import doudian
import time
import datetime
from django.http import HttpResponse,HttpResponseRedirect
from utils.douyin.douyinUnion_utils import douyinUnion
from config import DOUDIAN_TUANZHUANG_ZIYAN_APPKEY,DOUDIAN_TUANZHUANG_ZIYAN_APPSECRET,DOUDIAN_DKLIVE_ZIYAN_APPKEY,DOUDIAN_DKLIVE_ZIYAN_APPSECRET,DOUDIAN_DKFX_TOOL_APPKEY,DOUDIAN_DKFX_TOOL_APPSECRET
import logging
logger = logging.getLogger(__name__)
#联盟抖店应用自研型/工具型授权回调(使用地址)
class DoudianUnionCodeCallbackView(APIView):
'''
#联盟抖店应用自研型授权回调(使用地址)-自研型登录右上角设置-授权管理-点击应用授权后点击【使用】即开始授权code回调
get:
'''
authentication_classes = []
permission_classes = []
def get(self, request):
reqdata = get_parameter_dic(request)
code = reqdata.get('code',None)
state = reqdata.get('state',None)#无state回调
if not all([code]):
# return HttpResponse("非法请求")
return HttpResponseRedirect("/#/login")
logger.info("抖店联盟团长自研获取code回调信息code=%s|state=%s"%(code,state))
newdoudian_tz_yz = doudian(app_key=DOUDIAN_TUANZHUANG_ZIYAN_APPKEY,app_secret=DOUDIAN_TUANZHUANG_ZIYAN_APPSECRET,app_type="tool",code=code)
res = newdoudian_tz_yz.init_token(code=code)
if not res:
return HttpResponse("获取授权失败!!!")
name = ""
buyinid = ""
buyininfo = newdoudian_tz_yz.getBuyinInstitutionInfo()
access_token_expire_in = int(newdoudian_tz_yz.get_cache_access_token_ttl())
refresh_access_expire_in = int(newdoudian_tz_yz.get_cache_refresh_access_token_ttl())
if buyininfo and buyininfo.get("code") == 10000:
name = buyininfo.get("data").get("colonel").get("name")
buyinid = buyininfo.get("data").get("colonel").get("buyin_id")
newdoudian_tz_yz.set_cache_buyin_id(buyin_id=buyinid, expires=access_token_expire_in)
else:
buyinid = newdoudian_tz_yz.get_cache_buyin_id()
new_access_token = newdoudian_tz_yz.get_access_token()
new_refresh_token = newdoudian_tz_yz.get_cache_refresh_token()
nowtimestap = int(time.time())
access_token_expire = datetime.datetime.fromtimestamp(nowtimestap + access_token_expire_in)
refresh_token_expire = datetime.datetime.fromtimestamp(nowtimestap + refresh_access_expire_in)
defaults = {'access_token': new_access_token, 'refresh_token': new_refresh_token, 'identity': 2,'nickname': name, 'access_token_expire': access_token_expire,'refresh_token_expire': refresh_token_expire}
instance, created = DYSystemAccount.objects.get_or_create(buyin_id=buyinid, defaults=defaults)
if not created:
instance.buyin_id = buyinid
instance.nickname = name
instance.access_token = new_access_token
instance.refresh_token = new_refresh_token
instance.access_token_expire = access_token_expire
instance.refresh_token_expire = refresh_token_expire
instance.is_delete = False
instance.status = True
instance.save()
DYSystemAccount.objects.filter(identity=2).exclude(id=instance.id).update(is_delete=True, status=False)
return HttpResponse("获取授权成功!")
#联盟抖店应用自研型/工具型授权回调(使用地址)--直播间 联盟抖客分销[工具型]
class DoudianUnionDKLiveCodeCallbackView(APIView):
'''
1、联盟抖店应用自研型授权回调使用地址-自研型登录右上角设置-授权管理-点击应用授权后点击【使用】即开始授权code回调此种方式无state返回
2、抖客/达人可以使用拼链接的形式此种方式有state返回
get:
'''
authentication_classes = []
permission_classes = []
def get(self, request):
reqdata = get_parameter_dic(request)
code = reqdata.get('code',None)
state = reqdata.get('state',None)
if not all([code]):
# return HttpResponse("非法请求")
return HttpResponseRedirect("/#/login")
logger.info("抖店联盟联盟抖客分销获取code回调信息code=%s|state=%s"%(code,state))
newdoudian_dkfx_gj = doudian(app_key=DOUDIAN_DKFX_TOOL_APPKEY,app_secret=DOUDIAN_DKFX_TOOL_APPSECRET,app_type="tool",code="test")
res = newdoudian_dkfx_gj.init_token(code=code)
if not res:
return HttpResponse("获取授权失败!!!")
name = ""
buyinid = ""
buyininfo = newdoudian_dkfx_gj.getBuyinInstitutionInfo()
logger.info("抖客授权获取百应ID信息结果%s"%buyininfo)
access_token_expire_in = int(newdoudian_dkfx_gj.get_cache_access_token_ttl())
refresh_access_expire_in = int(newdoudian_dkfx_gj.get_cache_refresh_access_token_ttl())
if buyininfo and buyininfo.get("code") == 10000:
name = buyininfo.get("data").get("douke").get("name")
buyinid = buyininfo.get("data").get("douke").get("buyin_id")
newdoudian_dkfx_gj.set_cache_buyin_id(buyin_id=buyinid,expires=access_token_expire_in)
else:
buyinid = newdoudian_dkfx_gj.get_cache_buyin_id()
new_access_token = newdoudian_dkfx_gj.get_access_token()
new_refresh_token = newdoudian_dkfx_gj.get_cache_refresh_token()
nowtimestap = int(time.time())
access_token_expire = datetime.datetime.fromtimestamp(nowtimestap + access_token_expire_in)
refresh_token_expire = datetime.datetime.fromtimestamp(nowtimestap + refresh_access_expire_in)
defaults = {'access_token': new_access_token,'refresh_token': new_refresh_token,'identity':1,'nickname':name,'access_token_expire':access_token_expire,'refresh_token_expire':refresh_token_expire}
instance, created = DYSystemAccount.objects.get_or_create(buyin_id=buyinid,defaults=defaults)
if not created:
instance.buyin_id = buyinid
instance.nickname = name
instance.access_token = new_access_token
instance.refresh_token = new_refresh_token
instance.access_token_expire = access_token_expire
instance.refresh_token_expire = refresh_token_expire
instance.is_delete = False
instance.status = True
instance.save()
DYSystemAccount.objects.filter(identity=1).exclude(id=instance.id).update(is_delete=True, status=False)
return HttpResponse("获取授权成功!")
#联盟抖店应用自研型/工具型授权回调(使用地址)--直播间 联盟抖客直播间分销
class DoudianUnionDKLiveCodeCallbackView2(APIView):
'''
1、联盟抖店应用自研型授权回调使用地址-自研型登录右上角设置-授权管理-点击应用授权后点击【使用】即开始授权code回调此种方式无state返回
2、抖客/达人可以使用拼链接的形式此种方式有state返回
get:
'''
authentication_classes = []
permission_classes = []
def get(self, request):
reqdata = get_parameter_dic(request)
code = reqdata.get('code',None)
state = reqdata.get('state',None)#无state回调
if not all([code]):
# return HttpResponse("非法请求")
return HttpResponseRedirect("/#/login")
logger.info("抖店联盟抖客直播间分销获取code回调信息code=%s|state=%s"%(code,state))
newdoudian_dklive_yz = doudian(app_key=DOUDIAN_DKLIVE_ZIYAN_APPKEY,app_secret=DOUDIAN_DKLIVE_ZIYAN_APPSECRET,app_type="tool",code=code)
res = newdoudian_dklive_yz.init_token(code=code)
if not res:
return HttpResponse("获取授权失败!!!")
if state:
name = newdoudian_dklive_yz.get_cache_buyin_id()
buyinid = newdoudian_dklive_yz.get_cache_buyin_id()
defaults = {'access_token': newdoudian_dklive_yz.get_access_token(),'refresh_token': newdoudian_dklive_yz.get_cache_refresh_token()}
instance, created = DYSystemAccount.objects.get_or_create(nickname=name, buyin_id=buyinid,defaults=defaults)
if not created:
instance.is_delete = False
instance.status = True
instance.save()
DYSystemAccount.objects.all().exclude(id=instance.id).update(is_delete=True, status=False)
return HttpResponse("获取授权成功!")