| 
              # -*- coding: utf-8 -*-
import logging
from django.conf import settings
logger = logging.getLogger('logit')
def DJANGO_WE_CFG_FUNC(request, state=None):
    """ WeChat CFG Callback Func """
    if state in ['component_auth', 'component_callback', 'component_preauth_callback']:
        return settings.WECHAT.get('COMPONENT')
def DJANGO_WE_QUOTE_STATE_FUNC(request, state):
    """ WeChat Quote Callback Func """
    from utils.redis.connect import r
    return r.quote(state, short_uuid=True)
def DJANGO_WE_UNQUOTE_STATE_FUNC(request, state):
    """ WeChat UnQuote Callback Func """
    from utils.redis.connect import r
    return r.unquote(state, buf=True)
def DJANGO_WE_BASE_FUNC(code, state, access_info=None):
    """ WeChat Base Redirect Callback Func """
def DJANGO_WE_USERINFO_FUNC(code, state, access_info=None, userinfo=None):
    """ WeChat Userinfo Redirect Callback Func """
def DJANGO_WE_SHARE_FUNC(request, state=None):
    """ WeChat Share Callback Func """
def DJANGO_WE_MESSAGE_CALLBACK_FUNC(request, data, decrypted=None):
    """ WeChat Message Callback Func """
def DJANGO_WE_COMPONENT_CALLBACK_FUNC(request, appid, data, decrypted=None):
    """ WeChat Component Message Callback Func """
    from account.models import UserInfo
    from django_we.models import SubscribeUserInfo
    from pywe_component_authorizer_token import authorizer_access_token
    from pywe_custom_message import send_custom_card_message
    from pywe_event_message import parse_eventkey
    from pywe_storage import RedisStorage
    from pywe_user import get_user_info
    from utils.redis.connect import r
    from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST, MEMBERCARD_USERINFO_LIST
    logger.info(appid)
    logger.info(data)
    logger.info(decrypted)
    event = decrypted.get('Event', '')
    tousername = decrypted.get('ToUserName', '')
    openid = fromusername = decrypted.get('FromUserName', '')
    unionid = decrypted.get('UnionId', '')
    membercardid = decrypted.get('CardId', '')
    memberusercardcode = decrypted.get('UserCardCode', '')
    # 富士
    if tousername == 'gh_0cbd39fdde28':
        brand_id = settings.COMPONENT_CALLBACK_CONFIG[tousername]
        if event == 'user_get_card':
            UserInfo.objects.using('fujifilm').filter(unionid=unionid).update(openid=openid, has_membercard=True, membercardid=membercardid, memberusercardcode=memberusercardcode)
            r.rpushjson(MEMBERCARD_USERINFO_LIST, {
                'brand_id': brand_id,
                'card_id': membercardid,
                'code': memberusercardcode
            })
        elif event == 'user_del_card':
            UserInfo.objects.using('fujifilm').filter(memberusercardcode=memberusercardcode).update(has_membercard=False)
        elif event == 'subscribe' or event == 'unsubscribe':
            r.rpushjson(SUBSCRIBE_USERINFO_LIST % brand_id, {
                'brand_id': brand_id,
                'openid': openid,
            })
    # WINE
    elif tousername == 'gh_2e5f21d2a57d':
        brand_id = settings.COMPONENT_CALLBACK_CONFIG[tousername]
        if event == 'user_get_card':
            UserInfo.objects.using('wine').filter(unionid=unionid).update(openid=openid, has_membercard=True, membercardid=membercardid, memberusercardcode=memberusercardcode)
            r.rpushjson(MEMBERCARD_USERINFO_LIST, {
                'brand_id': brand_id,
                'card_id': membercardid,
                'code': memberusercardcode
            })
        elif event == 'user_del_card':
            UserInfo.objects.using('wine').filter(memberusercardcode=memberusercardcode).update(has_membercard=False)
        elif event == 'subscribe' or event == 'unsubscribe':
            r.rpushjson(SUBSCRIBE_USERINFO_LIST % brand_id, {
                'brand_id': brand_id,
                'openid': openid,
            })
    # 腾龙
    elif tousername == 'gh_c87efc299ce5':
        brand_id = settings.COMPONENT_CALLBACK_CONFIG[tousername]
        if event == 'user_get_card':
            UserInfo.objects.filter(unionid=unionid).update(openid=openid, has_membercard=True, membercardid=membercardid, memberusercardcode=memberusercardcode)
            r.rpushjson(MEMBERCARD_USERINFO_LIST, {
                'brand_id': brand_id,
                'card_id': membercardid,
                'code': memberusercardcode
            })
        elif event == 'user_del_card':
            UserInfo.objects.filter(memberusercardcode=memberusercardcode).update(has_membercard=False)
        elif event == 'subscribe' or event == 'unsubscribe':
            r.rpushjson(SUBSCRIBE_USERINFO_LIST % brand_id, {
                'brand_id': brand_id,
                'openid': openid,
            })
    # 函院
    elif tousername == 'gh_48cbe3523cf6':
        # OrderedDict([(u'ToUserName', u'gh_48cbe3523cf6'), (u'FromUserName', u'oRgy0uH8qHxzwwSC9H7YrRIv5Mxw'), (u'CreateTime', u'1598886287'), (u'MsgType', u'event'), (u'Event', u'subscribe'), (u'EventKey', u'qrscene_book'), (u'Ticket', u'gQHL8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyYWgwVjRSNmNhUVUxMDAwMHcwNzkAAgT8OkxfAwQAAAAA')])
        eventkey = decrypted.get('EventKey', '')
        if event == 'subscribe' or event == 'unsubscribe':
            CFG = settings.WECHAT.get('COMPONENT', {})
            appid = 'wx75b14576708d330d'
            # 获取第三方平台token
            token = authorizer_access_token(
                component_appid=CFG['appID'],
                component_secret=CFG['appsecret'],
                authorizer_appid=appid,
                storage=RedisStorage(r)
            )
            # 获取用户信息
            userinfo = get_user_info(openid, appid=appid, secret=None, token=token, storage=RedisStorage(r))
            subscribe, unionid, openid = userinfo.get('subscribe', ''), userinfo.get('unionid', ''), userinfo.get('openid', '')
            # 更新关注信息
            if subscribe:
                SubscribeUserInfo.objects.using('hanyuan').update_or_create(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', ''),
                })
            else:
                SubscribeUserInfo.objects.filter(openid=openid).update(subscribe=subscribe)
            # 根据场景值判断是否发会员卡
            if eventkey:
                scene = parse_eventkey(eventkey, event='subscribe')
                if scene:
                    send_custom_card_message(
                        openid=openid,
                        card_id=settings.DJANGO_WE_MEMBER_CARD_ID,
                        appid=appid,
                        secret=None,
                        token=token,
                        storage=RedisStorage(r)
                    )
def DJANGO_WE_REDIS_OBJ_FUNC(request):
    """ WeChat Redis Object Callback Func """
    from utils.redis.connect import r
    return r
def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
    """ DJANGO FILE UPLOAD Callback Func """
    from logs.models import MchLogInfo
    file_type = request.POST.get('file_type', '')
    if file_type == 'logfile':
        optor_id = request.POST.get('optor_id', '')
        version = request.POST.get('version', 0)
        MchLogInfo.objects.create(
            log_file=file_path,
            operator_id=optor_id,
            app_version=version,
        )
    zbar = int(request.POST.get('zbar', 0))
    if zbar:
        import os
        from utils.zbar.zbar import zbar
        file_path = os.path.join(settings.MEDIA_ROOT, file_path)
        zbars = zbar(file_path)
        return {
            'zbars': zbars,
        }
    zbar2 = int(request.POST.get('zbar2', 0))
    if zbar:
        import os
        from utils.zbar.zbar2 import zbar2
        file_path = os.path.join(settings.MEDIA_ROOT, file_path)
        zbars = zbar2(file_path)
        return {
            'zbars': zbars,
        }
 
  |