|
# -*- 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 """
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
# If Not Buf, When Wechat Multi Request, Unquote Will Get None
# Then Once Should ReOAuth, Will Raise Error
return r.unquote(state, buf=True) or state
def DJANGO_WE_BASE_FUNC(code, state, access_info=None):
""" WeChat Base Redirect Callback Func """
def DJANGO_WE_BASE_COOKIE_FUNC(code, state, access_info=None):
""" WeChat Base Set Cookie Redirect Callback Func """
def DJANGO_WE_USERINFO_FUNC(code, state, access_info=None, userinfo=None):
""" WeChat Userinfo Redirect Callback Func """
from django.conf import settings
from utils.redis.connect import r
from utils.user.userinfo_save import userinfo_save
# Save profile or something else
user = userinfo_save(userinfo)
token_check_key = getattr(user, settings.TOKEN_CHECK_KEY)
return {
settings.TOKEN_CHECK_KEY: token_check_key,
'vtoken': r.token(token_check_key, ex=True, time=r.REDIS_EXPIRED_ONE_DAY, buf=False, short_uuid=True),
}
def DJANGO_WE_USERINFO_COOKIE_FUNC(code, state, access_info=None, userinfo=None):
""" WeChat Userinfo Set Cookie Redirect Callback Func """
from django.conf import settings
from utils.user.userinfo_save import userinfo_save
# Save profile or something else
user = userinfo_save(userinfo)
token_check_key = getattr(user, settings.TOKEN_CHECK_KEY)
return {}, settings.TOKEN_CHECK_KEY, token_check_key
def DJANGO_WE_SHARE_FUNC(request, state=None):
""" WeChat Share Callback Func """
# from django.conf import settings
# return settings.WECHAT_OAUTH2_REDIRECT_URL
def DJANGO_WE_MESSAGE_CALLBACK_FUNC(request, xmldict, decrypted):
""" WeChat Message Callback Func """
from django_we.models import SubscribeUserInfo
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
# 带参二维码关注
# OrderedDict([(u'ToUserName', u'gh_c87efc299ce5'), (u'FromUserName', u'oK7eEjjqhoE6bTLX3k5Xa2reWzuI'), (u'CreateTime', u'1598825495'), (u'MsgType', u'event'), (u'Event', u'subscribe'), (u'EventKey', u'qrscene_book'), (u'Ticket', u'gQGc8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyZFdDRHcwSFRhNGUxMDAwMGcwNzQAAgRSHkxfAwQAAAAA')])
logger.info(xmldict)
logger.info(decrypted)
event = decrypted.get('Event', '')
eventkey = decrypted.get('EventKey', '')
openid = decrypted.get('FromUserName', '')
if event == 'subscribe' or event == 'unsubscribe':
JSAPI = settings.WECHAT.get('JSAPI', {})
appid = JSAPI.get('appID', '')
appsecret = JSAPI.get('appsecret', '')
# 获取用户信息
userinfo = get_user_info(openid, appid=appid, secret=appsecret, storage=RedisStorage(r))
subscribe, unionid, openid = userinfo.get('subscribe', ''), userinfo.get('unionid', ''), userinfo.get('openid', '')
# 更新关注信息
if subscribe:
SubscribeUserInfo.objects.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=appsecret,
storage=RedisStorage(r)
)
def DJANGO_WE_COMPONENT_AUTH_FUNC(request, xmldict, decrypted):
""" WeChat COMPONENT Auth Func """
def DJANGO_WE_COMPONENT_CALLBACK_FUNC(request, appid, xmldict, decrypted):
""" WeChat COMPONENT Callback Func """
def DJANGO_WE_REDIS_OBJ_FUNC(request):
""" WeChat Redis Object Callback Func """
from utils.redis.connect import r
return r
|