Exemple #1
0
def mui_get_session_histories(request):
    session_id = request.GET['s_id']
    current_page = int(request.GET.get('cur_page', '1'))
    count = int(request.GET.get('count', 10))
    isManager = request.GET.get('isManager', 'false')
    isSystemMenager = request.GET.get('isSystemMenager', 'false')
    # user_id = request.GET['user_id']
    session = Session.objects.get(id=session_id)
    messages = Message.objects.filter(session=session_id).order_by('-id')
    #进行分页
    pageinfo, messages = paginator.paginate(messages, current_page, count)

    sender_usernames = [m.from_weixin_user_username for m in messages]
    recevier_usernames = [m.to_weixin_user_username for m in messages]
    weixin_user_usernames = set(sender_usernames + recevier_usernames)
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([u.username, u] for u in weixin_users)

    mpuser = get_system_user_binded_mpuser(request.user)

    try:
        mpuser_preview_info = MpuserPreviewInfo.objects.get(mpuser=mpuser)
    except Exception, e:
        print e.message
        response = create_response(500)
        response.errMsg = u'获取公众号预览信息失败'
        return response.get_jsonp_response(request)
Exemple #2
0
def get_members(request):
	"""
	get_memers: 会员列表
	"""
	mpuser = get_system_user_binded_mpuser(request.user)
	webapp_id  = request.user_profile.webapp_id
	#处理来自“数据罗盘-会员分析-关注会员链接”过来的查看关注会员的请求
	#add by duhao 2015-07-13
	status = request.GET.get('status' , '1')
	member_tags = MemberTag.get_member_tags(webapp_id)
	#调整排序,将为分组放在最前面
	tags = []
	for tag in member_tags:
		if tag.name == '未分组':
			tags = [tag] + tags
		else:
			tags.append(tag)
	member_tags = tags
	c = RequestContext(request, {
		'first_nav_name': export.MEMBER_FIRST_NAV,
		'second_navs': export.get_second_navs(request),
		'second_nav_name': export.MEMBERS,
		'should_show_authorize_cover' : get_should_show_authorize_cover(request),
		'user_tags': member_tags,
		'grades': MemberGrade.get_all_grades_list(webapp_id),
		'counts': Member.objects.filter(webapp_id=webapp_id,is_for_test=0, status__in= [SUBSCRIBED, CANCEL_SUBSCRIBED]).count(),
		'status': status
	})

	return render_to_response('member/editor/members.html', c)
Exemple #3
0
def show_history(request):
    mpuser = get_system_user_binded_mpuser(request.user)

    if mpuser is None:
        raise Http404('Binded MpUser Not Found')

    return_path = request.GET.get('return_path', 'message')
    nav_name = request.GET.get('nav_name', weixin.WEIXIN_MESSAGE_NAV_NAME)
    session_id = request.GET['session_id']

    session = None
    try:
        session = Session.objects.get(mpuser=mpuser, id=session_id)
    except:
        raise Http404('Session Not Found')

    #根据fake_id 得到对应用户信息weixin_user
    if not session.weixin_user:
        is_user_subscribed = 0
    else:
        is_user_subscribed = is_subscribed(session.weixin_user)

    session.unread_count = 0
    session.save()
    c = RequestContext(
        request, {
            'first_nav_name': FIRSTT_NAV_NAME,
            'second_navs': WEIXIN_SECOND_NAVS,
            'second_nav_name': nav_name,
            'session': session,
            'return_path': return_path,
            'is_subscribed': is_user_subscribed
        })
    return render_to_response('message/list_histories.html', c)
Exemple #4
0
def get_should_show_authorize_cover(request):
	mpuser = get_system_user_binded_mpuser(request.user)

	if (mpuser is None) or (not mpuser.is_certified) or (not mpuser.is_service):
		return True
	else:
		return False
Exemple #5
0
def send_custome_message(request):
    content = request.POST['text']
    openid_sendto = request.POST['openid']

    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        response = create_response(500)
        response.errMsg = u'请先进行公众号的绑定'
    else:
        #进行实际消息的发送
        try:
            if openid_sendto and get_weixinuser_sessions(
                    openid_sendto).count() > 0:
                session = get_weixinuser_sessions(openid_sendto)[0]
                is_active = True if datetime.now(
                ) < session.latest_contact_created_at + timedelta(
                    hours=EXPIRED_TIME) and datetime.now(
                    ) > session.latest_contact_created_at else False
                if is_active:
                    _send_custom_message(mpuser, openid_sendto, content)
                    response = create_response(200)
                else:
                    response = create_response(501)
                    response.errMsg = u'互动已经超时'
            else:
                response = create_response(501)
                response.errMsg = u'互动已经超时'
        except WeixinApiError, error:
            response = create_response(500)

            error_code = error.error_response.errcode
            response.errMsg = weixin_error_codes.code2msg.get(
                error_code, error.error_response.errmsg)
            response.innerErrMsg = error.error_response.detail
        except:
Exemple #6
0
def reply_session(request):
    session_id = request.POST['session_id']
    content = request.POST['content']
    receiver_username = request.POST['receiver_username']
    receiver = WeixinUser.objects.get(username=receiver_username)
    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        response = create_response(500)
        response.errMsg = u'请先进行公众号的绑定'
    #回复用户消息
    return_flag = send_custome_message(content, receiver_username, mpuser)
    if not return_flag:
        response = create_response(500)
        response.errMsg = u'发送消息失败'
    else:
        #存储数据库
        Session.objects.filter(id=session_id).update(
            latest_contact_content=content,
            latest_contact_created_at=datetime.today(),
            is_latest_contact_by_viper=True,
            unread_count=0)
        Message.objects.create(mpuser=mpuser,
                               session_id=session_id,
                               from_weixin_user_username=mpuser.username,
                               to_weixin_user_username=receiver_username,
                               content=content,
                               is_reply=True)
        response = create_response(200)
    return response.get_response()
Exemple #7
0
def reset_realtime_unread_count(request):
    mpuser = get_system_user_binded_mpuser(request.user)

    if mpuser is None:
        return create_response(200).get_response()
    else:
        RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=0)

        return create_response(200).get_response()
Exemple #8
0
def get_realtime_unread_count(user):
    mpuser = get_system_user_binded_mpuser(user)

    if mpuser is None:
        return 0
    else:
        try:
            return RealTimeInfo.objects.get(mpuser=mpuser).unread_count
        except:
            return 0
def create_inactive_account(request):
    username = request.POST.get('name', None)
    key = request.POST.get('key', None)

    if username is None:
        response = create_response(400)
        response.errMsg = u'非法参数'
        return response.get_response()

    if KEY != key:
        response = create_response(INVALID_KEY_ERROR_CODE)
        response.errMsg = u'非法的key'
        return response.get_response()

    exist_users = User.objects.filter(username=username)
    if exist_users.count() == 0:
        response = create_response(400)
        response.errMsg = u'该用户不存在'
        return response.get_response()

    to_operate_user = exist_users[0]
    user_profile = UserProfile.objects.get(user=to_operate_user)

    try:
        #首先更改用户名,改为:${username}_id_deleted
        #该用户名之后,原用户就无法登录
        to_operate_user.username = "******".format(
            to_operate_user.username, to_operate_user.id)
        to_operate_user.save()

        user_profile.is_mp_registered = False
        user_profile.force_logout()

        #进行接触绑定操作
        mpuser = get_system_user_binded_mpuser(to_operate_user)
        if mpuser:
            mpuser.delete()

        #删除所有之前的会员
        Member.objects.filter(webapp_id=user_profile.webapp_id).delete()
        #删除所有之前的微信用户
        WeixinUser.objects.filter(webapp_id=user_profile.webapp_id).delete()

        response = create_response(200)
    except:
        error_msg = u"置用户({}}失效操作失败, cause:\n{}".format(
            username, unicode_full_stack())
        watchdog_error(error_msg)

        response = create_response(500)
        response.innerErrMsg = error_msg

    return response.get_response()
Exemple #10
0
def get_unread_message_count(user):
    unread_message_count = 0
    mpuser = get_system_user_binded_mpuser(user)
    sessions = Session.objects.select_related().filter(
        mpuser=mpuser,
        is_show=True).exclude(member_latest_created_at="").aggregate(
            Sum("unread_count"))

    if sessions["unread_count__sum"] is not None:
        unread_message_count = sessions["unread_count__sum"]

    return unread_message_count
Exemple #11
0
def member_qrcode_settings(request):
    mpuser = get_system_user_binded_mpuser(request.user)

    if (mpuser is
            None) or (not mpuser.is_certified) or (not mpuser.is_service):
        should_show_authorize_cover = True
    else:
        should_show_authorize_cover = False

    coupon_rules = get_coupon_rules(request.user)
    member_qrcode_settings = MemberQrcodeSettings.objects.filter(
        owner=request.user)
    member_qrcode_setting = member_qrcode_settings[
        0] if member_qrcode_settings.count() > 0 else None
    if member_qrcode_setting:
        award_contents = MemberQrcodeAwardContent.objects.filter(
            member_qrcode_settings=member_qrcode_setting)
        if award_contents.count() > 0:
            award_content = award_contents[
                0] if member_qrcode_setting.award_member_type == 1 else None
        else:
            award_content = None
    else:
        award_contents = None
        award_content = None
    member_grades = get_all_grades_list(request)

    if member_grades and award_contents:

        for member_grade in member_grades:
            content = award_contents.filter(
                member_level=member_grade.id)[0] if award_contents.filter(
                    member_level=member_grade.id).count() > 0 else None
            if content:
                member_grade.award_type = content.award_type
                member_grade.award_content = content.award_content

    c = RequestContext(
        request, {
            'first_nav_name': FIRST_NAV_NAME,
            'second_navs': export.get_second_navs(request),
            'second_nav_name': SECOND_NAV_NAME,
            'member_qrcode_settings': member_qrcode_setting,
            'coupon_rules': coupon_rules,
            'award_content': award_content,
            'member_grades': member_grades,
            'should_show_authorize_cover': should_show_authorize_cover,
            'is_hide_weixin_option_menu': True
        })
    return render_to_response(
        'member_qrcode/editor/member_qrcode_settings.html', c)
Exemple #12
0
def list_memers(request):
	mpuser = get_system_user_binded_mpuser(request.user)
	webapp_id  = request.user_profile.webapp_id
	
	
	c = RequestContext(request, {
		'first_nav_name': FIRST_NAV_NAME,
		'second_navs': export.get_second_navs(request),
		'second_nav_name': WEAPP_USER_CENTER_NAV_NAME,
		'should_show_authorize_cover' : get_should_show_authorize_cover(request),
		'user_tags': MemberTag.get_member_tags(webapp_id),
		'grades': MemberGrade.get_all_grades_list(webapp_id),
		'counts': Member.objects.filter(webapp_id=webapp_id,is_for_test=0).count()
	})

	return render_to_response('user_center/editor/user_center.html', c)
Exemple #13
0
def edit_customerized_menu(request):
    mpuser = get_system_user_binded_mpuser(request.user)

    if (mpuser is None) or (not mpuser.is_service and not mpuser.is_certified):
        should_show_authorize_cover = True
    else:
        should_show_authorize_cover = False
    c = RequestContext(
        request, {
            'first_nav_name': FIRSTT_NAV_NAME,
            'second_navs': WEIXIN_SECOND_NAVS,
            'second_nav_name': weixin.WEIXIN_MANAGE_MENU_NAV_NAME,
            'menu_items': menu_util.get_menus_json(request.user),
            'should_show_authorize_cover': should_show_authorize_cover
        })

    return render_to_response('editor/edit_customer_menu.html', c)
Exemple #14
0
def create_mpuser_access_token(request):
    from modules.member.util import create_member_group, get_all_group
    appid = request.GET.get('appid', None)
    secret = request.GET.get('secret', None)

    if appid is None or secret is None:
        response = create_response(400)
        response.errMsg = u'appid或secret输入不正确'
    else:
        new_access_token, expires_span, error_response = get_new_access_token(
            appid, secret)
        if (new_access_token is None) and (error_response is None):
            response = create_response(500)
            response.errMsg = u'服务繁忙请稍后重试'
        else:
            if new_access_token is None:
                response = create_response(500)
                response.errMsg = error_response.get_errormsg_in_zh()
            else:
                #访问api成功, 需要创建本地mpser对应的授权信息
                try:
                    mpuser = get_system_user_binded_mpuser(request.user)
                    access_token = _update_local_mpuser_access_token(
                        mpuser, appid, secret, new_access_token, expires_span)
                    try:
                        user_profile = request.user_profile
                        groups = get_all_group(user_profile)
                        create_member_group(groups, user_profile.webapp_id)
                    except:
                        notify_msg = u"更新分组失败, cause:\n{}".format(
                            unicode_full_stack())
                        watchdog_fatal(notify_msg)

                    response = create_response(200)
                except:
                    notify_msg = u"获取或存储access_token失败, appid:'{}', secret:'{}', cause:\n{}".format(
                        appid, secret, unicode_full_stack())
                    watchdog_error(notify_msg)

                    response = create_response(500)
                    response.errMsg = u'服务繁忙请稍后重试'

    return response.get_response()
Exemple #15
0
def list_timelines(request):
    mpuser = get_system_user_binded_mpuser(request.user)

    if (mpuser is
            None) or (not mpuser.is_certified) or (not mpuser.is_service):
        should_show_authorize_cover = True
    else:
        should_show_authorize_cover = False
    c = RequestContext(
        request, {
            'first_nav_name': FIRSTT_NAV_NAME,
            'second_navs': WEIXIN_SECOND_NAVS,
            'second_nav_name': weixin.WEIXIN_MESSAGE_NAV_NAME,
            'should_show_authorize_cover': should_show_authorize_cover,
            'IS_DEBUG': settings.DEBUG
        })

    account_models.reset_new_message_count(user=request.user)
    return render_to_response('message/list_sessions.html', c)
Exemple #16
0
    def get(request):
        mpuser = get_system_user_binded_mpuser(request.manager)

        if (mpuser is
                None) or (not mpuser.is_certified) or (not mpuser.is_service):
            should_show_authorize_cover = True
        else:
            should_show_authorize_cover = False

        coupon_rules = get_coupon_rules(request.manager)
        try:
            member_qrcode_setting = MemberChannelQrcodeSettings.objects.get(
                owner=request.manager)
        except:
            member_qrcode_setting = None

        if member_qrcode_setting:
            try:
                award_content = MemberChannelQrcodeAwardContent.objects.get(
                    owner=request.manager)
            except:
                award_content = None
        else:
            award_content = None

        c = RequestContext(
            request, {
                'first_nav_name': FIRST_NAV,
                'second_navs': export.get_weixin_second_navs(request),
                'second_nav_name': export.WEIXIN_ADVANCE_SECOND_NAV,
                'third_nav_name':
                export.ADVANCE_MANAGE_MEMBER_CHANNEL_QRCODE_NAV,
                'member_qrcode_settings': member_qrcode_setting,
                'coupon_rules': coupon_rules,
                'award_content': award_content,
                'should_show_authorize_cover': should_show_authorize_cover,
                'is_hide_weixin_option_menu': True
            })

        return render_to_response(
            'weixin/advance_manage/edit_member_channel_qrcode.html', c)
Exemple #17
0
def delete_binded_mpuser(request):
    user_profile = request.user_profile

    response = create_response(200)
    try:
        mpuser = get_system_user_binded_mpuser(request.user)
        if mpuser:
            mpuser.delete()

            user_profile.is_mp_registered = False
            user_profile.save()

        #删除所有之前的会员
        Member.objects.filter(webapp_id=user_profile.webapp_id).delete()
        #删除所有之前的微信用户
        WeixinUser.objects.filter(webapp_id=user_profile.webapp_id).delete()
    except:
        notify_msg = u"解除绑定操作失败, cause:\n{}".format(unicode_full_stack())
        watchdog_fatal(notify_msg)

    return response.get_response()
Exemple #18
0
def delete_system_user(user):
    if user is None:
        return False

    try:
        from modules.member.models import Member
        user_profile = UserProfile.objects.get(user_id=user.id)
        mpuser = get_system_user_binded_mpuser(user)
        if mpuser:
            mpuser.delete()

        #删除所有之前的会员
        Member.objects.filter(webapp_id=user_profile.webapp_id).delete()
        user_profile.delete()

        User.objects.filter(id=user.id).delete()

        return True
    except:
        watchdog_fatal(u"删除用户{}失败".format(user.id))
        return False
Exemple #19
0
def reply_session_write_back(request):
    session_id = request.POST['session_id']
    content = request.POST['content']
    receiver_username = request.POST['receiver_username']

    receiver = WeixinUser.objects.get(username=receiver_username)
    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        response = create_response(500)
        response.errMsg = u'请先进行公众号的绑定'

    Session.objects.filter(id=session_id).update(
        latest_contact_content=content,
        latest_contact_created_at=datetime.today(),
        is_latest_contact_by_viper=True,
        unread_count=0)
    Message.objects.create(mpuser=mpuser,
                           session_id=session_id,
                           from_weixin_user_username=mpuser.username,
                           to_weixin_user_username=receiver_username,
                           content=content,
                           is_reply=True)

    return create_response(200).get_response()
Exemple #20
0
def get_session_histories(request):
    session_id = request.GET['session_id']
    messages = Message.objects.filter(session=session_id).order_by('-id')
    sender_usernames = [m.from_weixin_user_username for m in messages]
    recevier_usernames = [m.to_weixin_user_username for m in messages]
    weixin_user_usernames = set(sender_usernames + recevier_usernames)
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([u.username, u] for u in weixin_users)

    mpuser = get_system_user_binded_mpuser(request.user)

    try:
        mpuser_preview_info = MpuserPreviewInfo.objects.get(mpuser=mpuser)
    except:
        response = create_response(500)
        response.errMsg = u'获取公众号预览信息失败'
        return response.get_response()

    response = create_response(200)
    response.data.items = []
    session = Session.objects.get(id=session_id)
    webapp_id = request.user_profile.webapp_id
    is_active = True if datetime.now(
    ) < session.latest_contact_created_at + timedelta(
        hours=EXPIRED_TIME) and datetime.now(
        ) > session.latest_contact_created_at else False
    response.data.is_active = is_active
    for message in messages:
        sender = username2weixin_user[message.from_weixin_user_username]
        one_message = JsonResponse()
        one_message.id = message.id
        one_message.weixin_message_id = message.weixin_message_id
        one_message.is_reply = message.is_reply
        one_message.content = emotion.change_emotion_to_img(message.content)
        if one_message.content == None:
            one_message.content = ''
        one_message.weixin_created_at = __format_datetime(
            message.weixin_created_at)
        one_message.is_collected = CollectMessage.is_collected(message.id)
        one_message.message_type = message.message_type
        one_message.pic_url = message.pic_url
        one_message.audio_url = message.audio_url

        if message.message_type == IMAGE:
            one_message.content = message.pic_url

        if message.message_type == VOICE:
            one_message.content = message.audio_url
        if message.is_reply:
            one_message.sender_icon = mpuser_preview_info.image_path  #sender.weixin_user_icon
            one_message.sender_name = mpuser_preview_info.name
        else:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=sender.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            if member:
                if member.user_icon:
                    one_message.sender_icon = member.user_icon if len(
                        member.user_icon.strip()) > 0 else DEFAULT_ICON
                else:
                    one_message.sender_icon = DEFAULT_ICON
                one_message.sender_name = member.username_for_html
                one_message.member_id = member.id
                if one_message.sender_icon != sender.weixin_user_icon:
                    sender.weixin_user_icon = member.user_icon
            else:
                if sender.weixin_user_icon:
                    one_message.sender_icon = sender.weixin_user_icon if len(
                        sender.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = sender.weixin_user_nick_name
        response.data.items.append(one_message)

    return response.get_response()
Exemple #21
0
def list_messages(request):
    page = request.GET.get('page', 1)
    count = int(request.GET.get('count', 10))
    mpuser = get_system_user_binded_mpuser(request.user)
    isManager = request.GET.get('isManager', 'false')
    isSystemMenager = request.GET.get('isSystemMenager', 'false')
    if mpuser is None:
        response = create_response(500)
        response.errMsg = u'没有该用户的消息'
        return response.get_jsonp_response(request)

    sessions = Session.objects.select_related().filter(mpuser=mpuser,
                                                       is_show=True)

    #分页信息
    pageinfo, sessions = paginate(sessions,
                                  page,
                                  count,
                                  query_string=request.META['QUERY_STRING'])
    webapp_id = request.user_profile.webapp_id

    if isManager == "false" and isSystemMenager == "false":
        #清空未读消息数量
        RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=0)

    weixin_user_usernames = [s.weixin_user_id for s in sessions]
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([(u.username, u) for u in weixin_users])
    sessions_list_json = []
    for session in sessions:
        weixin_user = username2weixin_user[session.weixin_user_id]
        content = session.latest_contact_content
        one_session = JsonResponse()
        one_session.id = session.id
        one_session.sender_fake_id = weixin_user.fake_id
        one_session.sender_username = weixin_user.username
        one_session.sender_name = weixin_user.nickname_for_html
        one_session.weixin_user_icon = weixin_user.weixin_user_icon if len(
            weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
        messages = Message.objects.filter(
            session=session.id).order_by('-created_at')
        message_st_type = messages[0].message_type
        if message_st_type == 'text':
            if len(content) > 10:
                content = content[0:10] + '...'
            elif len(content.strip()) <= 0:  #如果类型为text但是内容为空,则视为voice,有问题?
                content = '[语音]'
        elif message_st_type == 'image':
            content = '[图片]'
        elif message_st_type == 'voice':
            content = '[语音]'
        elif message_st_type == 'video':
            content = '[视频]'
        one_session.content = content
        one_session.created_at = __format_datetime(
            session.latest_contact_created_at)
        one_session.unread_count = session.unread_count
        one_session.is_subscribed = is_subscribed(weixin_user)
        one_session.is_active = True if datetime.now(
        ) < session.latest_contact_created_at + timedelta(
            hours=EXPIRED_TIME) and datetime.now(
            ) > session.latest_contact_created_at else False

        try:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=weixin_user.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            # member = Member.get_member_by_weixin_user_id(weixin_user.id)
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            # notify_message = u"设置会话信息失败, weixin_user_openid:{}, cause:\n{}".format(
            # 	session.weixin_user_id, unicode_full_stack())
            # watchdog_notice(notify_message)
            continue
            #raise
        sessions_list_json.append(one_session)
    response = create_response(200)
    response.data.iterms = sessions_list_json
    response.data.pressed_link = 'message'
    response.data.page_info = __package_pageinfo(pageinfo)
    return response.get_jsonp_response(request)
Exemple #22
0
def send_mui_media(request):
    # 上传图片到云
    uploadAction = request.POST.get('action', None)
    response = create_CORS_response(200, '', '')
    if uploadAction and uploadAction == 'query':
        return response
    filename = request.POST.get('filename')
    media_type = request.POST.get('type')
    receiver_username = request.POST.get('r_u')
    session_id = request.POST.get('s_id')
    domain = request.POST.get('domain')
    user = User.objects.get(id=request.POST.get('user'))
    user_profile = user.get_profile()
    request.user = user
    request.user_profile = user_profile
    mpuser = get_system_user_binded_mpuser(request.user)
    try:
        if user:
            try:
                mpuser_access_token = get_mpuser_access_token_for(mpuser)
                weixin_api = get_weixin_api(mpuser_access_token)
            except:
                response = create_CORS_response(500, u'微信公众号授权出错', '')
                return response
        else:
            response = create_CORS_response(500, u'用户登陆信息出错', '')
            return response
        upload_value = ''
        if filename and media_type:
            if media_type == 'image':
                # 尝试上传图片到云,成功则返回云路径,否则返回服务器存储路径
                value = save_and_zip_img_file_for_muiApp(request, filename)
                if not value:
                    response = create_CORS_response(500, u'上传云失败', '')
                    return response
                if value.startswith('/') and value.find('http') == -1:
                    upload_value = os.path.join(settings.PROJECT_HOME, '../',
                                                value[1:])
                    value = '%s%s' % (domain, value)
                else:
                    upload_value = value
                #上传到微信服务器
                result_info = weixin_api.upload_media_image(upload_value, True)
                if not result_info:
                    response = create_CORS_response(500, u'发送图片失败,请重试..', '')
                    return response
                # 发送给用户
                res = weixin_api.send_custom_msg(
                    receiver_username,
                    ImageCustomMessage(result_info['media_id']))
                # 存储数据库
                Session.objects.filter(id=session_id).update(
                    latest_contact_content='[图片]',
                    latest_contact_created_at=datetime.today(),
                    is_latest_contact_by_viper=True,
                    unread_count=0)
                Message.objects.create(
                    mpuser=mpuser,
                    session_id=session_id,
                    from_weixin_user_username=mpuser.username,
                    to_weixin_user_username=receiver_username,
                    pic_url=value,
                    message_type='image',
                    media_id=result_info['media_id'],
                    content='',
                    is_reply=True)
                response = create_CORS_response(200, '', '')
            elif media_type == 'voice':
                # 尝试上传语音到云,成功则返回云路径,否则返回服务器存储路径
                file = request.FILES.get('upload_file', None)
                if not file:
                    response = create_CORS_response(500, u'不存在该文件', '')
                value = save_audio_file_for_mobileApp(request, file)
                if not value:
                    response = create_CORS_response(500, u'mp3文件没有找到', '')
                    return response

                if value.startswith('/') and value.find('http') == -1:
                    upload_value = os.path.join(settings.PROJECT_HOME, '../',
                                                value[1:])
                    value = '%s%s' % (domain, value)
                else:
                    upload_value = value
                #上传到微信服务器
                result_info = weixin_api.upload_media_voice(upload_value, True)
                if not result_info:
                    response = create_CORS_response(500, u'发送语音失败,请重试..', '')
                    return response
                # 发送给用户
                res = weixin_api.send_custom_msg(
                    receiver_username,
                    VoiceCustomMessage(result_info['media_id']))
                # 存储数据库
                Session.objects.filter(id=session_id).update(
                    latest_contact_content='[语音]',
                    latest_contact_created_at=datetime.today(),
                    is_latest_contact_by_viper=True,
                    unread_count=0)
                Message.objects.create(
                    mpuser=mpuser,
                    session_id=session_id,
                    from_weixin_user_username=mpuser.username,
                    to_weixin_user_username=receiver_username,
                    audio_url=value,
                    message_type='voice',
                    media_id=result_info['media_id'],
                    content='',
                    is_reply=True)
                response = create_CORS_response(200, '', '')
    except Exception:
        response = create_CORS_response(500, u'发送失败', '')
    return response
Exemple #23
0
def mui_get_additional_histories(request):
    end_id = request.GET['end_id']
    session_id = request.GET['s_id']
    current_page = 1
    count = int(request.GET.get('count', 10))
    isManager = request.GET.get('isManager', 'false')
    isSystemMenager = request.GET.get('isSystemMenager', 'false')
    # user_id = request.GET['user_id']
    session = Session.objects.get(id=session_id)
    messages = Message.objects.filter(session=session_id).order_by('-id')
    #进行分页
    pageinfo, messages = paginator.paginate(messages, current_page, count)

    sender_usernames = [m.from_weixin_user_username for m in messages]
    recevier_usernames = [m.to_weixin_user_username for m in messages]
    weixin_user_usernames = set(sender_usernames + recevier_usernames)
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([u.username, u] for u in weixin_users)

    mpuser = get_system_user_binded_mpuser(request.user)

    try:
        mpuser_preview_info = MpuserPreviewInfo.objects.get(mpuser=mpuser)
    except:
        response = create_response(500)
        response.errMsg = u'获取公众号预览信息失败'
        return response.get_jsonp_response(request)
    if isManager == "false" and isSystemMenager == "false":
        #清空未读消息
        Session.objects.filter(mpuser=mpuser,
                               id=session_id).update(unread_count=0)
    sender_name_response = ""
    messages_list_json = []
    is_active = True if datetime.now(
    ) < session.latest_contact_created_at + timedelta(
        hours=EXPIRED_TIME) and datetime.now(
        ) > session.latest_contact_created_at else False

    r_messages = []

    for message in messages:
        if message.id == end_id:
            break
        else:
            r_messages.append(message)

    if not r_messages:
        response = create_response(500)
        return response.get_jsonp_response(request)

    for message in reversed(r_messages):
        sender = username2weixin_user[message.from_weixin_user_username]
        one_message = JsonResponse()
        one_message.id = message.id
        one_message.weixin_message_id = message.weixin_message_id
        one_message.is_reply = message.is_reply
        one_message.message_type = message.message_type
        one_message.pic_url = message.pic_url
        one_message.audio_url = message.audio_url
        one_message.content = emotion.mui_change_emotion_to_img(
            message.content)
        one_message.weixin_created_at = __format_datetime(
            message.weixin_created_at)

        if message.is_reply:
            one_message.sender_icon = mpuser_preview_info.image_path
            one_message.sender_name = mpuser_preview_info.name
        else:
            member = Member.get_member_by_weixin_user_id(sender.id)
            if member:
                one_message.sender_icon = member.user_icon if len(
                    member.user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = member.username_for_html
                sender_name_response = one_message.sender_name
                if one_message.sender_icon != sender.weixin_user_icon:
                    sender.weixin_user_icon = member.user_icon
            else:
                one_message.sender_icon = sender.weixin_user_icon if len(
                    sender.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = sender.weixin_user_nick_name
        messages_list_json.append(one_message)

    response = create_response(200)
    response.data = messages_list_json
    response.is_login = True
    response.is_active = is_active
    response.session_id = session_id
    response.weixin_user_id = session.weixin_user_id
    response.pressed_link = 'message'
    response.send_user_name = sender_name_response if sender_name_response != "" else session.weixin_user.weixin_user_nick_name
    response.page_info = __package_pageinfo(pageinfo)
    response.r_messages_count = len(r_messages)
    return response.get_jsonp_response(request)
Exemple #24
0
    def get(request):
        """
		获得公众号详情
		"""
        user_profile = request.user_profile
        # request_user = request.user
        request_user = request.manager  #duhao 20151020
        user_profile = account_models.UserProfile.objects.get(
            id=user_profile.id)

        if user_profile.is_mp_registered:
            try:
                mpuser = weixin_models.get_system_user_binded_mpuser(
                    request_user)
                mpuser_preview_info = weixin_models.MpuserPreviewInfo.objects.get(
                    mpuser=mpuser)
            except:
                mpuser = None
                mpuser_preview_info = None

        from weixin.user.util import get_component_info_from
        component_info = get_component_info_from(request)

        pre_auth_code = None
        request_host = settings.DOMAIN
        logging.info('>>>>>>>>>>>>>>>>>>>>>>>start')
        logging.info(request_host)
        logging.info('>>>>>>>>>>>>>>>>>>>>>>>end')
        #request_host = request.META['HTTP_HOST']

        if component_info:
            from core.wxapi.agent_weixin_api import WeixinApi, WeixinHttpClient
            weixin_http_client = WeixinHttpClient()
            weixin_api = WeixinApi(component_info.component_access_token,
                                   weixin_http_client)
            result = weixin_api.api_create_preauthcode(component_info.app_id)
            print result
            if hasattr(result, 'pre_auth_code'):
                pre_auth_code = result['pre_auth_code']
            else:
                result = weixin_api.api_create_preauthcode(
                    component_info.app_id)
                if result and result.has_key('pre_auth_code'):
                    pre_auth_code = result['pre_auth_code']
                else:
                    watchdog_error(result)

            if weixin_models.ComponentAuthedAppid.objects.filter(
                    component_info=component_info,
                    user_id=request.manager.id).count() == 0:
                weixin_models.ComponentAuthedAppid.objects.create(
                    component_info=component_info, user_id=request.manager.id)
            auth_appid = weixin_models.ComponentAuthedAppid.objects.filter(
                component_info=component_info, user_id=request.manager.id)[0]

            if weixin_models.ComponentAuthedAppidInfo.objects.filter(
                    auth_appid=auth_appid).count() > 0:
                auth_appid_info = weixin_models.ComponentAuthedAppidInfo.objects.filter(
                    auth_appid=auth_appid)[0]
            else:
                auth_appid_info = None
        else:
            component_info = None
            auth_appid = None
            auth_appid_info = None

        #微众商城引流图文地址
        operation_settings_objs = account_models.OperationSettings.objects.filter(
            owner=request.manager)
        if operation_settings_objs.count() == 0:
            operation_settings = account_models.OperationSettings.objects.create(
                owner=request.manager)
        else:
            operation_settings = operation_settings_objs[0]

        if user_profile.is_mp_registered:
            mpuser_access_token = weixin_models.get_mpuser_access_token_for(
                mpuser)
            c = RequestContext(
                request, {
                    'first_nav_name': FIRST_NAV,
                    'second_navs': export.get_weixin_second_navs(request),
                    'second_nav_name': export.WEIXIN_MPUSER_SECOND_NAV,
                    'third_nav_name': export.MPUSER_BINDING_NAV,
                    'component_info': component_info,
                    'request_user': request_user,
                    'user_profile': user_profile,
                    'mpuser': mpuser,
                    'mpuser_access_token': mpuser_access_token,
                    'preview_user': mpuser_preview_info,
                    'default_icon': weixin_models.DEFAULT_ICON,
                    'is_mp_registered': user_profile.is_mp_registered,
                    'pre_auth_code': pre_auth_code,
                    'auth_appid_info': auth_appid_info,
                    'request_host': request_host,
                    'operation_settings': operation_settings
                })
            return render_to_response('weixin/mp_user/mp_user.html', c)
        else:
            c = RequestContext(
                request, {
                    'first_nav_name': FIRST_NAV,
                    'pre_auth_code': pre_auth_code,
                    'request_user': request_user,
                    'user_profile': user_profile,
                    'default_icon': weixin_models.DEFAULT_ICON,
                    'component_info': component_info,
                    'is_mp_registered': user_profile.is_mp_registered,
                    'auth_appid_info': auth_appid_info,
                    'request_host': request_host,
                    'operation_settings': operation_settings
                })
            return render_to_response('weixin/mp_user/mp_user_index.html', c)
Exemple #25
0
def get_messages(request):
    response = JsonResponse()
    response.code = 200
    response.data = JsonResponse()
    response.data.items = []

    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        return response.get_response()

    #获取当前页数
    cur_page = int(request.GET.get('page', '1'))
    #获取每页个数
    count = int(request.GET.get('count', COUNT_PER_PAGE))

    is_debug = (request.GET.get('dbg', '0') == '1')

    is_collected = request.GET.get('is_collected', '')

    search_content = request.GET.get('search_content', '')

    if is_collected:
        collected_message_ids = CollectMessage.get_message_ids(request.user)
        ordering = 'FIELD(`id`, %s)' % ','.join(
            str(id) for id in collected_message_ids)
        messages = Message.objects.filter(id__in=collected_message_ids).extra(
            select={'ordering': ordering}, order_by=('ordering', ))
    elif search_content:
        data_before_tow_days = dateutil.get_previous_date('today', 2)
        messages = Message.objects.belong_to(request.user_profile.webapp_id,
                                             mpuser, search_content)
    else:
        messages = []
    pageinfo, messages = paginate(messages,
                                  cur_page,
                                  count,
                                  query_string=request.META['QUERY_STRING'])
    webapp_id = request.user_profile.webapp_id
    for message in messages:
        weixin_user = message.session.weixin_user
        one_session = JsonResponse()
        one_session.id = message.id
        one_session.session_id = message.session.id
        one_session.sender_fake_id = weixin_user.fake_id
        one_session.sender_username = weixin_user.username
        one_session.sender_name = weixin_user.nickname_for_html
        if weixin_user.weixin_user_icon:
            one_session.weixin_user_icon = weixin_user.weixin_user_icon if len(
                weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
        else:
            one_session.weixin_user_icon = DEFAULT_ICON

        one_session.content = emotion.change_emotion_to_img(message.content)
        one_session.is_active = True if datetime.now(
        ) < message.created_at + timedelta(
            hours=EXPIRED_TIME) and datetime.now(
            ) > message.created_at else False
        if is_collected:
            one_session.is_active = False
            try:
                collect_message = CollectMessage.objects.get(
                    message_id=message.id)
                one_session.created_at = __format_datetime(
                    collect_message.created_at)
            except:
                one_session.created_at = __format_datetime(message.created_at)
        else:
            one_session.created_at = __format_datetime(message.created_at)
        one_session.message_id = message.id
        one_session.is_collected = CollectMessage.is_collected(message.id)
        one_session.message_type = message.message_type
        one_session.pic_url = message.pic_url
        one_session.audio_url = message.audio_url
        one_session.for_collected = is_collected
        one_session.hidden_a = True

        if message.message_type == IMAGE:
            one_session.content = message.pic_url

        if message.message_type == VOICE:
            one_session.content = message.audio_url

        one_session.is_subscribed = is_subscribed(weixin_user)

        try:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=weixin_user.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            #member = session2member[session.weixin_user_id]
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if member.user_icon and len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            notify_message = u"设置会话信息失败, weixin_user_openid:{}, cause:\n{}".format(
                session.weixin_user_id, unicode_full_stack())
            watchdog_notice(notify_message)

            continue

        response.data.items.append(one_session)
        response.data.page_info = __package_pageinfo(pageinfo)

    return response.get_response()
Exemple #26
0
    def get(request):
        """
		get_memers: 会员列表
		"""
        mpuser = get_system_user_binded_mpuser(request.user)
        webapp_id = request.user_profile.webapp_id
        #处理来自“数据罗盘-会员分析-关注会员链接”过来的查看关注会员的请求
        #add by duhao 2015-07-13
        status = request.GET.get('status', '1')
        member_tags = MemberTag.get_member_tags(webapp_id)
        #调整排序,将为分组放在最前面
        tags = []
        for tag in member_tags:
            if tag.name == '未分组':
                tags = [tag] + tags
            else:
                tags.append(tag)
        member_tags = tags
        #获取未完成的任务
        woid = request.webapp_owner_id
        export_jobs = ExportJob.objects.filter(woid=woid,
                                               type=0,
                                               is_download=0).order_by("-id")
        if export_jobs:
            export2data = {
                "woid": int(export_jobs[0].woid),  #
                "status": 1 if export_jobs[0].status else 0,
                "is_download": 1 if export_jobs[0].is_download else 0,
                "id": int(export_jobs[0].id),
                # "file_path": export_jobs[0].file_path,
            }
        else:
            export2data = {
                "woid": 0,
                "status": 1,
                "is_download": 1,
                "id": 0,
                "file_path": 0,
            }

        c = RequestContext(
            request,
            {
                'first_nav_name':
                export.MEMBER_FIRST_NAV,
                'second_navs':
                export.get_second_navs(request),
                'second_nav_name':
                export.MEMBERS,
                #'should_show_authorize_cover' : get_should_show_authorize_cover(request),
                'user_tags':
                member_tags,
                'grades':
                MemberGrade.get_all_grades_list(webapp_id),
                'counts':
                Member.objects.filter(
                    webapp_id=webapp_id,
                    is_for_test=0,
                    status__in=[SUBSCRIBED, CANCEL_SUBSCRIBED]).count(),
                'status':
                status,
                'export2data':
                export2data,
            })

        return render_to_response('member/editor/members.html', c)
Exemple #27
0
def get_session_histories(request, session_id):
    messages = Message.objects.filter(session=session_id).order_by('-id')
    sender_usernames = [m.from_weixin_user_username for m in messages]
    recevier_usernames = [m.to_weixin_user_username for m in messages]
    weixin_user_usernames = set(sender_usernames + recevier_usernames)
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([u.username, u] for u in weixin_users)

    mpuser = get_system_user_binded_mpuser(request.user)

    try:
        mpuser_preview_info = MpuserPreviewInfo.objects.get(mpuser=mpuser)
    except:
        response = create_response(500)
        response.errMsg = u'获取公众号预览信息失败'
        return response.get_response()

    #清空未读消息
    Session.objects.filter(mpuser=mpuser, id=session_id).update(unread_count=0)

    messages_list = []
    session = Session.objects.get(id=session_id)
    is_active = True if datetime.now(
    ) < session.latest_contact_created_at + timedelta(
        hours=EXPIRED_TIME) and datetime.now(
        ) > session.latest_contact_created_at else False
    for message in messages:
        sender = username2weixin_user[message.from_weixin_user_username]
        one_message = {
            'id': message.id,
            'weixin_message_id': message.weixin_message_id,
            'is_reply': message.is_reply,
            'content': emotion.change_emotion_to_img(message.content),
            'weixin_created_at': __format_datetime(message.weixin_created_at)
        }
        if message.is_reply:
            one_message['sender_icon'] = mpuser_preview_info.image_path
            one_message['sender_name'] = mpuser_preview_info.name
        else:
            member = Member.get_member_by_weixin_user_id(sender.id)
            if member:
                one_message['sender_icon'] = member.user_icon if len(
                    member.user_icon.strip()) > 0 else DEFAULT_ICON
                one_message['sender_name'] = member.username_for_html
                if one_message['sender_icon'] != sender.weixin_user_icon:
                    sender.weixin_user_icon = member.user_icon
            else:
                one_message['sender_icon'] = sender.weixin_user_icon if len(
                    sender.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
                one_message['sender_name'] = sender.weixin_user_nick_name
        messages_list.append(one_message)
    wei = Session.objects.get(mpuser=mpuser, id=session_id)
    c = RequestContext(
        request, {
            'is_login': True,
            'is_active': is_active,
            'sessions': messages_list,
            'session_id': session_id,
            'weixin_user_id': wei.weixin_user_id,
            'pressed_link': 'messages'
        })
    return render_to_response('mobile_app/list_histories.html', c)
Exemple #28
0
def list_messages(request):
    # if type(request.user) is not types.IntType :
    # 	return render_to_response('mobile_app/list_messages.html')

    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        return render_to_response('mobile_app/list_messages.html')

    sessions = Session.objects.select_related().filter(mpuser=mpuser,
                                                       is_show=True)
    #清空未读消息数量
    RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=0)

    weixin_user_usernames = [s.weixin_user_id for s in sessions]
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([(u.username, u) for u in weixin_users])
    sessions_list = []
    for session in sessions:
        weixin_user = username2weixin_user[session.weixin_user_id]
        content = emotion.change_emotion_to_img(session.latest_contact_content)
        if len(content) > 10:
            content = content[0:10]
            content = content + '...'
        one_session = {
            'id':
            session.id,
            'sender_fake_id':
            weixin_user.fake_id,
            'sender_username':
            weixin_user.username,
            'sender_name':
            weixin_user.nickname_for_html,
            'weixin_user_icon':
            weixin_user.weixin_user_icon
            if len(weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON,
            'content':
            content,
            'created_at':
            __format_datetime(session.latest_contact_created_at),
            'unread_count':
            session.unread_count,
            'is_subscribed':
            is_subscribed(weixin_user),
            'is_active':
            True if datetime.now() < session.latest_contact_created_at +
            timedelta(hours=EXPIRED_TIME)
            and datetime.now() > session.latest_contact_created_at else False
        }
        try:
            member = Member.get_member_by_weixin_user_id(weixin_user.id)
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            notify_message = u"设置会话信息失败, weixin_user_openid:{}, cause:\n{}".format(
                session.weixin_user_id, unicode_full_stack())
            watchdog_notice(notify_message)
            # continue
        sessions_list.append(one_session)
        # response.data.page_info = __package_pageinfo(pageinfo)

    c = RequestContext(request, {
        'is_login': True,
        'sessions': sessions_list,
        'pressed_link': 'messages'
    })
    return render_to_response('mobile_app/list_messages.html', c)
Exemple #29
0
def get_sessions(request):
    response = JsonResponse()
    response.code = 200
    response.data = JsonResponse()
    response.data.items = []

    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        return response.get_response()

    #获取当前页数
    cur_page = int(request.GET.get('page', '1'))
    #获取每页个数
    count = int(request.GET.get('count', COUNT_PER_PAGE))

    is_debug = (request.GET.get('dbg', '0') == '1')
    #收藏记录
    is_collected = request.GET.get('is_collected', '0')

    start_time = request.GET.get('start_time', '').strip()
    end_time = request.GET.get('end_time', '').strip()
    search_content = request.GET.get('search_content', '').strip()
    if is_debug:
        sessions = Session.objects.select_related().filter(mpuser=mpuser)
    else:
        sessions = Session.objects.select_related().filter(mpuser=mpuser,
                                                           is_show=True)

    if start_time and end_time:
        start_time = '%s 0:0:0' % start_time
        end_time = '%s 23:59:59' % end_time
        sessions = sessions.filter(latest_contact_created_at__gte=start_time,
                                   latest_contact_created_at__lte=end_time)

    pageinfo, sessions = paginate(sessions,
                                  cur_page,
                                  count,
                                  query_string=request.META['QUERY_STRING'])

    #清空未读消息数量
    RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=0)

    webapp_id = request.user_profile.webapp_id
    weixin_user_usernames = [s.weixin_user_id for s in sessions]
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([(u.username, u) for u in weixin_users])

    # session2member = dict([(member_has_social_account.account.openid, member_has_social_account.member) for member_has_social_account \
    # 	in MemberHasSocialAccount.objects.filter()])

    for session in sessions:
        weixin_user = username2weixin_user[session.weixin_user_id]
        one_session = JsonResponse()
        one_session.id = session.id
        one_session.session_id = session.id
        one_session.sender_fake_id = weixin_user.fake_id
        one_session.sender_username = weixin_user.username
        one_session.sender_name = weixin_user.nickname_for_html
        if weixin_user.weixin_user_icon:
            one_session.weixin_user_icon = weixin_user.weixin_user_icon if len(
                weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
        else:
            one_session.weixin_user_icon = DEFAULT_ICON
        one_session.content = emotion.change_emotion_to_img(
            session.latest_contact_content)
        one_session.created_at = __format_datetime(
            session.latest_contact_created_at)
        one_session.unread_count = session.unread_count
        one_session.message_id = session.message_id
        one_session.is_collected = CollectMessage.is_collected(
            session.message_id)
        one_session.for_collected = False
        one_session.hidden_a = False
        try:
            if session.message_id != 0:
                message = Message.objects.get(id=session.message_id)
                one_session.message_type = message.message_type
                one_session.pic_url = message.pic_url
                one_session.audio_url = message.audio_url
            else:
                one_session.message_type = 'text'
                one_session.pic_url = ''
                one_session.audio_url = ''
        except:
            one_session.message_type = 'text'
            one_session.pic_url = ''
            one_session.audio_url = ''

        one_session.is_subscribed = is_subscribed(weixin_user)
        one_session.is_active = True if datetime.now(
        ) < session.latest_contact_created_at + timedelta(
            hours=EXPIRED_TIME) and datetime.now(
            ) > session.latest_contact_created_at else False
        try:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=weixin_user.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            #member = session2member[session.weixin_user_id]
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if member.user_icon and len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            notify_message = u"设置会话信息失败, weixin_user_openid:{}, webapp_id:{},cause:\n{}".format(
                session.weixin_user_id, webapp_id, unicode_full_stack())
            watchdog_notice(notify_message)
            continue

        response.data.items.append(one_session)
        response.data.page_info = __package_pageinfo(pageinfo)
    return response.get_response()
Exemple #30
0
def start_simulator(request):
    """
	启动微信模拟器
	"""
    if settings.MODE == 'develop' or settings.MODE == 'test':
        is_in_dev_mode = True
    else:
        is_in_dev_mode = False

    if request.user.is_authenticated():
        # 如果已经登录过
        mpuser = get_system_user_binded_mpuser(request.user)

        if mpuser:
            try:
                mpuser_preview_info = MpuserPreviewInfo.objects.get(
                    mpuser=mpuser)
            except:
                mpuser_preview_info = None
        else:
            mpuser_preview_info = None

        c = RequestContext(
            request, {
                'title':
                mpuser_preview_info.name if
                (mpuser_preview_info
                 and mpuser_preview_info.name) else u'信息预览',
                'is_logined':
                True,
                'is_in_dev_mode':
                is_in_dev_mode,
                'mp_users':
                json.dumps([]),
                'menus_json':
                menu_util.get_menus_json(request.user)
            })
        return render_to_response('simulator/simulator.html', c)
    else:
        user2profile = dict([(p.user_id, p)
                             for p in list(UserProfile.objects.all())])
        id2user = dict([(u.id, u) for u in list(User.objects.all())])
        id2mpuser = dict([(u.id, u) for u in WeixinMpUser.objects.all()])
        mp_users = []
        for mp_user in id2mpuser.values():
            user_id = mp_user.owner_id
            user_name = id2user[user_id].username
            profile = user2profile[user_id]
            mp_users.append({
                'webapp_id': profile.webapp_id,
                'mp_user_name': user_name
            })

        c = RequestContext(
            request, {
                'is_logined': False,
                'mp_users': json.dumps(mp_users),
                'is_in_dev_mode': is_in_dev_mode,
                'menus_json': "[]"
            })
        return render_to_response('simulator/simulator.html', c)