コード例 #1
0
def replyClick31(fromuser):
    '''我的信息'''
    # 回复一个图文消息,显示用户的统计信息:发了多少个问卷、答了多少个问卷、中奖几次,引荐了多少粉丝,个人基本信息。提示点击可修改个人信息。
    # 个人信息页面可查看自己的个人信息,可编辑。
    retval = ''
    FSOBJ = mdb.get_fans_byopenid(fromuser)
    fsid = FSOBJ.FS_ID if FSOBJ else ''
    p0, p1, p2, p3, a0, a1, a2, a3, win, suma2, f1 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  #发了多少个问卷(无偿,有偿,红包)、答了多少个问卷(无偿,有偿,红包)、中奖几次(中奖,红包),引荐了多少粉丝
    if fsid:
        cacher_random_checker.popRandomValueForFSID(fsid)
        p0, p1, p2, p3, a0, a1, a2, a3, win, suma2, f1 = mdb.stat_fans_byfsid(
            fsid)
        info = '省份:%s\n城市:%s\n年龄:%s\n婚姻:%s\n学历:%s\n收入:%s' % (
            FSOBJ.PROVINCE.encode('utf8') if FSOBJ.PROVINCE else '',
            FSOBJ.CITY.encode('utf8') if FSOBJ.CITY else '',
            mdb.get_basetitle('AGE', FSOBJ.P2_AGE),
            mdb.get_basetitle('MARRIAGE', FSOBJ.P2_MARRIAGE),
            mdb.get_basetitle('ACADEMIC', FSOBJ.P2_ACADEMIC),
            mdb.get_basetitle('INCOME', FSOBJ.P2_INCOME))
        retval = {
            "title":
            "我的信息",
            "url":
            mforweixin.get_mp_authurl("%s/p31" % (HOST_NOS)),
            "description":
            "发布: 普通%d个,有奖%d个,红包%d个,互助%d个\n参与: 普通%d个,有奖%d个,红包%d个,互助%d个\n中奖次数: %d次。获得红包: %.2f元%s\n引荐粉丝: %d\n\n%s\n\n可点击修改个人信息"
            % (p0, p1, p2, p3, a0, a1, a2, a3, win, suma2,
               (',未发%.2f' % FSOBJ.NOTPAY_A2 if FSOBJ.NOTPAY_A2 else ''), f1,
               info)
        }
        #向自己人发送随机数
        if fsid in web.config.app_configuration['run:selfman']:
            delaySendMessage(fromuser,
                             cacher_random_checker.genRandomValueForFSID(fsid))
    return retval
コード例 #2
0
def replayQnaire(fromuser):
    qnid = web.config.app_configuration.get('sys:subnaire', '')  #设置问卷ID在关注时返回
    if qnid:
        QNOBJ = mdb.get_naire(qnid)
        if QNOBJ and QNOBJ.QN_STATUS == 2:
            FSOBJ = mdb.get_fans_byopenid(fromuser)
            ANOBJ = mdb.get_answer(QNOBJ.QN_ID, FSOBJ.FS_ID)
            if not ANOBJ:  #如果没参与过才发
                msg = getQsArticleBody(QNOBJ)
                delaySendMessage(fromuser, msg, 500)
コード例 #3
0
def replyClickMC2(fromuser):
    '''我的调查币'''
    retval = ''
    mforweixin.get_fansinfo(fromuser)
    cacher_fsid_byopenid.delete(fromuser)
    FSOBJ = mdb.get_fans_byopenid(fromuser)
    fsid = FSOBJ.FS_ID if FSOBJ else ''
    if fsid:
        cacher_random_checker.popRandomValueForFSID(fsid)
        retval = {
            "title":
            "我的调查币",
            "url":
            mforweixin.get_mp_authurl("%s/pmc2" % (HOST_NOS)),
            "description":
            "当前调查币余额 %d\n用户等级 %s\n\n点击查看详情" %
            (FSOBJ.get('COIN_HOLD', 0), mdb.get_fans_level(FSOBJ))
        }
    return retval
コード例 #4
0
def replyClickMA1(fromuser):
    '''答互助问卷'''
    retval = ''
    FSOBJ = mdb.get_fans_byopenid(fromuser)
    if FSOBJ:
        cacher_random_checker.popRandomValueForFSID(FSOBJ.FS_ID)
    #如果年龄为空,说明是新用户,返回图文消息,提示用户需要填写个人信息后再参与问卷
    if FSOBJ and not FSOBJ.P2_AGE:
        pushTask(mforweixin.get_fansinfo, fromuser)  #获取微信用户信息
        retval = {
            "title": "完善资料",
            "url": mforweixin.get_mp_authurl("%s/p31" % (HOST_NOS)),
            "description": "参与问卷前请先完善资料,所填写资料只用于调查问卷统计,不涉及隐私内容。"
        }
        return retval
    if FSOBJ:
        retval = mdb.list_cananswer(FSOBJ.FS_ID, 3)
        #问卷参与url:用微信网页授权并跳转
        retval = [getQsArticleBody(x, i) for i, x in enumerate(retval)]
        retval = [x for x in retval if x]
        if retval:
            return retval
    return '没有更多互助问卷了!'
コード例 #5
0
ファイル: mforweixin.py プロジェクト: dongyg/Questionare
def set_weixinfan(openid,args={},fromchat=True):
    '''设置微信用户。args里面是要设置的字段及值。fromchat表示是否源自会话等活动(这些活动都是粉丝)。返回 tuple(FSID,用户是否公号粉丝),如果出错就返回(None,None)'''
    #微信网页授权有2种scope,都无需关注:1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的。2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。
    global mutex
    import mdb
    FSOBJ = mdb.get_fans_byopenid(openid)
    # FSOBJ = web.listget(dbFrame.select("WX_FANS",vars=locals(),where="OPENID=$openid").list(), 0, None)
    t = dbFrame.transaction()
    try:
        #总是设置最近活跃时间
        args['UNSUBSCRIBETIME'] = utils.get_currdatetimestr(dbFrame.dbtype) #利用取消关注时间字段记录综合的最后活跃时间
        if fromchat:
            args['LASTACTIVETIME'] = utils.get_currdatetimestr(dbFrame.dbtype) #只记录来自会话的最后活跃时间,来自网页的不记录
        #如果显式设置关注为1,说明是关注动作,设置关注时间
        if args.get('SUBSCRIBE')==1: #关注
            args['SUBSCRIBETIME'] = utils.get_currdatetimestr(dbFrame.dbtype)
        #如果显式设置关注为0,说明是取消关注动作,设置取消关注时间
        if args.get('SUBSCRIBE')==0:
            args['UNSUBSCRIBETIME'] = utils.get_currdatetimestr(dbFrame.dbtype)
        else:
            #如果是会话/扫码等动作,并且不是取消关注动作,说明用户是粉丝,设置SUBSCRIBE以保证表中记录的关注状态是正确的。只有网页活动不知道是否粉丝
            if fromchat:
                args['SUBSCRIBE'] = 1
        isfan = args.get('SUBSCRIBE')==1
        #根据openid判断的如果存在就更新,不存在就添加
        if not FSOBJ:
            if mutex.acquire(1):
                fsid = utils.get_id_bytime()
                mutex.release()
            else:
                fsid = utils.get_id_bytime()
            while mdb.get_fans_byfsid(fsid):
                fsid = utils.get_id_bytime()
            if not args.has_key('IN_BY'):
                args['IN_BY'] = 10000
            if args.get('SUBSCRIBE')==1: #如果用户不存在,且SUBSCRIBE为1,设置关注赠送积分
                args['COIN_TOTAL'] = 100
                args['COIN_HOLD'] = 100
                dbFrame.insert("WX_COINDETAIL",CD_ID=utils.get_keyword(),FS_ID=fsid,INSERTTIME=utils.get_currdatetimestr(dbFrame.dbtype),CHG_AMOUNT=100,CHG_TYPE=11)
            dbFrame.update("WX_FANS",vars=locals(),where="FS_ID=$args['IN_BY']",GET_FANS=web.SQLLiteral('GET_FANS+1'))
            dbFrame.insert("WX_FANS",FS_ID=fsid,OPENID=openid,INSERTTIME=utils.get_currdatetimestr(dbFrame.dbtype), **args)
        else:
            fsid = FSOBJ.FS_ID
            if FSOBJ.SUBSCRIBE!=None:
                args.pop('IN_BY','') #在修改时如果SUBSCRIBE不是null说明用户关注中或曾经关注过,不修改IN_BY的值
            elif args.get('SUBSCRIBE')==1: #如果SUBSCRIBE是null说明用户从未关注过,第1次关注的话设置赠送积分
                pass
                # args['COIN_TOTAL'] = 100
                # args['COIN_HOLD'] = 100
                # dbFrame.insert("WX_COINDETAIL",CD_ID=utils.get_keyword(),FS_ID=fsid,INSERTTIME=utils.get_currdatetimestr(dbFrame.dbtype),CHG_AMOUNT=100,CHG_TYPE=11)
            if FSOBJ.SUBSCRIBE==args.get('SUBSCRIBE'): #如果现存值等于即将设置值就pop掉不再设置
                args.pop('SUBSCRIBE','')
            dbFrame.update("WX_FANS",vars=locals(),where='OPENID=$openid', **args)
            # if args.keys()!=['LASTACTIVETIME']:
            #     #如果只是设置最近活跃时间,不清除缓存
            #     cacher_fans_obj.delete(fsid)
            FSOBJ.update(args) #更新缓存
            cacher_fans_obj.set(fsid,FSOBJ)
    except Exception, e:
        t.rollback()
        traceback.print_exc()
        return None,None