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