def weixinSetting():
    result = urllib2.urlopen(URL_ACCESSTOKEN).read()
    result = jsonDecoder.decode(result)

    if 'access_token' in result:
        access_token = result['access_token']
        url = URL_CREATE_MENU + access_token
        print access_token
        values = {"button": [{"type": "view",
                              "name": "案例推荐",
                              "url": URL_OAUTH.format(APPID, quote('http://jianpianzi.com/mobile/promote'))},
                             {"type": "view",
                              "name": "制作管理",
                               "url": URL_OAUTH.format(APPID, quote('http://jianpianzi.com/mobile/submit'))},
                             {"name": "我的空间",
                              "sub_button": [{"type": "view",
                                              "name": "我的视频",
                                              "url": URL_OAUTH.format(APPID, quote('http://jianpianzi.com/mobile/media'))},
                                             # {"type": "view",
                                             #  "name": "查看帮助",
                                             #  "url": URL_OAUTH.format(APPID, quote('http://jianpianzi.com/mobile/help'))},
                                             {"type": "view",
                                              "name": "牵手联盟",
                                              "url": URL_OAUTH.format(APPID, quote('http://jianpianzi.com/mobile/aboutus'))}, # 增加注销功能
                                             # {"type": "view",
                                             #  "name": "注销",
                                             #  "url": URL_OAUTH.format(APPID, quote('http://jianpianzi.com/mobile/logout'))}
                                             ]}]}
        data = JSONEncoder(ensure_ascii=False).encode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        result = response.read()
        result = jsonDecoder.decode(result)
        if 'errcode' in result:
            if result['errcode'] is not 0:
                return 'set menu failed, errorMsg:' + result['errmsg']
            return 'set menu success!'
        return 'network error'
    elif 'errmsg' in result:
        return result['errmsg']
    else:
        return 'network error'
def check_user_inner():
    if 'UserId' not in session:
        try:
            incoming = request.json_param
            #session['openId'] = 'opW19wWbghHEclmiY7CsGpj53hYE' #for 测试

            if u'code' in incoming and 'openId' not in session:
                weixinCode = incoming[u'code']

                result = urllib2.urlopen(URL_GETUSERTOKEN.format(APPID, SECRET, weixinCode)).read()
                result = jsonDecoder.decode(result)

                if u'openid' in result:
                    session['openId'] = result[u'openid']

            if  'openId' in session:
                user = User.query.filter_by(WeiXinOpenId=session['openId']).one()
                session['UserId'] = user.Id
        except:
            pass
    def wrapper(*args, **kwargs):
        bRefresh = False

        # 查看accessToken是否要刷新
        token = db.session.query(WeiXinToken).first()
        if token:
            duration = datetime.now() - token.CreateTime
            if duration > timedelta(seconds=token.Expires_in):
                bRefresh = True
        else:
            bRefresh = True

        # 查看jsapiTicket是否要刷新
        ticket = db.session.query(WeiXinJsTicket).first()
        if ticket:
            duration = datetime.now() - ticket.CreateTime
            if duration > timedelta(seconds=ticket.Expires_in):
                bRefresh = True
        else:
            bRefresh = True

        if bRefresh:
            result = urllib2.urlopen(URL_ACCESSTOKEN).read()
            result = jsonDecoder.decode(result)

            if 'access_token' in result:
                access_token = result['access_token']

                if token:
                    token.AccessToken = access_token
                    token.Expires_in = result['expires_in']
                    token.CreateTime = datetime.now()
                else:
                    wxToken = WeiXinToken(access_token, result['expires_in'])
                    db.session.add(wxToken)

                r = urllib2.urlopen(URL_GETJSTICKET.format(access_token)).read()
                r = jsonDecoder.decode(r)

                if r['errcode'] == 0:
                    js_ticket = r['ticket']

                    if ticket:
                        ticket.JsapiTicket = js_ticket
                        ticket.Expires_in = r['expires_in']
                        ticket.CreateTime = datetime.now()
                    else:
                        wxTicket = WeiXinJsTicket(js_ticket, r['expires_in'])
                        db.session.add(wxTicket)
                else:
                    return resource(*args, **kwargs) #restfulApi.make_response({'bSuccess': False, 'error': u'get jsTicket failed'}, 200, headers='')

                db.session.commit()
            elif 'errmsg' in result:
                return resource(*args, **kwargs) #restfulApi.make_response({'bSuccess': False, 'error': r['errmsg']}, 200, headers='')
            else:
                return resource(*args, **kwargs) #restfulApi.make_response({'bSuccess': False, 'error': u'network error'}, 200, headers='')
        else:
            access_token = token.AccessToken
            js_ticket = ticket.JsapiTicket

        request.accessToken = access_token
        request.jsTicket = js_ticket

        sign = Sign(js_ticket, request.url)
        print sign.sign()

        request.signature = sign.ret['signature']
        request.nonceStr = sign.ret['nonceStr']
        request.timestamp = sign.ret['timestamp']

        return resource(*args, **kwargs)