@@ -310,7 +310,7 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
| 310 | 310 |
sex = models.IntegerField(_(u'sex'), choices=SexModelMixin.SEX_TUPLE, default=SexModelMixin.UNKNOWN, help_text=u'用户性别') |
| 311 | 311 |
nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户昵称') |
| 312 | 312 |
avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像') |
| 313 |
- phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话', db_index=True) |
|
| 313 |
+ phone = models.CharField(_(u'phone'), max_length=11, default='', blank=True, help_text=u'用户电话', db_index=True) |
|
| 314 | 314 |
country = models.CharField(_(u'country'), max_length=255, blank=True, null=True, help_text=u'用户国家') |
| 315 | 315 |
province = models.CharField(_(u'province'), max_length=255, blank=True, null=True, help_text=u'用户省份') |
| 316 | 316 |
city = models.CharField(_(u'city'), max_length=255, blank=True, null=True, help_text=u'用户城市') |
@@ -337,8 +337,8 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
| 337 | 337 |
login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=_(u'登录时间')) |
| 338 | 338 |
|
| 339 | 339 |
has_membercard = models.BooleanField(_(u'has_membercard'), default=False, help_text=_(u'是否激活会员卡'), db_index=True) |
| 340 |
- membercardid = models.CharField(_(u'membercardid'), max_length=32, blank=True, null=True, help_text=_(u'会员卡编号'), db_index=True) |
|
| 341 |
- memberusercardcode = models.CharField(_(u'memberusercardcode'), max_length=32, blank=True, null=True, help_text=_(u'用户会员卡编号'), db_index=True) |
|
| 340 |
+ membercardid = models.CharField(_(u'membercardid'), max_length=32, default='', blank=True, help_text=_(u'会员卡编号'), db_index=True) |
|
| 341 |
+ memberusercardcode = models.CharField(_(u'memberusercardcode'), max_length=32, default='', blank=True, help_text=_(u'用户会员卡编号'), db_index=True) |
|
| 342 | 342 |
|
| 343 | 343 |
clerk_id = models.CharField(_(u'clerk_id'), max_length=32, blank=True, null=True, help_text=u'店员唯一标识', db_index=True) |
| 344 | 344 |
|
@@ -416,6 +416,14 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
| 416 | 416 |
'saleclerk_info': saleclerk_info, |
| 417 | 417 |
} |
| 418 | 418 |
|
| 419 |
+ @property |
|
| 420 |
+ def cardata(self): |
|
| 421 |
+ return {
|
|
| 422 |
+ 'brand_id': self.brand_id, |
|
| 423 |
+ 'membercardid': self.membercardid, |
|
| 424 |
+ 'memberusercardcode': self.memberusercardcode, |
|
| 425 |
+ } |
|
| 426 |
+ |
|
| 419 | 427 |
|
| 420 | 428 |
class UserLoginLogInfo(BaseModelMixin): |
| 421 | 429 |
SUCCESS = 0 |
@@ -164,20 +164,18 @@ def upgrade_api(request): |
||
| 164 | 164 |
|
| 165 | 165 |
|
| 166 | 166 |
def getPhoneNumber(request): |
| 167 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 168 |
+ |
|
| 167 | 169 |
user_id = request.POST.get('user_id', '')
|
| 168 | 170 |
|
| 169 |
- wxcfg = WECHAT.get('MINIAPP', {})
|
|
| 171 |
+ wxcfg = WECHAT.get('{}:MINIAPP'.format(brand_id), {})
|
|
| 170 | 172 |
|
| 171 | 173 |
appid = wxcfg.get('appID')
|
| 174 |
+ secret = wxcfg.get('appsecret')
|
|
| 172 | 175 |
|
| 173 | 176 |
# Just for compatible because of store session_key has changed |
| 174 | 177 |
session_key = None if user_id else RedisStorage(r).get('{0}:{1}:sessionKey'.format(appid, ''))
|
| 175 | 178 |
|
| 176 |
- wxcfg = WECHAT.get('MINIAPP', {})
|
|
| 177 |
- |
|
| 178 |
- appid = wxcfg.get('appID')
|
|
| 179 |
- secret = wxcfg.get('appsecret')
|
|
| 180 |
- |
|
| 181 | 179 |
iv = request.POST.get('iv', '')
|
| 182 | 180 |
encryptedData = request.POST.get('encryptedData', '')
|
| 183 | 181 |
|
@@ -0,0 +1,24 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from __future__ import division |
|
| 4 |
+ |
|
| 5 |
+import json |
|
| 6 |
+ |
|
| 7 |
+from django_logit import logit |
|
| 8 |
+from django_response import response |
|
| 9 |
+ |
|
| 10 |
+from account.models import UserInfo |
|
| 11 |
+from utils.redis.connect import r |
|
| 12 |
+from utils.redis.rkeys import MEMBERCARD_USERINFO_LIST |
|
| 13 |
+ |
|
| 14 |
+ |
|
| 15 |
+@logit |
|
| 16 |
+def phone(request): |
|
| 17 |
+ users = UserInfo.objects.filter().exclude(phone='', memberusercardcode='') |
|
| 18 |
+ |
|
| 19 |
+ p = r.pipeline() |
|
| 20 |
+ for u in users: |
|
| 21 |
+ p.rpush(MEMBERCARD_USERINFO_LIST, json.dumps(u.cardata)) |
|
| 22 |
+ p.execute() |
|
| 23 |
+ |
|
| 24 |
+ return response() |
@@ -5,7 +5,7 @@ from django_file_upload import views as file_views |
||
| 5 | 5 |
|
| 6 | 6 |
from account import tourguide_views |
| 7 | 7 |
from account import views as account_views |
| 8 |
-from api import admin_views, clerk_views, distributor_views, encrypt_views, mch_views, model_views, operator_views, slide_views |
|
| 8 |
+from api import admin_views, clerk_views, distributor_views, encrypt_views, mch_views, model_views, operator_views, refresh_views, slide_views |
|
| 9 | 9 |
from box import views as box_views |
| 10 | 10 |
from geo import views as geo_views |
| 11 | 11 |
from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views, |
@@ -294,3 +294,7 @@ urlpatterns += [ |
||
| 294 | 294 |
urlpatterns += [ |
| 295 | 295 |
url(r'^slides$', slide_views.slides, name='slides'), |
| 296 | 296 |
] |
| 297 |
+ |
|
| 298 |
+urlpatterns += [ |
|
| 299 |
+ url(r'^refresh/phone$', refresh_views.phone, name='phone'), |
|
| 300 |
+] |
@@ -16,12 +16,6 @@ from utils.redis.rkeys import MEMBERCARD_USERINFO_LIST |
||
| 16 | 16 |
WECHAT = settings.WECHAT |
| 17 | 17 |
|
| 18 | 18 |
|
| 19 |
-wxcfg = WECHAT.get('JSAPI', {})
|
|
| 20 |
- |
|
| 21 |
-appid = wxcfg.get('appID')
|
|
| 22 |
-secret = wxcfg.get('appsecret')
|
|
| 23 |
- |
|
| 24 |
- |
|
| 25 | 19 |
logger = logging.getLogger('console')
|
| 26 | 20 |
|
| 27 | 21 |
|
@@ -49,11 +43,16 @@ class Command(CompatibilityBaseCommand): |
||
| 49 | 43 |
|
| 50 | 44 |
logger.info(v) |
| 51 | 45 |
|
| 52 |
- card_id, code = v.get('card_id', ''), v.get('code', '')
|
|
| 46 |
+ brand_id, card_id, code = v.get('brand_id', ''), v.get('card_id', ''), v.get('code', '')
|
|
| 53 | 47 |
|
| 54 | 48 |
if not (card_id and code): |
| 55 | 49 |
continue |
| 56 | 50 |
|
| 51 |
+ wxcfg = WECHAT.get('{}:JSAPI'.format(brand_id), {})
|
|
| 52 |
+ |
|
| 53 |
+ appid = wxcfg.get('appID')
|
|
| 54 |
+ secret = wxcfg.get('appsecret')
|
|
| 55 |
+ |
|
| 57 | 56 |
userinfo = get_userinfo(card_id, code, appid=appid, secret=secret, storage=RedisStorage(r)) |
| 58 | 57 |
|
| 59 | 58 |
common_field_list = userinfo.get('common_field_list', [])
|
@@ -26,7 +26,7 @@ WECHAT = settings.WECHAT |
||
| 26 | 26 |
def get_userinfo_api(request): |
| 27 | 27 |
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
| 28 | 28 |
|
| 29 |
- wxcfg = WECHAT.get('MINIAPP', {})
|
|
| 29 |
+ wxcfg = WECHAT.get('{}:MINIAPP'.format(brand_id), {})
|
|
| 30 | 30 |
|
| 31 | 31 |
appid = wxcfg.get('appID')
|
| 32 | 32 |
secret = wxcfg.get('appsecret')
|
@@ -94,7 +94,7 @@ def get_userinfo_api(request): |
||
| 94 | 94 |
def mini_login_api(request): |
| 95 | 95 |
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
| 96 | 96 |
|
| 97 |
- wxcfg = WECHAT.get('MINIAPP', {})
|
|
| 97 |
+ wxcfg = WECHAT.get('{}:MINIAPP'.format(brand_id), {})
|
|
| 98 | 98 |
|
| 99 | 99 |
appid = wxcfg.get('appID')
|
| 100 | 100 |
secret = wxcfg.get('appsecret')
|
@@ -163,7 +163,7 @@ def get_userinfo_api2(request): |
||
| 163 | 163 |
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
| 164 | 164 |
user_id = request.POST.get('user_id', '')
|
| 165 | 165 |
|
| 166 |
- wxcfg = WECHAT.get('MINIAPP', {})
|
|
| 166 |
+ wxcfg = WECHAT.get('{}:MINIAPP'.format(brand_id), {})
|
|
| 167 | 167 |
|
| 168 | 168 |
appid = wxcfg.get('appID')
|
| 169 | 169 |
secret = wxcfg.get('appsecret')
|
@@ -210,7 +210,9 @@ def get_userinfo_api2(request): |
||
| 210 | 210 |
@logit(res=True) |
| 211 | 211 |
@transaction.atomic |
| 212 | 212 |
def membercard_extradata(request): |
| 213 |
- wxcfg = WECHAT.get('JSAPI', {})
|
|
| 213 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 214 |
+ |
|
| 215 |
+ wxcfg = WECHAT.get('{}:JSAPI'.format(brand_id), {})
|
|
| 214 | 216 |
|
| 215 | 217 |
appid = wxcfg.get('appID')
|
| 216 | 218 |
secret = wxcfg.get('appsecret')
|
@@ -2,7 +2,7 @@ pywe-card==1.0.0 |
||
| 2 | 2 |
pywe-component==1.0.1 |
| 3 | 3 |
pywe-component-preauthcode==1.0.3 |
| 4 | 4 |
pywe-jssdk==1.1.0 |
| 5 |
-pywe-membercard==1.0.2 |
|
| 5 |
+pywe-membercard==1.0.3 |
|
| 6 | 6 |
pywe-miniapp==1.1.5 |
| 7 | 7 |
pywe-oauth==1.0.7 |
| 8 | 8 |
pywe-pay==1.0.13 |
@@ -7,9 +7,9 @@ from pywe_pay import WeChatPay |
||
| 7 | 7 |
WECHAT = settings.WECHAT |
| 8 | 8 |
|
| 9 | 9 |
|
| 10 |
-def test_pay(openid, amount=100, trade_type='JSAPI', pay_type='PACKET'): |
|
| 10 |
+def test_pay(brand_id, openid, amount=100, trade_type='JSAPI', pay_type='PACKET'): |
|
| 11 | 11 |
# 根据 trade_type 获取 wechat 配置 |
| 12 |
- wxcfg = WECHAT.get(trade_type, {})
|
|
| 12 |
+ wxcfg = WECHAT.get('{}:{}'.format(brand_id, trade_type), {})
|
|
| 13 | 13 |
# WeChatPay 初始化 |
| 14 | 14 |
wxpay = WeChatPay(wxcfg.get('appID'), wxcfg.get('apiKey'), wxcfg.get('mchID'), mch_cert=wxcfg.get('mch_cert'), mch_key=wxcfg.get('mch_key'))
|
| 15 | 15 |
|