Нет описания

mini_views.py 5.2KB

    # -*- coding: utf-8 -*- import logging from django.conf import settings from django.db import transaction from django_logit import logit from django_response import response from pywe_miniapp import get_session_info, get_session_key, get_userinfo, store_session_key from pywe_storage import RedisStorage from account.models import UserInfo from live.models import RoomInfo, RoomUserInfo from utils.redis.connect import r WECHAT = settings.WECHAT logger = logging.getLogger('logit') @logit(res=True) @transaction.atomic def mini_login_api(request): wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') code = request.POST.get('code', '') # // 正常返回的JSON数据包 # { # "openid": "OPENID", # "session_key": "SESSIONKEY", # } # # // 满足UnionID返回条件时,返回的JSON数据包 # { # "openid": "OPENID", # "session_key": "SESSIONKEY", # "unionid": "UNIONID" # } # // 错误时返回JSON数据包(示例为Code无效) # { # "errcode": 40029, # "errmsg": "invalid code" # } session_info = get_session_info(appid=appid, secret=secret, code=code) logger.debug(session_info) session_key = session_info.get('session_key', '') unionid = session_info.get('unionid', '') openid = session_info.get('openid', '') # Get or Create User user, _ = UserInfo.objects.select_for_update().get_or_create(openid=openid) # Set User Key's Value if unionid: user.unionid = unionid user.save() # Store SessionKey store_session_key(appid=appid, secret=secret, session_key=session_key, unid=user.user_id, storage=RedisStorage(r)) return response(data=user.data) @logit(res=True) @transaction.atomic def mini_live_login_api(request): share_openid = request.POST.get('share_openid', '') room_id = request.POST.get('room_id', '') scene = request.POST.get('scene', '') wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') code = request.POST.get('code', '') # // 正常返回的JSON数据包 # { # "openid": "OPENID", # "session_key": "SESSIONKEY", # } # # // 满足UnionID返回条件时,返回的JSON数据包 # { # "openid": "OPENID", # "session_key": "SESSIONKEY", # "unionid": "UNIONID" # } # // 错误时返回JSON数据包(示例为Code无效) # { # "errcode": 40029, # "errmsg": "invalid code" # } session_info = get_session_info(appid=appid, secret=secret, code=code) logger.debug(session_info) session_key = session_info.get('session_key', '') unionid = session_info.get('unionid', '') openid = session_info.get('openid', '') # Get or Create User user, _ = UserInfo.objects.select_for_update().get_or_create(openid=openid) # Set User Key's Value if unionid: user.unionid = unionid user.save() # Store SessionKey store_session_key(appid=appid, secret=secret, session_key=session_key, unid=user.user_id, storage=RedisStorage(r)) # Update live room = RoomInfo.objects.get(room_id=room_id) is_new = RoomUserInfo.objects.filter(user_id=user.user_id).count == 0 room_user, _ = RoomUserInfo.objects.get_or_create( room_id=room_id, share_openid=share_openid, user_id=user.user_id, openid=user.openid, anchor_id=room.anchor_id, scene=scene, ) room_user.is_new = is_new room_user.save() return response(data=user.data) @logit @transaction.atomic def get_userinfo_api(request): wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') user_id = request.POST.get('user_id', '') encryptedData = request.POST.get('encryptedData', '') iv = request.POST.get('iv', '') try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response() # {u'avatarUrl': u'http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0', # u'city': u'Guangzhou', # u'country': u'CN', # u'gender': 1, # u'language': u'zh_CN', # u'nickName': u'Band', # u'openId': u'oGZUI0egBJY1zhBYw2KhdUfwVJJE', # u'province': u'Guangdong', # u'unionId': u'ocMvos6NjeKLIBqg5Mr9QjxrP1FA', # u'watermark': {u'appid': u'wx4f4bc4dec97d474b', u'timestamp': 1477314187}} session_key = get_session_key(appid=appid, secret=secret, unid=user_id, storage=RedisStorage(r)) # Get Userinfo userinfo = get_userinfo(appid=appid, secret=secret, session_key=session_key, encryptedData=encryptedData, iv=iv) # Set User Key's Value user.unionid = userinfo.get('unionId', '') user.openid = userinfo.get('openId', '') user.nickname = userinfo.get('nickName', '') user.sex = userinfo.get('gender', '') user.avatar = userinfo.get('avatarUrl', '') user.country = userinfo.get('country', '') user.province = userinfo.get('province', '') user.city = userinfo.get('city', '') user.save() return response(data=user.data)