No Description

subscribe.py 3.9KB

    # -*- coding: utf-8 -*- import logging from django.conf import settings from django.db import transaction from django_redis_connector import connector from django_six import CompatibilityBaseCommand, close_old_connections from django_we.models import SubscribeUserInfo from pywe_storage import RedisStorage from account.models import UserInfo from mch.models import BrandInfo from pre.custom_message import sendcustomwxamessage from pywe_user import get_user_info from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST r1 = connector(settings.REDIS.get('db1', {})) WECHAT = settings.WECHAT logger = logging.getLogger('console') class Command(CompatibilityBaseCommand): def handle(self, *args, **options): logger.info('SubscribeUserInfo is dealing') brands = BrandInfo.objects.filter(status=True) subscribe_keys = [SUBSCRIBE_USERINFO_LIST % brand.brand_id for brand in brands] while True: # r.rpushjson('SUBSCRIBE_USERINFO_LIST', { # 'brand_id': 'brand_id', # 'openid': 'openid', # }) k, v = r1.blpopjson(subscribe_keys, 60) if not v: continue logger.info(v) brand_id, openid = v.get('brand_id', ''), v.get('openid', '') wxcfg = WECHAT.get('{}:JSAPI'.format(brand_id), {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') userinfo = get_user_info(openid, appid=appid, secret=secret, storage=RedisStorage(r1)) close_old_connections() with transaction.atomic(): subscribe, unionid, openid = userinfo.get('subscribe', ''), userinfo.get('unionid', ''), userinfo.get('openid', '') if subscribe: SubscribeUserInfo.objects.update_or_create(extraid=brand_id, openid=openid, defaults={ 'unionid': unionid, 'nickname': userinfo.get('nickname', ''), 'sex': userinfo.get('sex', ''), 'headimgurl': userinfo.get('headimgurl', ''), 'country': userinfo.get('country', ''), 'province': userinfo.get('province', ''), 'city': userinfo.get('city', ''), 'subscribe': userinfo.get('subscribe', ''), 'subscribe_time': userinfo.get('subscribe_time', ''), 'subscribe_scene': userinfo.get('subscribe_scene', ''), 'groupid': userinfo.get('groupid', ''), 'tagid_list': userinfo.get('tagid_list', ''), 'qr_scene': userinfo.get('qr_scene', ''), 'qr_scene_str': userinfo.get('qr_scene_str', ''), 'language': userinfo.get('language', ''), 'remark': userinfo.get('remark', ''), }) UserInfo.objects.filter(unionid=unionid).update(openid=openid, subscribe=subscribe) else: SubscribeUserInfo.objects.filter(extraid=brand_id, openid=openid).update(subscribe=subscribe) UserInfo.objects.filter(openid=openid).update(subscribe=subscribe) # 通过客服消息发送小程序卡片 if subscribe: try: user = UserInfo.objects.get(unionid=unionid) except UserInfo.DoesNotExist: continue if user.sendcustomwxamessage: sendcustomwxamessage( openid=user.openid, miniappid='wx02c3038b13008270', pagepath='/pages/index/index?openCard=1', thumb_media_id=u'93tb_prlmkAr0UCU_HhL-nX2j7jx0F2nd0lqWVoeLPo', title=u'申请电子保修卡' ) close_old_connections()