示例#1
0
    def _get_new_token_info(self, access_token):
        assert (access_token)

        update_url = self.WEIXIN_ACCESS_TOKEN_UPDATE_URL_TMPL.format(
            access_token.app_id, access_token.app_secret)
        #self.LOG.info(u"update access token for user({}) with url({})".format(access_token.mpuser.username, update_url))

        update_response_data = None
        try:
            update_response_data = self._get_access_token_update_response(
                update_url)
            #self.LOG.info(u'微信响应信息:' + json.dumps(update_response_data))
        except:
            watchdog_notice(
                u"failed to update access token for user({}), cause:\n{}".
                format(access_token.mpuser.username, unicode_full_stack()))

            #self.LOG.warn(u"最多重试{}次进行更新".format(self.MaxRetryTimes))

            for retry_time in xrange(self.MaxRetryTimes):
                try:
                    update_response_data = self._get_access_token_update_response(
                        update_url)
                except:
                    watchdog_notice(
                        u"failed to update access token for user({}), cause:\n{}"
                        .format(access_token.mpuser.username,
                                unicode_full_stack()))

        return update_response_data
示例#2
0
 def _resolve_invitation_list_json(self, data):
     try:
         if int(data.get('Header').get('Code')) == 0:
             json_list = data.get('InvitationList', [])
             return self._reload_invitation_json(json_list)
         else:
             message = u'_resolve_invitation_list_json解析 Code不为0, phone:{}\n, data:\n{}'.format(
                 self.phone, data)
             watchdog_notice(message,
                             self.shengjing_params.WATCHDOG_TYPE_SHENGJING)
             return None
     except:
         message = u'_resolve_invitation_list_json解析异常 except, phone:{}\n, data:\n{}, cause:\n{}'.format(
             self.phone, data, unicode_full_stack())
         watchdog_fatal(message,
                        self.shengjing_params.WATCHDOG_TYPE_SHENGJING)
         return None
示例#3
0
文件: tasks.py 项目: chengdg/weizoom
def _get_new_token_info(access_token):
    assert (access_token)

    update_url = WEIXIN_ACCESS_TOKEN_UPDATE_URL_TMPL.format(
        access_token.app_id, access_token.app_secret)

    update_response_data = None
    try:
        update_response_data = _get_access_token_update_response(update_url)
    except:
        watchdog_notice(
            u"failed to update access token for user({}), cause:\n{}".format(
                access_token.mpuser.username, unicode_full_stack()))
        for retry_time in xrange(MaxRetryTimes):
            try:
                update_response_data = _get_access_token_update_response(
                    update_url)
            except:
                watchdog_notice(
                    u"failed to update access token for user({}), cause:\n{}".
                    format(access_token.mpuser.username, unicode_full_stack()))

    return update_response_data
示例#4
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()
示例#5
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()
示例#6
0
def __record_prize(webapp_user, lottery, member, prize, prize_position=0):
    prize_money = 0

    #减积分
    if lottery.expend_integral > 0:
        if webapp_user.integral_info['count'] > lottery.expend_integral:
            expend_integral = lottery.expend_integral
        else:
            expend_integral = webapp_user.integral_info['count']
        webapp_user.consume_integral(expend_integral, u'参与抽奖,花费积分')

    if not prize:
        LotteryRecord.objects.create(owner=lottery.owner,
                                     member=member,
                                     lottery=lottery,
                                     lottery_name=lottery.name,
                                     prize_type=0,
                                     prize_level=0,
                                     prize_name=u'谢谢参与',
                                     is_awarded=True,
                                     prize_number=time.time(),
                                     prize_detail='',
                                     prize_money=prize_money)

        return None

    relation = LotteryHasPrize.objects.get(lottery=lottery, prize=prize)

    #实物
    if relation.prize_type == 0:
        is_awarded = False
        prize_detail = relation.prize_source
    #优惠券
    elif relation.prize_type == 1:
        is_awarded = True
        rule_id = relation.prize_source
        # coupons = create_coupons(lottery.owner, rule_id, 1, member.id)
        # prize_detail = coupons.coupon_id
        # prize_money = coupons[0].money
        coupon, msg = consume_coupon(lottery.owner.id, rule_id, member.id)
        if coupon:
            prize_detail = coupon.coupon_id
            prize_money = coupon.money
        else:
            watchdog_notice(
                '微信抽奖失败,错误原因:%s,owner.id:%s:rule.id:%s,member.id:%s' %
                (msg, lottery.owner.id, rule_id, member.id),
                type="mall")
            LotteryRecord.objects.create(owner=lottery.owner,
                                         member=member,
                                         lottery=lottery,
                                         lottery_name=lottery.name,
                                         prize_type=0,
                                         prize_level=0,
                                         prize_name=u'谢谢参与',
                                         is_awarded=True,
                                         prize_number=time.time(),
                                         prize_detail='',
                                         prize_money=prize_money)
            return None
    #兑换码
    elif relation.prize_type == 2:
        is_awarded = True
        prize_detail = relation.prize_source
    #积分
    elif relation.prize_type == 3:
        is_awarded = True
        prize_detail = relation.prize_source
        #增加积分
        webapp_user.consume_integral(-int(prize_detail), u'参与抽奖,赢得积分')

    from hashlib import md5
    cur_time = str(time.time())
    prize_number = md5(cur_time).hexdigest()[10:-10]  #生成一个12位字符串

    LotteryRecord.objects.create(owner=lottery.owner,
                                 member=member,
                                 lottery=lottery,
                                 lottery_name=lottery.name,
                                 prize_type=relation.prize_type,
                                 prize_level=prize.level,
                                 prize_name=prize.name,
                                 is_awarded=is_awarded,
                                 prize_number=prize_number,
                                 prize_detail=prize_detail,
                                 prize_money=prize_money,
                                 prize_position=prize_position)

    #更改奖品个数
    Prize.decrease_count(prize, 1)

    return prize
示例#7
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)
示例#8
0
def __record_prize(webapp_user, red_envelope, prize, member, prize_position=0):
    prize_money = 0
    webapp_user_id = -1
    if webapp_user:
        webapp_user_id = webapp_user.id
    if not prize:
        return RedEnvelopeRecord.objects.create(
            owner=red_envelope.owner,
            red_envelope=red_envelope,
            red_envelope_name=red_envelope.name,
            prize_type=-1,
            prize_level=0,
            prize_name=u'红包领光了,您来晚了!',
            prize_number=time.time(),
            prize_detail='',
            prize_money=prize_money,
            webapp_user_id=webapp_user_id)

    relation = RedEnvelopeHasPrize.objects.get(red_envelope=red_envelope,
                                               prize=prize)

    if member is None and relation.prize_type != 1:
        return RedEnvelopeRecord.objects.create(
            owner=red_envelope.owner,
            red_envelope=red_envelope,
            red_envelope_name=red_envelope.name,
            prize_type=-1,
            prize_level=0,
            prize_name=u'谢谢参与',
            prize_number=time.time(),
            prize_detail='',
            prize_money=prize_money,
            webapp_user_id=webapp_user_id)

    #实物
    if relation.prize_type == 0:
        is_awarded = False
        prize_detail = relation.prize_source
    #优惠券
    elif relation.prize_type == 1:
        is_awarded = True
        rule_id = relation.prize_source
        # coupons = create_coupons(red_envelope.owner, rule_id, 1, member.id)
        # prize_detail = coupons[0].coupon_id
        # prize_money = coupons[0].money
        coupon, msg = consume_coupon(red_envelope.owner.id, rule_id, member.id)
        if coupon:
            prize_detail = coupon.coupon_id
            prize_money = coupon.money
        else:
            watchdog_notice(
                '红包领取失败,错误原因:%s,owner.id:%s:rule.id:%s,member.id:%s' %
                (msg, red_envelope.owner.id, rule_id, member.id),
                type="mall")
            return RedEnvelopeRecord.objects.create(
                owner=red_envelope.owner,
                red_envelope=red_envelope,
                red_envelope_name=red_envelope.name,
                prize_type=-1,
                prize_level=0,
                prize_name=u'谢谢参与',
                prize_number=time.time(),
                prize_detail='',
                prize_money=prize_money,
                webapp_user_id=webapp_user_id)
    #兑换码
    elif relation.prize_type == 2:
        is_awarded = True
        prize_detail = relation.prize_source
    #积分
    elif relation.prize_type == 3:
        is_awarded = True
        prize_detail = relation.prize_source
        #增加积分
        webapp_user.consume_integral(-int(prize_detail), u'红包积分')

    from hashlib import md5
    cur_time = str(time.time())
    prize_number = md5(cur_time).hexdigest()[10:-10]  #生成一个12位字符串

    red_envelope_record = RedEnvelopeRecord.objects.create(
        owner=red_envelope.owner,
        webapp_user_id=webapp_user_id,
        red_envelope=red_envelope,
        red_envelope_name=red_envelope.name,
        prize_type=relation.prize_type,
        prize_level=prize.level,
        prize_name=prize.name,
        prize_number=prize_number,
        prize_detail=prize_detail,
        prize_money=prize_money,
        prize_position=prize_position,
        is_awarded=is_awarded)

    #更改奖品个数
    Prize.decrease_count(prize, 1)

    return red_envelope_record