>
+from ipaddr import client_ip
from isoweek import Week
from logit import logit
from paginator import pagination
@@ -60,54 +60,27 @@ def lensman_submit_api(request):
@logit
-def lensman_login_api(request):
- """ 摄影师登录 """
- username = request.POST.get('username', '')
- password = request.POST.get('password', '')
-
- try:
- lensman = LensmanInfo.objects.get(username=username, status=True)
- except LensmanInfo.DoesNotExist:
- return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
-
- if not check_password(password, lensman.encryption):
- return response(LensmanStatusCode.LENSMAN_PASSWORD_ERROR)
-
- try:
- user = UserInfo.objects.get(user_id=lensman.lensman_id, status=True)
- except UserInfo.DoesNotExist:
- return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
-
- return response(200, 'Login Success', u'登录成功', user.data)
-
-
-@logit
+@transaction.atomic
def lensman_wx_authorize_api(request):
- unionid = request.POST.get('unionid', '')
- openid = request.POST.get('openid', '')
-
- sex = request.POST.get('sex', 0)
- nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
- avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
- country = request.POST.get('country', '')
- province = request.POST.get('province', '')
- city = request.POST.get('city', '')
-
try:
- user = UserInfo.objects.get(unionid=unionid, islensman=True, status=True)
+ user = UserInfo.objects.select_for_update().get(unionid=request.POST.get('unionid', ''), islensman=True, status=True)
except UserInfo.DoesNotExist:
return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
+ # 用户是否激活
if user.user_status != UserInfo.ACTIVATED:
return response(LensmanStatusCode.LENSMAN_NOT_ACTIVATED)
- user.openid = openid
- user.sex = sex
- user.nickname = nickname
- user.avatar = avatar
- user.country = country
- user.province = province
- user.city = city
+ # Set User Key's Value
+ user.openid_lensman = request.POST.get('openid', '')
+ user.sex = request.POST.get('sex', 0)
+ user.nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
+ user.avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
+ user.country = request.POST.get('country', '')
+ user.province = request.POST.get('province', '')
+ user.city = request.POST.get('city', '')
+ user.signup_ip = client_ip(request)
+ user.signup_at = tc.utc_datetime()
user.save()
set_profile_info(user)
@@ -28,40 +28,39 @@ def get_userinfo_api(request): |
||
| 28 | 28 |
encryptedData = request.POST.get('encryptedData', '')
|
| 29 | 29 |
iv = request.POST.get('iv', '')
|
| 30 | 30 |
|
| 31 |
+ # {u'avatarUrl': u'http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0',
|
|
| 32 |
+ # u'city': u'Guangzhou', |
|
| 33 |
+ # u'country': u'CN', |
|
| 34 |
+ # u'gender': 1, |
|
| 35 |
+ # u'language': u'zh_CN', |
|
| 36 |
+ # u'nickName': u'Band', |
|
| 37 |
+ # u'openId': u'oGZUI0egBJY1zhBYw2KhdUfwVJJE', |
|
| 38 |
+ # u'province': u'Guangdong', |
|
| 39 |
+ # u'unionId': u'ocMvos6NjeKLIBqg5Mr9QjxrP1FA', |
|
| 40 |
+ # u'watermark': {u'appid': u'wx4f4bc4dec97d474b', u'timestamp': 1477314187}}
|
|
| 31 | 41 |
userinfo = get_userinfo(appid=appid, secret=secret, code=code, encryptedData=encryptedData, iv=iv) |
| 32 | 42 |
|
| 33 |
- try: |
|
| 34 |
- user = UserInfo.objects.select_for_update().get(unionid=userinfo.get('unionId', ''))
|
|
| 35 |
- except UserInfo.DoesNotExist: |
|
| 36 |
- user = None |
|
| 43 |
+ # Get or Create User |
|
| 44 |
+ user, created = UserInfo.objects.select_for_update().get_or_create(unionid=userinfo.get('unionId', ''))
|
|
| 37 | 45 |
|
| 38 |
- if not user: |
|
| 39 |
- # {u'avatarUrl': u'http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0',
|
|
| 40 |
- # u'city': u'Guangzhou', |
|
| 41 |
- # u'country': u'CN', |
|
| 42 |
- # u'gender': 1, |
|
| 43 |
- # u'language': u'zh_CN', |
|
| 44 |
- # u'nickName': u'Band', |
|
| 45 |
- # u'openId': u'oGZUI0egBJY1zhBYw2KhdUfwVJJE', |
|
| 46 |
- # u'province': u'Guangdong', |
|
| 47 |
- # u'unionId': u'ocMvos6NjeKLIBqg5Mr9QjxrP1FA', |
|
| 48 |
- # u'watermark': {u'appid': u'wx4f4bc4dec97d474b', u'timestamp': 1477314187}}
|
|
| 49 |
- user = UserInfo.objects.create( |
|
| 50 |
- user_id=CurtailUUID.uuid(UserInfo, 'user_id'), |
|
| 51 |
- user_from=UserInfo.WX_USER, |
|
| 52 |
- openid=userinfo.get('openId', ''),
|
|
| 53 |
- unionid=userinfo.get('unionId', ''),
|
|
| 54 |
- sex=userinfo.get('gender', 0),
|
|
| 55 |
- nickname=userinfo.get('nickName', ''),
|
|
| 56 |
- avatar=userinfo.get('avatarUrl', ''),
|
|
| 57 |
- country=userinfo.get('country', ''),
|
|
| 58 |
- province=userinfo.get('province', ''),
|
|
| 59 |
- city=userinfo.get('city', ''),
|
|
| 60 |
- user_status=UserInfo.ACTIVATED, |
|
| 61 |
- signup_ip=client_ip(request), |
|
| 62 |
- signup_at=tc.utc_datetime(), |
|
| 63 |
- ) |
|
| 46 |
+ # Set User_id |
|
| 47 |
+ if created: |
|
| 48 |
+ user.user_id = CurtailUUID.uuid(UserInfo, 'user_id') |
|
| 64 | 49 |
|
| 65 |
- set_profile_info(user) |
|
| 50 |
+ # Set User Key's Value |
|
| 51 |
+ user.user_from = UserInfo.MINIAPP_USER |
|
| 52 |
+ user.openid_miniapp = userinfo.get('openId', '')
|
|
| 53 |
+ user.sex = userinfo.get('gender', '')
|
|
| 54 |
+ user.nickname = userinfo.get('nickName', '')
|
|
| 55 |
+ user.avatar = userinfo.get('avatarUrl', '')
|
|
| 56 |
+ user.country = userinfo.get('country', '')
|
|
| 57 |
+ user.province = userinfo.get('province', '')
|
|
| 58 |
+ user.city = userinfo.get('city', '')
|
|
| 59 |
+ user.user_status = UserInfo.ACTIVATED |
|
| 60 |
+ user.signup_ip = client_ip(request) |
|
| 61 |
+ user.signup_at = tc.utc_datetime() |
|
| 62 |
+ user.save() |
|
| 63 |
+ |
|
| 64 |
+ set_profile_info(user) |
|
| 66 | 65 |
|
| 67 | 66 |
return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.data) |
@@ -19,6 +19,7 @@ from utils.error.errno_utils import (GroupPhotoStatusCode, OrderStatusCode, User |
||
| 19 | 19 |
from utils.error.response_utils import response |
| 20 | 20 |
from utils.redis.rbrief import set_brief_info |
| 21 | 21 |
from utils.redis.rorder import set_lensman_order_record |
| 22 |
+from utils.wechat_utils import get_user_openid |
|
| 22 | 23 |
|
| 23 | 24 |
|
| 24 | 25 |
WECHAT = settings.WECHAT |
@@ -33,7 +34,13 @@ def wx_order_create_api(request): |
||
| 33 | 34 |
photo_id = request.POST.get('photo_id', '')
|
| 34 | 35 |
photo_type = request.POST.get('photo_type', 'nomark') # nomark for 去除水印, origin for 获取高清图
|
| 35 | 36 |
|
| 36 |
- photo_type_ = OrderInfo.ORIGIN if photo_type == 'origin' else OrderInfo.NOMARK |
|
| 37 |
+ photo_type_int = OrderInfo.ORIGIN if photo_type == 'origin' else OrderInfo.NOMARK |
|
| 38 |
+ |
|
| 39 |
+ # 用户校验 |
|
| 40 |
+ try: |
|
| 41 |
+ user = UserInfo.objects.get(user_id=user_id) |
|
| 42 |
+ except UserInfo.DoesNotExist: |
|
| 43 |
+ return response(UserStatusCode.USER_NOT_FOUND) |
|
| 37 | 44 |
|
| 38 | 45 |
# 群组照片校验 |
| 39 | 46 |
try: |
@@ -42,7 +49,7 @@ def wx_order_create_api(request): |
||
| 42 | 49 |
return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND) |
| 43 | 50 |
|
| 44 | 51 |
# 判断是否重复购买 |
| 45 |
- if OrderInfo.objects.filter(photo_id=photo_id, photo_type=photo_type_, from_uid=user_id, pay_status=OrderInfo.PAID).exists(): |
|
| 52 |
+ if OrderInfo.objects.filter(photo_id=photo_id, photo_type=photo_type_int, from_uid=user_id, pay_status=OrderInfo.PAID).exists(): |
|
| 46 | 53 |
return response(OrderStatusCode.WX_ORDER_PAID_ALREADY_EXISTS) |
| 47 | 54 |
|
| 48 | 55 |
body = request.POST.get('body', '') # 商品描述
|
@@ -69,7 +76,7 @@ def wx_order_create_api(request): |
||
| 69 | 76 |
group_id=group_id, |
| 70 | 77 |
photo_id=photo_id, |
| 71 | 78 |
lensman_photo_id=group_photo.lensman_photo_id, |
| 72 |
- photo_type=1 if photo_type == 'origin' else 0, |
|
| 79 |
+ photo_type=photo_type_int, |
|
| 73 | 80 |
from_uid=from_uid, |
| 74 | 81 |
to_uid=to_uid, |
| 75 | 82 |
session_id=group_photo.session_id, |
@@ -83,14 +90,14 @@ def wx_order_create_api(request): |
||
| 83 | 90 |
notify_url=settings.API_DOMAIN + '/wx/notify_url', |
| 84 | 91 |
out_trade_no=order.order_id, |
| 85 | 92 |
total_fee=total_fee, |
| 86 |
- trade_type=trade_type, |
|
| 87 |
- # user_id=None, # 可选,用户在商户appid下的唯一标识。trade_type=JSAPI,此参数必传 |
|
| 93 |
+ trade_type=trade_type if trade_type != 'MINIAPP' else 'JSAPI', |
|
| 94 |
+ user_id=get_user_openid(user, trade_type), # 可选,用户在商户appid下的唯一标识。trade_type=JSAPI,此参数必传 |
|
| 88 | 95 |
) |
| 89 | 96 |
except WeChatPayException: |
| 90 | 97 |
return response(OrderStatusCode.WX_UNIFIED_ORDER_FAIL) |
| 91 | 98 |
|
| 92 | 99 |
prepay_id = prepay_data.get('prepay_id', '')
|
| 93 |
- if trade_type == 'JSAPI': |
|
| 100 |
+ if trade_type == 'JSAPI' or trade_type == 'MINIAPP': |
|
| 94 | 101 |
wxpay_params = wxpay.jsapi.get_jsapi_params(prepay_id) |
| 95 | 102 |
elif trade_type == 'APP': |
| 96 | 103 |
wxpay_params = wxpay.order.get_appapi_params(prepay_id) |
@@ -0,0 +1,13 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+ |
|
| 4 |
+def get_user_openid(user, trade_type): |
|
| 5 |
+ if trade_type == 'MINIAPP': |
|
| 6 |
+ openid = user.openid_miniapp |
|
| 7 |
+ elif trade_type == 'JSAPI': |
|
| 8 |
+ openid = user.openid_oauth |
|
| 9 |
+ elif trade_type == 'APP': |
|
| 10 |
+ openid = None |
|
| 11 |
+ else: |
|
| 12 |
+ openid = None |
|
| 13 |
+ return openid |
@@ -0,0 +1,13 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+ |
|
| 4 |
+def get_user_openid(user, trade_type): |
|
| 5 |
+ if trade_type == 'MINIAPP': |
|
| 6 |
+ openid = user.openid_miniapp |
|
| 7 |
+ elif trade_type == 'JSAPI': |
|
| 8 |
+ openid = user.openid_oauth |
|
| 9 |
+ elif trade_type == 'APP': |
|
| 10 |
+ openid = None |
|
| 11 |
+ else: |
|
| 12 |
+ openid = None |
|
| 13 |
+ return openid |