nes-num lines-num-new"> 69
+    user.city = request.POST.get('city', '')
76 70
     user.save()
77 71
 
78 72
     set_profile_info(user)

+ 24 - 177
account/views.py

@@ -1,7 +1,6 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3 3
 from curtail_uuid import CurtailUUID
4
-from django.contrib.auth.hashers import check_password, make_password
5 4
 from django.contrib.auth.models import Group, User
6 5
 from django.db import transaction
7 6
 from ipaddr import client_ip
@@ -9,195 +8,43 @@ from logit import logit
9 8
 from rest_framework import viewsets
10 9
 from TimeConvert import TimeConvert as tc
11 10
 
12
-from account.models import LensmanInfo, UserInfo, UserLoginLogInfo
11
+from account.models import LensmanInfo, UserInfo
13 12
 from account.serializers import GroupSerializer, LensmanInfoSerializer, UserInfoSerializer, UserSerializer
14 13
 from operation.models import GuestEntranceControlInfo
15
-from utils.error.errno_utils import LensmanStatusCode, UserStatusCode
14
+from utils.error.errno_utils import UserStatusCode
16 15
 from utils.error.response_utils import response
17 16
 from utils.redis.rguest import get_guest_entrance_control
18 17
 from utils.redis.rprofile import set_profile_info
19 18
 from utils.version_utils import is_version_match
20 19
 
21 20
 
22
-# curl -X POST -F username=xxxxxxx -F password=xxxxxxx http://api.pai.ai/login
23
-@logit
24
-def lensman_login_api(request):
25
-    username = request.POST.get('username', '')
26
-    password = request.POST.get('password', '')
27
-
28
-    try:
29
-        lensman = LensmanInfo.objects.get(username=username, status=True)
30
-    except LensmanInfo.DoesNotExist:
31
-        return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
32
-
33
-    if not check_password(password, lensman.encryption):
34
-        return response(LensmanStatusCode.LENSMAN_PASSWORD_ERROR)
35
-
36
-    return response(200, 'Login Success', u'登录成功', {
37
-        'user_id': lensman.lensman_id
38
-    })
39
-
40
-
41
-@logit
42
-def user_is_registered_api(request):
43
-    username = request.POST.get('username', '')
44
-
45
-    return response(200, data={
46
-        'registered': UserInfo.objects.filter(username=username).exists(),
47
-    })
48
-
49
-
50
-@logit
51
-@transaction.atomic
52
-def user_signup_api(request):
53
-    user_id = request.POST.get('user_id', '')
54
-    username = request.POST.get('username', '')
55
-    password = request.POST.get('password', '')
56
-
57
-    if UserInfo.objects.filter(username=username).exists():
58
-        return response(UserStatusCode.USERNAME_HAS_REGISTERED)
59
-
60
-    # 判断 user_id 是否存在并且为分配用户,如果存在并且为分配用户,则直接在该帐户上更新,否则则直接创建帐户
61
-    signup_ip, signup_at = client_ip(request), tc.utc_datetime()
62
-
63
-    try:
64
-        user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
65
-    except UserInfo.DoesNotExist:
66
-        user = None
67
-
68
-    if user and user.user_status == UserInfo.ASSIGN:
69
-        user.user_from = UserInfo.APP_USER,
70
-        user.username = username
71
-        user.password = make_password(password, None, 'pbkdf2_sha256')
72
-        user.user_status = UserInfo.ACTIVATED
73
-        user.signup_ip = signup_ip
74
-        user.signup_at = signup_at
75
-        user.save()
76
-    else:
77
-        user = UserInfo.objects.create(
78
-            user_id=CurtailUUID.uuid(UserInfo, 'user_id'),
79
-            user_from=UserInfo.APP_USER,
80
-            username=username,
81
-            password=make_password(password, None, 'pbkdf2_sha256'),
82
-            user_status=UserInfo.ACTIVATED,
83
-            signup_ip=signup_ip,
84
-            signup_at=signup_at,
85
-        )
86
-
87
-    return response(200, 'Signup Success', u'注册成功', user.data)
88
-
89
-
90
-@logit
91
-@transaction.atomic
92
-def user_login_api(request):
93
-    username = request.POST.get('username', '')
94
-    password = request.POST.get('password', '')
95
-
96
-    try:
97
-        user = UserInfo.objects.select_for_update().get(username=username, status=True)
98
-    except UserInfo.DoesNotExist:
99
-        return response(UserStatusCode.USER_NOT_FOUND)
100
-
101
-    login_ip, login_at = client_ip(request), tc.utc_datetime()
102
-
103
-    if not check_password(password, user.password):
104
-        UserLoginLogInfo.objects.create(
105
-            user_id=user.user_id,
106
-            login_ip=login_ip,
107
-            login_result=UserLoginLogInfo.PWD_ERROR
108
-        )
109
-        return response(UserStatusCode.USER_PASSWORD_ERROR)
110
-
111
-    UserLoginLogInfo.objects.create(
112
-        user_id=user.user_id,
113
-        login_ip=login_ip,
114
-        login_result=UserLoginLogInfo.SUCCESS
115
-    )
116
-
117
-    user.login_ip = login_ip
118
-    user.login_at = login_at
119
-    user.save()
120
-
121
-    return response(200, 'Login Success', u'登录成功', user.data)
122
-
123
-
124 21
 @logit
125 22
 @transaction.atomic
126 23
 def user_wx_authorize_api(request):
127
-    user_id = request.POST.get('user_id', '')
128
-
129
-    unionid = request.POST.get('unionid', '')
130
-    openid = request.POST.get('wx_uid', '')
131
-
132
-    sex = request.POST.get('sex', 0)
133
-    nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
134
-    avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
135
-    country = request.POST.get('country', '')
136
-    province = request.POST.get('province', '')
137
-    city = request.POST.get('city', '')
138
-
139
-    try:
140
-        user = UserInfo.objects.select_for_update().get(unionid=unionid)
141
-    except UserInfo.DoesNotExist:
142
-        user = None
143
-
144
-    if user:
145
-        user.openid = openid
146
-        user.sex = sex
147
-        user.nickname = nickname
148
-        user.avatar = avatar
149
-        user.country = country
150
-        user.province = province
151
-        user.city = city
152
-        user.save()
153
-
154
-        set_profile_info(user)
155
-
156
-        return response(200, 'Login Success', u'登录成功', user.data)
157
-
158
-    # unionid 不存在
159
-    # 判断 user_id 是否存在并且为分配用户,如果存在并且为分配用户,则直接在该帐户上更新,否则则直接创建帐户
160
-
161
-    signup_ip, signup_at = client_ip(request), tc.utc_datetime()
162
-
163
-    try:
164
-        user = UserInfo.objects.select_for_update().get(user_id=user_id)
165
-    except UserInfo.DoesNotExist:
166
-        user = None
167
-
168
-    if user and user.user_status == UserInfo.ASSIGN:
169
-        user.user_from = UserInfo.WX_USER
170
-        user.openid = openid
171
-        user.unionid = unionid
172
-        user.sex = sex
173
-        user.nickname = nickname
174
-        user.avatar = avatar
175
-        user.country = country
176
-        user.province = province
177
-        user.city = city
178
-        user.signup_ip = signup_ip
179
-        user.signup_at = signup_at
180
-        user.save()
181
-    else:
182
-        user = UserInfo.objects.create(
183
-            user_id=CurtailUUID.uuid(UserInfo, 'user_id'),
184
-            user_from=UserInfo.WX_USER,
185
-            openid=openid,
186
-            unionid=unionid,
187
-            sex=sex,
188
-            nickname=nickname,
189
-            avatar=avatar,
190
-            country=country,
191
-            province=province,
192
-            city=city,
193
-            user_status=UserInfo.ACTIVATED,
194
-            signup_ip=signup_ip,
195
-            signup_at=signup_at,
196
-        )
24
+    # Get or Create User
25
+    user, created = UserInfo.objects.select_for_update().get_or_create(unionid=request.POST.get('unionid', ''))
26
+
27
+    # Set User_id
28
+    if created:
29
+        user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
30
+
31
+    # Set User Key's Value
32
+    user.user_from = UserInfo.USER_USER
33
+    user.openid = request.POST.get('wx_uid', '')
34
+    user.sex = request.POST.get('sex', 0)
35
+    user.nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
36
+    user.avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
37
+    user.country = request.POST.get('country', '')
38
+    user.province = request.POST.get('province', '')
39
+    user.city = request.POST.get('city', '')
40
+    user.user_status = UserInfo.ACTIVATED
41
+    user.signup_ip = client_ip(request)
42
+    user.signup_at = tc.utc_datetime()
43
+    user.save()
197 44
 
198
-        set_profile_info(user)
45
+    set_profile_info(user)
199 46
 
200
-    return response(200, 'Login Success', u'登录成功', user.data)
47
+    return response(200, 'User Login Success', u'用户端登录成功', user.data)
201 48
 
202 49
 
203 50
 @logit

+ 0 - 6
api/urls.py

@@ -20,11 +20,6 @@ from wechat import views as wechat_views
20 20
 
21 21
 # 帐户相关
22 22
 urlpatterns = [
23
-    url(r'^login$', account_views.lensman_login_api, name='lensman_login_api'),  # 摄影师登录
24
-    url(r'^u/is_registered$', account_views.user_is_registered_api, name='user_is_registered_api'),  # 用户是否已经注册
25
-    url(r'^u/signup$', account_views.user_signup_api, name='user_signup_api'),  # 用户注册
26
-    url(r'^u/login$', account_views.user_login_api, name='user_login_api'),  # 用户登录
27
-
28 23
     url(r'^u/wx/authorize$', account_views.user_wx_authorize_api, name='user_wx_authorize_api'),  # 用户端 - 微信用户授权
29 24
 
30 25
     url(r'^u/guest/status$', op_views.guest_api, name='user_guest_status_api'),  # 用户端 - 微游客状态(是否开启)
@@ -34,7 +29,6 @@ urlpatterns = [
34 29
 # 摄影师相关
35 30
 urlpatterns += [
36 31
     url(r'^l/submit$', lensman_views.lensman_submit_api, name='lensman_submit_api'),  # 摄影师信息提交
37
-    url(r'^l/login$', lensman_views.lensman_login_api, name='lensman_login_api'),  # 摄影师登录
38 32
 
39 33
     url(r'^l/wx/authorize$', lensman_views.lensman_wx_authorize_api, name='lensman_wx_authorize_api'),  # 摄影师端 - 微信用户授权
40 34
 

+ 14 - 41
group/lensman_views.py

@@ -3,8 +3,8 @@
3 3
 from __future__ import division
4 4
 
5 5
 from curtail_uuid import CurtailUUID
6
-from django.contrib.auth.hashers import check_password
7 6
 from django.db import transaction
7
+from ipaddr import client_ip
8 8
 from isoweek import Week
9 9
 from logit import logit
10 10
 from paginator import pagination
@@ -60,54 +60,27 @@ def lensman_submit_api(request):
60 60
 
61 61
 
62 62
 @logit
63
-def lensman_login_api(request):
64
-    """ 摄影师登录 """
65
-    username = request.POST.get('username', '')
66
-    password = request.POST.get('password', '')
67
-
68
-    try:
69
-        lensman = LensmanInfo.objects.get(username=username, status=True)
70
-    except LensmanInfo.DoesNotExist:
71
-        return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
72
-
73
-    if not check_password(password, lensman.encryption):
74
-        return response(LensmanStatusCode.LENSMAN_PASSWORD_ERROR)
75
-
76
-    try:
77
-        user = UserInfo.objects.get(user_id=lensman.lensman_id, status=True)
78
-    except UserInfo.DoesNotExist:
79
-        return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
80
-
81
-    return response(200, 'Login Success', u'登录成功', user.data)
82
-
83
-
84
-@logit
63
+@transaction.atomic
85 64
 def lensman_wx_authorize_api(request):
86
-    unionid = request.POST.get('unionid', '')
87
-    openid = request.POST.get('openid', '')
88
-
89
-    sex = request.POST.get('sex', 0)
90
-    nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
91
-    avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
92
-    country = request.POST.get('country', '')
93
-    province = request.POST.get('province', '')
94
-    city = request.POST.get('city', '')
95
-
96 65
     try:
97
-        user = UserInfo.objects.get(unionid=unionid, islensman=True, status=True)
66
+        user = UserInfo.objects.select_for_update().get(unionid=request.POST.get('unionid', ''), islensman=True, status=True)
98 67
     except UserInfo.DoesNotExist:
99 68
         return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
100 69
 
70
+    # 用户是否激活
101 71
     if user.user_status != UserInfo.ACTIVATED:
102 72
         return response(LensmanStatusCode.LENSMAN_NOT_ACTIVATED)
103 73
 
104
-    user.openid = openid
105
-    user.sex = sex
106
-    user.nickname = nickname
107
-    user.avatar = avatar
108
-    user.country = country
109
-    user.province = province
110
-    user.city = city
74
+    # Set User Key's Value
75
+    user.openid_lensman = request.POST.get('openid', '')
76
+    user.sex = request.POST.get('sex', 0)
77
+    user.nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
78
+    user.avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
79
+    user.country = request.POST.get('country', '')
80
+    user.province = request.POST.get('province', '')
81
+    user.city = request.POST.get('city', '')
82
+    user.signup_ip = client_ip(request)
83
+    user.signup_at = tc.utc_datetime()
111 84
     user.save()
112 85
 
113 86
     set_profile_info(user)

+ 30 - 31
miniapp/views.py

@@ -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)

+ 13 - 6
pay/views.py

@@ -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)

+ 13 - 0
utils/openid_utils.py

@@ -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

+ 13 - 0
utils/wechat_utils.py

@@ -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

Sign In - Gogs: Go Git Service

Sign In