1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- # coding=utf-8
- import traceback
- from rest_framework.views import APIView
- from rest_framework_jwt.views import VerifyJSONWebToken,RefreshJSONWebToken
- from rest_framework.serializers import ValidationError
- from util import response_error, response_ok
- from util.exceptions import CustomError
- from util.permission import IsCustomerUser
- from util.wx.WXBizDataCrypt import WXBizDataCrypt
- from django.contrib.auth import get_user_model
- from django.db import transaction
- from apps.customer.serializers import WechatLoginSerializer, WechatBindSerializer
- from apps.activity.models import Activity
- from apps.customer.models import Customer, CustomerWechat
- User = get_user_model()
- class WxLoginView(APIView):
- serializer_class = WechatLoginSerializer
- def post(self, request, *args, **kwargs):
- ser = self.serializer_class(data=request.data)
- if ser.is_valid():
- return response_ok(ser.validated_data)
- else:
- return response_error('参数错误')
- class WxBindView(APIView):
- serializer_class = WechatBindSerializer
- def post(self, request, *args, **kwargs):
- ser = self.serializer_class(data=request.data)
- if ser.is_valid():
- return response_ok(ser.validated_data)
- else:
- return response_error('参数错误')
- class SetUserInfoView(APIView):
- permission_classes = [IsCustomerUser, ]
- def post(self, request, *args, **kwargs):
- appid = request.POST.get('appid')
- openid = request.POST.get('openid')
- encryptedData = request.POST.get('encryptedData')
- iv = request.POST.get('iv')
- try:
- customer = request.customer
- customer_wechat = CustomerWechat.objects.filter(openid=openid, customer=customer).first()
- if not customer_wechat:
- raise CustomError(u'未找到相应的微信客户!')
- if customer_wechat.customer and customer_wechat.customer.id != customer.id:
- raise CustomError(u'该微信已同步其他客户!')
- if not customer_wechat.customer:
- customer_wechat.customer = customer
- customer_wechat.save()
- pc = WXBizDataCrypt(appid, customer_wechat.session_key)
- result = pc.decrypt(encryptedData, iv)
- with transaction.atomic():
- if customer.name == customer.tel:
- customer.name = result['nickName']
- customer.gender = result['gender']
- customer.face = result['avatarUrl']
- customer.save()
- except CustomError as e:
- return response_error(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return response_error(u'保存失败!')
- return response_ok({'face':customer.face,'name':customer.name})
- class CustomerRefreshTokenView(RefreshJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class CustomerVerifyTokenView(VerifyJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
|