def process_request(self, request): if not runtime_settings.get(TMWEIXIN_TURN_ON): return assert hasattr(request, 'session'), (u"session should be available" u"please add session middleware in settings") exclude_path = runtime_settings.get(PATH_EXCLUDE_LIST_TOKEN) or [] for p in exclude_path: p = re.compile(p) if p.match(request.get_full_path()): return openid = request.session.get("openid", None) assert openid if hasattr(request, 'wx_user'): return try: request.wx_user = User.objects.get(openid=openid) except User.DoesNotExist: pass else: return if request.GET.get('state') == "reqwebauth": # user auth success. get weixin request with state of reqwebauth code = request.GET.get('code') if code: actken = OAuth2(code).get_data().get("access_token") if actken is None: return HttpResponseServerError() # actken may get error wxu = UserInfo(openid, actken).get_data() if wxu.get('errcode'): return HttpResponseServerError() else: # if user is not subscribed,let user give us permission. # use this permission to get user info wxu = UserInfo(openid).get_data() if wxu.get(u'subscribe') == 0 and request.GET.get('state') != "reqwebauth": url = OAuth2.get_authorize_uri( redirect="http://%s%s" % (settings.SITE_HOST, request.get_full_path()), scope=OAuth2.SNSAPI_USERINFO, state="reqwebauth") return HttpResponseRedirect(url) wxu_headimgurl = wxu.get('headimgurl') if wxu_headimgurl and wxu_headimgurl.endswith(r'/0'): wxu_headimgurl = wxu_headimgurl[:-2] + "/132" else: wxu_headimgurl = "" m = User(openid=wxu.get('openid'), nickname=wxu.get('nickname'), sex=int(wxu.get('sex')), city=wxu.get('city'), province=wxu.get('province'), headimgurl=wxu_headimgurl) m.save() request.wx_user = m
def process_response(self, request, response): if not runtime_settings.get(TMWEIXIN_TURN_ON): return response if getattr(request, self.force_redirect_token, None): return HttpResponseRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?" "appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&state=1" "#wechat_redirect" % (wx_conf.app_id, urllib.quote("http://%s%s" % (settings.SITE_HOST, request.get_full_path())))) else: return response
def default_parse_data(msg, data): """ 将信号处理器的返回解析并制作成微信消息(xml包) :param msg: 微信推送来的消息 :param data: 信号处理器的返回(列表:[(receiver, response), ..]) """ if data and len(data) >= 1: for i in range(0, len(data)): if data[i][1] is not None: return parse_msg_xml(msg, data[i][1]) ret_txt = parse_msg_xml(msg, {'MsgType': 'text', 'Content': u"%s" % rc.get(WEIXIN_TLP_MSG)}) return ret_txt
def process_request(self, request): if not runtime_settings.get(TMWEIXIN_TURN_ON): return exclude_path = runtime_settings.get(PATH_EXCLUDE_LIST_TOKEN) or path_exclude_list for p in exclude_path: p = re.compile(p) if p.match(request.get_full_path()): return assert hasattr(request, 'session'), (u"session should be available" u"please add session middleware in settings") code = request.GET.get("code", None) # 非debug模式下要求必须运行于微信环境 if code is None and request.session.get("openid", None) is None and not self.wf.get(TMWEIXIN_DEBUG): setattr(request, self.force_redirect_token, True) elif code is not None and request.session.get("openid", None) is None: try: request.session["openid"] = get_openid(code) except KeyError: # code 无效则重新获取 setattr(request, self.force_redirect_token, True)
def process_request(self, request): exclude_path = runtime_settings.get( PATH_EXCLUDE_LIST_TOKEN) or path_exclude_list for p in exclude_path: p = re.compile(p) if p.match(request.get_full_path()): return assert hasattr( request, 'session'), (u"session should be available" u"please add session middleware in settings") code = request.GET.get("code", None) # 非debug模式下要求必须运行于微信环境 if code is None and request.session.get( "openid", None) is None and not self.wf.get(TMWEIXIN_DEBUG): setattr(request, self.force_redirect_token, True) elif code is not None and request.session.get("openid", None) is None: try: request.session["openid"] = get_openid(code) except KeyError: # code 无效则重新获取 setattr(request, self.force_redirect_token, True)