123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- import logging
- from django.conf import settings
- from django.db import transaction
- from django_curtail_uuid import CurtailUUID
- from django_logit import logit
- from django_response import response
- from ipaddr import client_ip
- from pywe_membercard import get_miniapp_extraData
- from pywe_miniapp import get_session_info, get_session_key, get_userinfo, store_session_key
- from pywe_storage import RedisStorage
- from TimeConvert import TimeConvert as tc
- from account.models import UserInfo, UserIntegralIncomeExpensesInfo
- from mch.models import SaleclerkInfo
- from statistic.models import RegisterStatisticInfo
- from utils.error.errno_utils import ProductBrandStatusCode, UserStatusCode
- from utils.redis.connect import r
- from utils.redis.rprofile import set_profile_info
- WECHAT = settings.WECHAT
- logger = logging.getLogger('logit')
- @logit
- @transaction.atomic
- def get_userinfo_api(request):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- appId = request.POST.get('appId', 'MINIAPP')
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- wxcfg = WECHAT.get(appId, {})
- appid = wxcfg.get('appID')
- secret = wxcfg.get('appsecret')
- code = request.POST.get('code', '')
- encryptedData = request.POST.get('encryptedData', '')
- iv = request.POST.get('iv', '')
-
-
-
-
-
-
-
-
-
-
- session_key = get_session_key(appid=appid, secret=secret, code=code)
-
- userinfo = get_userinfo(appid=appid, secret=secret, code=code, session_key=session_key, encryptedData=encryptedData, iv=iv)
-
- user, created = UserInfo.objects.select_for_update().get_or_create(unionid=userinfo.get('unionId', ''))
-
- if created:
- user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
-
- rsi, _ = RegisterStatisticInfo.objects.select_for_update().get_or_create(
- brand_id=brand_id,
- ymd=int(tc.local_string(format='%Y%m%d')),
- )
- rsi.num += 1
- rsi.save()
-
- user.user_from = UserInfo.MINIAPP_USER
- user.appid = appId
- user.unionid = userinfo.get('unionId', '')
- user.openid_miniapp = userinfo.get('openId', '')
- user.sex = userinfo.get('gender', '')
- user.nickname = userinfo.get('nickName', '')
- user.avatar = userinfo.get('avatarUrl', '')
- user.country = userinfo.get('country', '')
- user.province = userinfo.get('province', '')
- user.city = userinfo.get('city', '')
- user.user_status = UserInfo.ACTIVATED
- user.signup_ip = client_ip(request)
- user.signup_at = tc.utc_datetime()
- user.save()
-
- set_profile_info(user)
-
- store_session_key(appid=appid, secret=secret, session_key=session_key, unid=user.user_id, storage=RedisStorage(r))
-
- store_session_key(appid=appid, secret=secret, session_key=session_key, unid='', storage=RedisStorage(r))
- return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brandata(brand_id=brand_id))
- @logit(res=True)
- @transaction.atomic
- def mini_login_api(request):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- appId = request.POST.get('appId', 'MINIAPP')
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- wxcfg = WECHAT.get(appId, {})
- appid = wxcfg.get('appID')
- secret = wxcfg.get('appsecret')
- code = request.POST.get('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', '')
-
- user, created = UserInfo.objects.select_for_update().get_or_create(openid_miniapp=openid)
-
- if created:
- user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
-
- rsi, _ = RegisterStatisticInfo.objects.select_for_update().get_or_create(
- brand_id=brand_id,
- ymd=int(tc.local_string(format='%Y%m%d')),
- )
- rsi.num += 1
- rsi.save()
-
- user.user_from = UserInfo.MINIAPP_USER
- user.appid = appId
- if unionid:
- user.unionid = unionid
-
- try:
- saleclerk = SaleclerkInfo.objects.get(unionid=unionid, is_auth=True, status=True)
- except SaleclerkInfo.DoesNotExist:
- saleclerk = None
- if saleclerk:
- user.phone = saleclerk.clerk_phone
- user.user_status = UserInfo.ACTIVATED
- user.signup_ip = client_ip(request)
- user.signup_at = tc.utc_datetime()
- user.save()
-
- set_profile_info(user)
-
- store_session_key(appid=appid, secret=secret, session_key=session_key, unid=user.user_id, storage=RedisStorage(r))
-
- store_session_key(appid=appid, secret=secret, session_key=session_key, unid='', storage=RedisStorage(r))
- return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brandata(brand_id=brand_id))
- @logit
- @transaction.atomic
- def get_userinfo_api2(request):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- user_id = request.POST.get('user_id', '')
- appId = request.POST.get('appId', 'MINIAPP')
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- wxcfg = WECHAT.get(appId, {})
- appid = wxcfg.get('appID')
- secret = wxcfg.get('appsecret')
- encryptedData = request.POST.get('encryptedData', '')
- iv = request.POST.get('iv', '')
- try:
- user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
-
-
-
-
-
-
-
-
-
-
- session_key = get_session_key(appid=appid, secret=secret, unid=user_id, storage=RedisStorage(r))
-
- userinfo = get_userinfo(appid=appid, secret=secret, session_key=session_key, encryptedData=encryptedData, iv=iv)
-
- user.appid = appId
- user.unionid = userinfo.get('unionId', '')
- user.openid_miniapp = userinfo.get('openId', '')
- user.sex = userinfo.get('gender', '')
- user.nickname = userinfo.get('nickName', '')
- user.avatar = userinfo.get('avatarUrl', '')
- user.country = userinfo.get('country', '')
- user.province = userinfo.get('province', '')
- user.city = userinfo.get('city', '')
- user.save()
-
- set_profile_info(user)
- return response(200, 'Mini App Get Userinfo Success', u'微信小程序获取用户信息成功', user.brandata(brand_id=brand_id))
- @logit(res=True)
- @transaction.atomic
- def membercard_extradata(request):
- wxcfg = WECHAT.get('JSAPI', {})
- appid = wxcfg.get('appID')
- secret = wxcfg.get('appsecret')
- extraData = get_miniapp_extraData(settings.MEMBER_CARD_ID, outer_str='miniapp', appid=appid, secret=secret, storage=RedisStorage(r))
- return response(200, 'Get extraData Success', u'获取 extraData 成功', extraData)
- @logit
- @transaction.atomic
- def user_integral_add(request):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- user_id = request.POST.get('user_id', '')
- integral = int(request.POST.get('integral', 0))
- remark = request.POST.get('remark')
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- try:
- user = UserInfo.objects.get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- UserIntegralIncomeExpensesInfo.objects.create(
- brand_id=brand_id,
- user_id=user_id,
- integral_from=UserIntegralIncomeExpensesInfo.CONTRIBUTE,
- integral=integral,
- remark=remark
- )
- user.integral += integral
- user.save()
- return response(200, 'Add User Integral Success', u'添加用户投稿积分成功')
|