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

kodo - Gogs: Go Git Service

Няма описание

0008_appsettingsinfo.py 1.6KB

    # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ('operation', '0007_auto_20160907_1740'), ] operations = [ migrations.CreateModel( name='APPSettingsInfo', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')), ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)), ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)), ('platform', models.IntegerField(default=0, help_text='\u652f\u6301\u5e73\u53f0', db_index=True, verbose_name='plat', choices=[(0, '\u5168\u5e73\u53f0'), (1, 'Android'), (2, 'iOS')])), ('channel', models.CharField(help_text='\u6e20\u9053', max_length=255, null=True, verbose_name='channel', blank=True)), ('version', models.CharField(help_text='\u7248\u672c', max_length=255, null=True, verbose_name='version', blank=True)), ('online', models.BooleanField(default=True, help_text='\u662f\u5426\u4e0a\u7ebf', verbose_name='online')), ], options={ 'verbose_name': 'appsettingsinfo', 'verbose_name_plural': 'appsettingsinfo', }, ), ]