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
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
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
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()
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()
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
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)
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