Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)