="diff-584f03f4131c5dfe019da9d46a8e94181b3b5821R3">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
|
|
|
|
@@ -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
|
|
|
|
|
@@ -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)
|
|
|
|
@@ -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
|