122 lines
7.9 KiB
Python
122 lines
7.9 KiB
Python
"""
|
|
Author: xiao 792282@qq.com
|
|
Date: 2025-08-10 11:36:05
|
|
LastEditors: xiao 792282@qq.com
|
|
LastEditTime: 2025-08-17 13:38:40
|
|
FilePath: django_小程序/小程序服务端服务接口/小程序用户登陆接口.py
|
|
Description: 这是默认设置,可以在设置》工具》File Description中进行配置
|
|
"""
|
|
|
|
import jmespath
|
|
from django.forms import model_to_dict
|
|
from rest_framework import status
|
|
from rest_framework.decorators import action
|
|
from rest_framework.request import Request
|
|
from rest_framework.response import Response
|
|
from rest_framework.routers import SimpleRouter
|
|
from rest_framework.viewsets import ViewSet
|
|
|
|
from sixGuoDjango import BaseResponse, ResData
|
|
from wechat_数据库.用户数据库.小程序登陆用户 import weiuser
|
|
from wechat_项目工具包.小程序工具包.小程序用户授权数据 import wei小程序服务端工具
|
|
from wechat_项目工具包.微信支付工具包.微信支付类 import paymentCategory, wechatPay
|
|
|
|
上级分享者的默认值 = "六果"
|
|
|
|
|
|
class 六果科技小程序用户登陆(ViewSet):
|
|
|
|
def res_obj_data_func(self, self_user: weiuser) -> dict[str, str]:
|
|
""""""
|
|
res_obj_data = model_to_dict(instance=self_user, fields=None, exclude=None)
|
|
return res_obj_data
|
|
|
|
@action(detail=False, methods=["post", ], url_path="mini_login")
|
|
def 小程序用户(self, request: Request, *args, **kwargs):
|
|
""""""
|
|
encryptedData = request.data.get("encryptedData", None) # 解密群号所需要的参数
|
|
iv = request.data.get("iv", None) # 解密群号所需要的参数 iv
|
|
user_手机设备参数 = request.data.get("user_手机设备参数", None)
|
|
code: str = request.data.get("code", "")
|
|
# superior_openid = request.data.get( "superior_openid", ) # 如果上级是默认的值 则说明是没有上级的,
|
|
superior_unionid = request.data.get("superior_unionid", 上级分享者的默认值) # 如果上级是默认的值 则说明是没有上级的,
|
|
scene = request.data.get("scene", None) # 微信用户进入小程的场景值
|
|
shareTicket = request.data.get("shareTicket", None) # 微信用户的shareTicket值
|
|
print("user_手机设备参数user_手机设备参数", user_手机设备参数)
|
|
res = wei小程序服务端工具.获取OPENID(js_code=code, appid=paymentCategory.appid,
|
|
secret=paymentCategory.appsecret, )
|
|
# 代码能往下执行:则说明,已经正确拿到结果;
|
|
self_openid = jmespath.search(data=res, expression="openid")
|
|
session_key = jmespath.search(data=res, expression="session_key")
|
|
self_unionid = jmespath.search(data=res, expression="unionid")
|
|
# 准备好,需要的数据
|
|
|
|
share分享者对象, share分享者对象是新创建 = weiuser.objects.update_or_create(unionid=superior_unionid, )
|
|
# 首次进来的用户要全部的添加上默认的 用户 角色
|
|
click点击者对象, self_bool = weiuser.objects.update_or_create(unionid=self_unionid,
|
|
defaults={"mini_openid": self_openid, "user_手机设备参数": user_手机设备参数})
|
|
print("-----------------------------------", user_手机设备参数)
|
|
six六果对象, sixBool = weiuser.objects.get_or_create(unionid="六果")
|
|
if superior_unionid == 上级分享者的默认值:
|
|
share分享者对象 = six六果对象
|
|
print("登陆成功了,同时打印一下上级的用户是谁", superior_unionid)
|
|
if click点击者对象.parent is not None:
|
|
# 不为空说明已经有上级存在了
|
|
res_obj_data = self.res_obj_data_func(self_user=click点击者对象) # 函数调用返回数据
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData=res_obj_data), ).model_dump()
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|
|
|
|
if superior_unionid == self_unionid and share分享者对象是新创建 == True:
|
|
# 说明是自己点了自己
|
|
print("说明是自己点了自己说明是自己点了自己说明是自己点了自己")
|
|
click点击者对象.parent = six六果对象
|
|
click点击者对象.codeConfigId = six六果对象.codeConfigId
|
|
click点击者对象.codeQrCode = six六果对象.codeQrCode
|
|
click点击者对象.codeRemark = six六果对象.codeRemark
|
|
click点击者对象.user_用户当前的等级 = six六果对象.user_用户当前的等级 + 1
|
|
click点击者对象.user_绑定企微UNIONID = six六果对象.user_绑定企微UNIONID
|
|
click点击者对象.save()
|
|
res_obj_data = self.res_obj_data_func(self_user=click点击者对象) # 函数调用返回数据
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData=res_obj_data), ).model_dump()
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|
|
if click点击者对象.parent is None and scene == 1044:
|
|
openGId, timestamp, appid = wechatPay(payment=paymentCategory).解密群号(iv=iv, encryptedData=encryptedData,
|
|
sessionKey=session_key, )
|
|
# TODO 在这里需要完成,对群号数据的添加
|
|
click点击者对象.parent = share分享者对象
|
|
click点击者对象.codeConfigId = share分享者对象.codeConfigId
|
|
click点击者对象.codeQrCode = share分享者对象.codeQrCode
|
|
click点击者对象.codeRemark = share分享者对象.codeRemark
|
|
click点击者对象.user_用户当前的等级 = share分享者对象.user_用户当前的等级 + 1
|
|
click点击者对象.user_绑定企微UNIONID = share分享者对象.user_绑定企微UNIONID
|
|
click点击者对象.save()
|
|
res_obj_data = self.res_obj_data_func(self_user=click点击者对象) # 函数调用返回数据
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData=res_obj_data), ).model_dump()
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|
|
if click点击者对象.parent is None:
|
|
# 说明没有上级存在,更新数据
|
|
print("说明没有上级存在,更新数据")
|
|
# use, use_bool = weiuser.objects.update_or_create(
|
|
# unionid=self_unionid,
|
|
# defaults={ "mini_openid": self_openid, "user_用户当前的等级": share分享者对象.user_用户当前的等级 + 1, "parent": share分享者对象,
|
|
# "codeConfigId": share分享者对象.codeConfigId, "codeQrCode": share分享者对象.codeQrCode,
|
|
# "codeRemark": share分享者对象.codeRemark,
|
|
# }, )
|
|
click点击者对象.parent = share分享者对象
|
|
click点击者对象.codeConfigId = share分享者对象.codeConfigId
|
|
click点击者对象.codeQrCode = share分享者对象.codeQrCode
|
|
click点击者对象.codeRemark = share分享者对象.codeRemark
|
|
click点击者对象.user_用户当前的等级 = share分享者对象.user_用户当前的等级 + 1
|
|
click点击者对象.user_绑定企微UNIONID = share分享者对象.user_绑定企微UNIONID
|
|
click点击者对象.save()
|
|
print("自己点了自已,同时还没有创建数据时的情况", share分享者对象.user_角色权限)
|
|
res_obj_data = self.res_obj_data_func(self_user=click点击者对象) # 函数调用返回数据
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData=res_obj_data), ).model_dump()
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|
|
# 在所有的业务判断都不成功时,直接返回
|
|
return Response(data="", status=status.HTTP_200_OK)
|
|
|
|
|
|
六果科技小程序用户登陆Router = SimpleRouter()
|
|
六果科技小程序用户登陆Router.register(prefix="", viewset=六果科技小程序用户登陆, basename="六果科技小程序用户登陆")
|