|
# -*- coding: utf-8 -*-
import logging
from django.conf import settings
from utils.qiniucdn import qiniu_file_url, upload_file_path, upload_file_req
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 django_we.models import SubscribeUserInfo
from pywe_component_authorizer_token import authorizer_access_token
from pywe_custom_message import send_custom_card_message, send_custom_wxa_message
from pywe_event_message import parse_eventkey
from pywe_storage import RedisStorage
from pywe_user import get_user_info
from account.models import UserInfo
from utils.redis.connect import r
from utils.redis.rkeys import MEMBERCARD_USERINFO_LIST, SUBSCRIBE_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_8792cc1541d8':
# 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', '')
CFG = settings.WECHAT.get('COMPONENT', {})
appid = 'wx1c2864d7a4eedd89'
# 获取第三方平台token
token = authorizer_access_token(
component_appid=CFG['appID'],
component_secret=CFG['appsecret'],
authorizer_appid=appid,
storage=RedisStorage(r)
)
if event == 'subscribe' or event == 'unsubscribe':
# 获取用户信息
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.using('hanyuan').filter(openid=openid).update(subscribe=subscribe)
# 根据场景值判断是否发会员卡
if eventkey:
scene = parse_eventkey(eventkey, event='subscribe')
if scene:
params = scene.split(':')
send_custom_wxa_message(
openid=openid,
miniappid='wxc0dec29f0c358493',
pagepath='/pages/registration/course/course?field_id={}&admin_id={}'.format(params[0], params[1]),
thumb_media_id='JVNN-aQ7sXG5GVfOzqvmWdbtZqTqslOnYd9PfQ0gISw',
title=u'报名课程',
appid=appid,
secret=None,
token=token,
storage=RedisStorage(r)
)
# send_custom_card_message(
# openid=openid,
# card_id=settings.MEMBER_CARD_ID_HANYUAN,
# appid=appid,
# secret=None,
# token=token,
# storage=RedisStorage(r)
# )
elif event == 'SCAN':
if eventkey:
scene = eventkey
# scene = parse_eventkey(eventkey, event='SCAN')
if scene:
params = scene.split(':')
send_custom_wxa_message(
openid=openid,
miniappid='wxc0dec29f0c358493',
pagepath='/pages/registration/course/course?field_id={}&admin_id={}'.format(params[0], params[1]),
thumb_media_id='JVNN-aQ7sXG5GVfOzqvmWdbtZqTqslOnYd9PfQ0gISw',
title=u'报名课程',
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_BASE_PATH_CALLBACK_FUNC(request):
""" DJANGO FILE UPLOAD BASE PATH Callback Func """
zbar = int(request.POST.get('zbar', 0))
if zbar:
return 'zbar'
zbar2 = int(request.POST.get('zbar2', 0))
if zbar2:
return 'zbar2'
return request.POST.get('file_type', '')
def DJANGO_FILE_UPLOAD_STORAGE_FUNC(request, file_path=None):
""" DJANGO FILE UPLOAD Storage Func """
return {
# 'file_url': '',
}
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', '')
upload_qiniu = request.POST.get('upload_qiniu', '')
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,
)
elif file_type == 'contribution':
width = request.POST.get('width', '')
height = request.POST.get('height', 0)
file = request.FILES.get('file', '')
# upload_file_path('media/' + file_path, file_path, bucket='tamron')
upload_file_req(file, file_path, bucket='tamron')
file_url = qiniu_file_url(file_path, bucket='tamron')
return {
'width': width,
'height': height,
'file_url': file_url,
}
elif file_type == 'member_activity' or (file_type and upload_qiniu):
file = request.FILES.get('file', '')
# upload_file_path('media/' + file_path, file_path, bucket='tamron')
upload_file_req(file, file_path, bucket='tamron')
file_url = qiniu_file_url(file_path, bucket='tamron')
return {
'file_url': file_url,
}
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 zbar2:
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,
}
|