123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- 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 django_we.models import SubscribeUserInfo
- 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') or 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()
- try:
- subscribe = SubscribeUserInfo.objects.get(unionid=userinfo.get('unionId', ''), status=True)
- except SubscribeUserInfo.DoesNotExist:
- subscribe = None
- if subscribe:
- user.openid = subscribe.openid
- user.subscribe = True
- 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') or 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:
- subscribe = SubscribeUserInfo.objects.get(unionid=unionid, status=True)
- except SubscribeUserInfo.DoesNotExist:
- subscribe = None
- if subscribe:
- user.openid = subscribe.openid
- user.subscribe = subscribe.subscribe
-
- try:
- saleclerk = SaleclerkInfo.objects.get(unionid=user.unionid, is_auth=True, status=True)
- except SaleclerkInfo.DoesNotExist:
- saleclerk = None
- except SaleclerkInfo.MultipleObjectsReturned:
- saleclerk = None
- if saleclerk:
- user.phone = saleclerk.clerk_phone
- saleclerk.user_id = user.user_id
- saleclerk.save()
- 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') or 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', '')
- try:
- subscribe = SubscribeUserInfo.objects.get(unionid=userinfo.get('unionId', ''), status=True)
- except SubscribeUserInfo.DoesNotExist:
- subscribe = None
- if subscribe:
- user.openid = subscribe.openid
- user.subscribe = subscribe.subscribe
- 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 update_userinfo_api(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- user_id = request.POST.get('user_id', '')
- nickname = request.POST.get('nickname', '')
- avatar = request.POST.get('avatar', '')
- phone = request.POST.get('phone', '')
- identity_card_number = request.POST.get('identity_card_number', '')
- identity_card_name = request.POST.get('identity_card_name', '')
- try:
- user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- if nickname:
- user.nickname = nickname
- if avatar:
- user.avatar = avatar
- if phone:
- user.phone = phone
- if identity_card_number:
- user.identity_card_number = identity_card_number
- if identity_card_name:
- user.identity_card_name = identity_card_name
- user.save()
- 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_TAMRON, outer_str='miniapp', appid=appid, secret=secret, storage=RedisStorage(r))
- return response(200, 'Get extraData Success', u'获取 extraData 成功', {
- 'encrypt_card_id': extraData.get('encrypt_card_id', ''),
- 'outer_str': extraData.get('outer_str', ''),
- 'biz': extraData.get('biz', ''),
- })
- @logit
- @transaction.atomic
- def user_integral_add(request):
- brand_id = request.POST.get('brand_id') or 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.select_for_update().get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- user.integral += integral
- user.save()
- UserIntegralIncomeExpensesInfo.objects.create(
- brand_id=brand_id,
- user_id=user_id,
- integral_from=UserIntegralIncomeExpensesInfo.CONTRIBUTE,
- integral=integral,
- final_integral=user.integral,
- remark=remark,
- )
- return response(200, 'Add User Integral Success', u'添加用户投稿积分成功')
- @logit
- @transaction.atomic
- def update_user_tenancy_shot_permission(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- user_id = request.POST.get('user_id', '')
- tenancy_shot_permission = request.POST.get('tenancy_shot_permission', 0)
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- try:
- user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- user.tenancy_shot_permission = tenancy_shot_permission
- user.save()
- return response(200, 'Update User Tenancy Shot Permission Success', u'修改租用镜头权限成功')
|