Example #1
0
def login():
    form = SigninForm()
    error=""
    name = form.username.data
    if request.method=='POST':
        if form.validate_on_submit():
            user = User.query.filter(User.name == name).first()
            if user:
                signin_user(user)
                return redirect(url_for('site.home'))
        else:
            error="用户名或密码不正确"
    return render_template('account/login.html', form=form,error=error)
Example #2
0
def wechat_login_fun(code):
    data = json.loads(WeixinHelper.getAccessTokenByCode(code))
    access_token, openid, refresh_token = data.get("access_token"), data.get("openid"), data.get("refresh_token")
    userinfo = json.loads(WeixinHelper.getSnsapiUserInfo(access_token, openid))
    print "user_info,", userinfo
    # print openid

    if not g.user:
        # 检查用户是否存在
        user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
        if user is not None:
            signin_user(user)
            session['openid'] = openid
            session['access_token'] = openid

            print u'与微信用户关联的user(%s) 已开始登陆网站...' % user.name
        else:
            add_wechat_user_to_db(openid)
Example #3
0
def interface():
    """初始化接入"""
    signature = str(request.args.get("signature"))
    timestamp = str(request.args.get('timestamp'))
    nonce = str(request.args.get('nonce'))
    echostr = request.args.get('echostr')
    if 'access_token' not in session:
        # 实例化 wechat
        access_token = None
        access_token_expires_at = None
        wechat = WechatBasic(appid=appid, appsecret=appsecret)
        token_dict = wechat.get_access_token()
        access_token = token_dict.get('access_token')
        if access_token:
            session['access_token'] = access_token
            session['access_token_expires_at'] = token_dict.get('access_token_expires_at')
    response = ""
    wechat = WechatBasic(token=token)
    # 对签名进行校验
    if wechat.check_signature(signature=signature, timestamp=timestamp, nonce=nonce):

        # 获取请求类型
        if request.method == 'POST':
            # 读取用户发送消息
            body_text = request.data
            print body_text
            wechat.parse_data(body_text)
            # 获得解析结果
            message = wechat.get_message()
            print "target_user,", message.target
            print "from_user,", message.source
            print "message_type:", message.type
            openid = message.source
            # print request.data
            # 用户发送文本消息
            if message.type == 'text':
                if message.content == 'test':
                    response = wechat.response_text(u'^_^')
                else:
                    response = wechat.response_text(u'您好!')
                if not g.user:
                    # 检查用户是否存在
                    user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
                    if user is not None:
                        signin_user(user)
                        print u'新用户(%s)关注微信...' % user.name
                    else:
                        user = add_wechat_user_to_db(openid)
                    session['openid'] = openid
                else:
                    user = g.user
                message = WechatMessage(user_id=user.id, content=message.content)
                db.session.add(message)
                db.session.commit()
            # 用户发送图片消息
            elif message.type == 'image':
                response = wechat.response_text(u'图片')
            elif message.type == 'scan':
                if message.key and message.ticket:
                    # TODO 扫码回收优惠券,这里还要判断扫码的用户是否为该品牌店授权的店员
                    # TODO 考虑到还有绑定店员的扫码事件,key分为两种:11[brandid],12[discount_id]
                    logging.info(message.key[0:2])
                    logging.info(message.key[2])
                    if message.key[0:2] == '11':
                        brand_id = int(message.key[2:])
                        brand = Brand.query.get(brand_id)
                        if not brand:
                            response = wechat.response_text("要绑定的店铺不存在")
                        data = {"bid": brand_id}
                        url_text = current_app.config.get("SITE_DOMAIN") + "/check_saler_info" + "?" + urlencode(data)
                        brand_text = "<a href='{0}'>{1}</a>".format(url_text, brand.name)
                        print brand_text

                        text = "您正在申请绑定门店%s,点击输入手机号验证身份" % brand_text
                        response = wechat.response_text(text)
                    elif message.key[0:2] == '12':
                        record_id = int(message.key[2:])
                        ticket_record = GetTicketRecord.query.get(record_id)
                        logging.info("tid" + str(ticket_record.id))
                        # 判断扫码用户是否为该店铺的店员
                        discount_id = ticket_record.discount_id
                        discount = Discount.query.get(discount_id)
                        scan_user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
                        salers = Saler.query.filter(Saler.user_id == scan_user.id)
                        if salers.count() > 0:
                            saler = salers.filter(Saler.brand_id == discount.brand_id).first()
                            if not saler:
                                brand = Brand.query.get(discount.brand_id)
                                tip = "您不是该店铺{0}的店员".format(brand.name)
                                response = wechat.response_text(tip)
                            else:
                                callback_ticket(record_id)
                                saler.count += 1
                                db.session.add(saler)
                                db.session.commit()
                                response = ""
                        else:
                            tip = "您还没有绑定该店铺"
                            response = wechat.response_text(tip)
            # 用户在关注微信时就将用户数据写入数据库
            elif message.type == 'subscribe':
                if message.key and message.ticket:
                    # TODO 扫码回收优惠券,这里还要判断扫码的用户是否为该品牌店授权的店员
                    # TODO 考虑到还有绑定店员的扫码事件,key分为两种:bind_[brandid],ticket_[code]
                    value = message.key.replace("qrscene_", "")
                    if value.split("_")[0] == 'ticket':
                        record_id = int(message.key.split("_")[1])
                        callback_ticket(record_id)
                        response = ""
                    elif value.split("_")[0] == 'bind':
                        brand_id = int(message.key.split("_")[1])
                        brand = Brand.query.get(brand_id)
                        data = {"bid": brand_id}
                        url_text = current_app.config.get("SITE_DOMAIN") + "/check_saler_info" + "?" + urlencode(data)
                        brand_text = "<a href='{0}'>{1}</a>".format(url_text, brand.name)
                        text = "您正在申请绑定门店%s,点击输入手机号验证身份" % brand_text
                        response = wechat.response_text(text)

                openid = message.source
                if not g.user:
                    # 检查用户是否存在
                    user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
                    if user is None:
                        add_wechat_user_to_db(openid)
                        print u'新用户(%s)关注微信' % user.name

                response = wechat.response_text(u'欢迎关注汝州百事优惠圈')
            elif message.type == 'location':
                # 这里有location事件 TODO
                latitude, longitude, precision = message.latitude, message.longitude, message.precision
                print '-' * 10, latitude, longitude, precision, request.remote_addr
                session['latitude'] = latitude
                session['longitude'] = longitude
                session['precision'] = precision
                g.latitude = latitude
                g.longitude = longitude
                g.precision = precision

                return ""
            else:
                return ""

            return response
        else:
            return echostr
    else:

        return "error"