|
# -*- 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 = not RoomUserInfo.objects.filter(user_id=user.user_id).exists()
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)
|