예제 #1
0
파일: common.py 프로젝트: jack2949/itchatmp
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'ip_list' in result:
         result['errcode'] = 0
         for i, v in enumerate(result['ip_list']):
             result['ip_list'][i] = v[:v.rfind('/')]
     return result
예제 #2
0
def update_tag(id, name, accessToken=None):
    data = encode_send_dict({
        'tagid': id,
        'tagname': name,
    })
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/tag/update?access_token=%s' %
                      (COMPANY_URL, accessToken),
                      data=data).json()
    return ReturnValue(r)
예제 #3
0
 def _wrap_result(result):
     if 'application/json' in result.headers['Content-Type']:
         j = result.json()
         if 'news_item' in j or 'down_url' in j: j['errcode'] = 0
         return ReturnValue(j)
     else:
         tempStorage = io.BytesIO()
         for block in result.iter_content(1024):
             tempStorage.write(block)
         return ReturnValue({'file': tempStorage, 'errcode': 0})
예제 #4
0
def set_head_image(openedFile, kfAccount, accessToken=None):
    try:
        r = requests.post('%s/customservice/kfaccount/uploadheadimg?'
                          'access_token=%s&kf_account=%s' %
                          (SERVER_URL, accessToken, kfAccount),
                          files={
                              'file': openedFile
                          }).json()
        return ReturnValue(r)
    except Exception as e:
        return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #5
0
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'media_id' in result:
         result['errcode'] = 0
     else:
         for k in result:
             if 'media_id' in k:
                 result['media_id'] = result[k]
                 result['errcode'] = 0
                 break
     return result
예제 #6
0
def reply_msg_format(msg):
    ''' turns string reply to reply dict
     * if format failed, it will return a ReturnValue equals to False
     * if succeeded, it will return a dict equals to string
     * string content will be filled in MediaId key
    '''
    if isinstance(msg, dict):
        r = msg
    elif hasattr(msg, 'capitalize'):
        msgType, content = msg[1:4], msg[5:]
        r = {}
        if not re.match('@[a-z]{3}@', msg[:5]):
            r['MsgType'] = TEXT
            r['MediaId'] = msg
        elif msgType == 'msc':
            return ReturnValue({
                'errcode':
                -10003,
                'errmsg':
                'msg for type MUSIC should be: {"MsgType": MUSIC, ' +
                '"musicurl" :MUSICURL, "hqmusicurl" :HQMUSICURL, ' +
                '"thumb_media_id": MEDIA_ID}'
            })
        elif msgType not in ('img', 'voc', 'vid', 'txt', 'nws', 'cad'):
            return ReturnValue({
                'errcode':
                -10003,
                'errmsg':
                'send supports: img, voc, vid, txt, nws, cad'
            })
        elif msgType == 'txt':
            r['MsgType'] = TEXT
            r['MediaId'] = content
        elif msgType in ('nws', 'cad'):
            r['MsgType'] = NEWS if msgType == 'nws' else CARD
            try:
                r.update(json.loads(content))
            except:
                logger.warning('content of %s is not a valid json' %
                               r['MsgType'])
        else:
            r['MsgType'] = {'img': IMAGE, 'voc': VOICE, 'vid': VIDEO}[msgType]
            if os.path.isfile(content):
                r['FileDir'] = content
            else:
                r['MediaId'] = content
    else:
        r = ReturnValue({
            'errcode': -10003,
            'errmsg': 'msg should be string or dict'
        })
    if 'Content' in r and not 'MediaId' in r and r.get('MsgType') == TEXT:
        r['MediaId'] = r['Content']
    return r
예제 #7
0
def clear_notify(ownerId, chatId=None, userId=None, accessToken=None):
    data = {
        'op_user': ownerId,
        'chat': {
            'type': 'group' if chatId else 'single',
            'id': chatId or userId, }}
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/chat/clearnotify?access_token=%s' % 
        (COMPANY_URL, accessToken), data=data).json()
    return ReturnValue(r)
예제 #8
0
def update_news(mediaId, newsDict, index=0, accessToken=None):
    data = {
        'media_id': mediaId,
        'mpnews': newsDict,
    }
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/material/update_mpnews?access_token=%s' %
                      (COMPANY_URL, accessToken),
                      data=data).json()
    return ReturnValue(r)
예제 #9
0
def get_image_url(openedFile, accessToken=None):
    try:
        r = requests.post('%s/cgi-bin/media/uploadimg?access_token=%s' %
                          (SERVER_URL, accessToken),
                          files={
                              'file': openedFile
                          }).json()
        if 'url' in r: r['errcode'] = 0
        return ReturnValue(r)
    except Exception as e:
        return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #10
0
def create_tag(name, id=None, accessToken=None):
    ''' create_tag
     * id is for qy only
    '''
    data = encode_send_dict({'tag': {'name': name}})
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/tags/create?access_token=%s' %
                      (SERVER_URL, accessToken),
                      data=data).json()
    if 'tag' in r: r['errcode'] = 0
    return ReturnValue(r)
예제 #11
0
def create_department(name, parentId=1, order=None, id=None, accessToken=None):
    data = {
        'name': name,
        'parentid': parentId, }
    if order is not None: data['order'] = order
    if id is not None: data['id'] = id
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/department/create?access_token=%s' % 
        (COMPANY_URL, accessToken), data=data).json()
    return ReturnValue(r)
예제 #12
0
def quit(chatId, opUserId, accessToken=None):
    data = {
        'chatid': chatId,
        'op_user': opUserId,
    }
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/chat/quit?access_token=%s' %
                      (COMPANY_URL, accessToken),
                      data=data).json()
    return ReturnValue(r)
예제 #13
0
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'media_id' in result:
         result['errcode'] = 0
     else:
         for k in result:
             if 'media_id' in k:
                 result['media_id'] = result[k]
                 result['errcode'] = 0
                 break
     return result
예제 #14
0
def send_some(msgType, mediaId, additionalDict={},
        targetIdList=[], partyIdList=[], tagIdList=[],
        agentId=None, accessToken=None):
    msgDict = __form_send_dict(msgType, mediaId, additionalDict)
    if not msgDict: return msgDict
    if not isinstance(targetIdList, list) or len(targetIdList) < 2:
        return ReturnValue({'errcode': 40130})
    msgDict['touser'] = targetIdList
    r = requests.post('%s/cgi-bin/message/mass/send?access_token=%s' % 
        (SERVER_URL, accessToken), data=encode_send_dict(msgDict)).json()
    return ReturnValue(r)
예제 #15
0
def create_news(newsDict, permanent=False, accessToken=None):
    if permanent:
        url = '%s/cgi-bin/material/add_news?access_token=%s'
    else:
        url = '%s/cgi-bin/media/uploadnews?access_token=%s'
    try:
        r = requests.post(url % (SERVER_URL, accessToken),
            data=encode_send_dict(newsDict)).json()
        if 'media_id' in r: r['errcode'] = 0
        return ReturnValue(r)
    except Exception as e:
        return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #16
0
 def _batchget_material(fileType, offset, count, accessToken=None):
     if not fileType in (IMAGE, VOICE, VIDEO, THUMB):
         return ReturnValue({'errcode': 40004,})
     if 20 < count: count = 20
     try:
         r = requests.post('%s/cgi-bin/material/batchget_material?access_token=%s'
                 % (SERVER_URL, accessToken), json={'type': fileType,
                 'offset': offset, 'count': count}).json()
         if 'total_count' in r: r['errcode'] = 0
         return ReturnValue(r)
     except Exception as e:
         return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #17
0
파일: utils.py 프로젝트: jack2949/itchatmp
 def _download_qrcode(ticket):
     params = {'ticket': ticket}
     r = requests.get('https://mp.weixin.qq.com/cgi-bin/showqrcode',
         params=params, stream=True)
     if 'application/json' in r.headers['Content-Type']:
         r = ReturnValue(r.json())
     else:
         tempStorage = io.BytesIO()
         for block in r.iter_content(1024):
             tempStorage.write(block)
         r = ReturnValue({'File': tempStorage, 'errcode': 0})
     return r
예제 #18
0
 def _send_some(msgType, mediaId, additionalDict, targetIdList, accessToken=None):
     msgDict = __form_send_dict(msgType, mediaId, additionalDict)
     if not msgDict: return msgDict
     if not isinstance(targetIdList, list) or len(targetIdList) < 2:
         return ReturnValue({'errcode': 40130})
     msgDict['touser'] = targetIdList
     try:
         r = requests.post('%s/cgi-bin/message/mass/send?access_token=%s' % 
             (SERVER_URL, accessToken), data=encode_send_dict(msgDict)).json()
         return ReturnValue(r)
     except Exception as e:
         return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #19
0
def set_mute(muteList=[], cancelList=[], accessToken=None):
    l = []
    for status, userIdList in enumerate((cancelList, muteList)):
        for userId in userIdList:
            l.append({'userid': userId,
                'status': status, })
    data = {'user_mute_list': l}
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/chat/setmute?access_token=%s' % 
        (COMPANY_URL, accessToken), data=data).json()
    return ReturnValue(r)
예제 #20
0
def download(mediaId, accessToken=None):
    params = {
        'access_token': accessToken,
        'media_id': mediaId, }
    r = requests.get('%s/cgi-bin/media/get' % COMPANY_URL, stream=True)
    if 'application/json' in r.headers['Content-Type']:
        return ReturnValue(r.json())
    else:
        tempStorage = io.BytesIO()
        for block in r.iter_content(1024):
            tempStorage.write(block)
        return ReturnValue({'file': tempStorage, 'errcode': 0})
예제 #21
0
 def _send(msgType, mediaId, additionalDict, toUserId, accessToken=None):
     msgDict = __form_send_dict(msgType, mediaId, additionalDict)
     if not msgDict: return msgDict
     msgDict['touser'] = toUserId
     data = encode_send_dict(msgDict)
     if data is None: return ReturnValue({'errcode': -10001})
     try:
         r = requests.post('%s/cgi-bin/message/custom/send?access_token=%s'
             % (SERVER_URL, accessToken), data=data).json()
         return ReturnValue(r)
     except Exception as e:
         return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #22
0
def add_users_into_tag(id, userIdList=None, partyList=None, accessToken=None):
    if not userIdList:
        return ReturnValue({
            'errcode': 40035,
            'errmsg': 'must have one userId'
        })
    data = encode_send_dict({'openid_list': userIdList, 'tagid': id})
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/tags/members/batchtagging?access_token=%s' %
                      (SERVER_URL, accessToken),
                      data=data).json()
    return ReturnValue(r)
예제 #23
0
def create_qrcode(sceneData, expire=2592000):
    ''' create qrcode with specific data
     * qrcode can be perment, if so you need to set expire to False
     * sceneData can be string or integer if it's perment
     * but it can only be integer if it's not
    '''
    data = {'action_info': {'scene': {}}}

    try:
        expire = int(expire)
    except ValueError:
        return ReturnValue({
            'errcode': -10003,
            'errmsg': 'expire should be int'
        })
    if not (isinstance(sceneData, int) or hasattr(sceneData, 'capitalize')):
        return ReturnValue({
            'errcode': -10003,
            'errmsg': 'sceneData should be int or string'
        })

    if expire:
        if not isinstance(sceneData, int):
            return ReturnValue({
                'errcode':
                -10003,
                'errmsg':
                'sceneData for tmp qrcode can only be int'
            })
        if not 0 < expire < 2592000: expire = 2592000
        data['expire_seconds'] = expire
        data['action_name'] = 'QR_SCENE'
        data['action_info']['scene']['scene_id'] = sceneData
    else:
        if isinstance(sceneData, int):
            data['action_name'] = 'QR_LIMIT_SCENE'
            data['action_info']['scene']['scene_id'] = sceneData
        else:
            data['action_name'] = 'QR_LIMIT_STR_SCENE'
            data['action_info']['scene']['scene_str'] = sceneData

    @retry(n=3, waitTime=3)
    @access_token
    def _create_qrcode(data, accessToken=None):
        data = encode_send_dict(data)
        if data is None: return ReturnValue({'errcode': -10001})
        r = requests.post('%s/cgi-bin/qrcode/create?access_token=%s' %
                          (SERVER_URL, accessToken),
                          data=data).json()
        if 'ticket' in r: r['errcode'] = 0
        return ReturnValue(r)

    return _create_qrcode(data)
예제 #24
0
def download_qrcode(ticket):
    params = {'ticket': ticket}
    r = requests.get('https://mp.weixin.qq.com/cgi-bin/showqrcode',
                     params=params,
                     stream=True)
    if 'application/json' in r.headers['Content-Type']:
        return ReturnValue(r.json())
    else:
        tempStorage = io.BytesIO()
        for block in r.iter_content(1024):
            tempStorage.write(block)
        return ReturnValue({'file': tempStorage, 'errcode': 0})
예제 #25
0
def upload(fileType, fileDir, additionalDict={}, permanent=False, accessToken=None):
    if additionalDict: # format additionalDict
        for key in ('description',):
            if key in additionalDict and isinstance(additionalDict[key], dict):
                for k, v in additionalDict[key].items():
                    if k not in additionalDict:
                        additionalDict[k] = v
        additionalDict = {k.lower().replace('_', ''): v
            for k, v in additionalDict.items()}
        if 'introduction' in additionalDict:
            additionalDict['description'] = additionalDict['introduction']
    if not fileType in (IMAGE, VOICE, VIDEO, THUMB):
        return ReturnValue({'errcode': 40004,})
    elif fileType == VIDEO and permanent and not ('title' in additionalDict
            and 'description' in additionalDict):
        return ReturnValue({'errcode': -10003, 'errmsg':
            'additionalDict for type VIDEO should be: ' +
            "{'Title' : 'title', 'Description' :'des'}"})
    try:
        with open(fileDir, 'rb') as f:
            file_ = f.read()
    except:
        return ReturnValue({'errcode': -10004,})
    fileName = 'file' + os.path.splitext(fileDir)[1]
    if hasattr(fileName, 'decode'):
        fileName = fileName.decode('utf8', 'replace')
    fileMime = mimetypes.guess_type(fileName)[0] or 'application/octet-stream'
    if permanent:
        url = '%s/cgi-bin/material/add_material?access_token=%s&type=%s'
    else:
        url = '%s/cgi-bin/media/upload?access_token=%s&type=%s' 
    files = {'media': (fileName, file_, fileMime), }
    if fileType == VIDEO and permanent:
        files['description'] = (None, encode_send_dict({
            'title': additionalDict['title'],
            'introduction': additionalDict['description'], }
            ), 'application/json')
    r = requests.post(url % (SERVER_URL, accessToken, fileType),
        files=files)
    def _wrap_result(result):
        result = ReturnValue(result.json())
        if 'media_id' in result:
            result['errcode'] = 0
        else:
            for k in result:
                if 'media_id' in k:
                    result['media_id'] = result[k]
                    result['errcode'] = 0
                    break
        return result
    r._wrap_result = _wrap_result
    return r
예제 #26
0
def send(msgType, mediaId, additionalDict={}, senderId=None,
        userId=None, chatId=None, accessToken=None):
    msgDict = __form_send_dict(msgType, mediaId, additionalDict)
    if not msgDict: return msgDict
    msgDict['receiver'] = {
        'type': 'single' if userId else 'group',
        'id': userId or chatId, }
    msgDict['sender'] = senderId
    data = encode_send_dict(msgDict)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/chat/send?access_token=%s' % 
        (COMPANY_URL, accessToken), data=data).json()
    return ReturnValue(r)
예제 #27
0
def batchget_material(fileType, offset=0, count=20, accessToken=None):
    if not fileType in (IMAGE, VOICE, VIDEO, THUMB):
        return ReturnValue({'errcode': 40004,})
    if 20 < count: count = 20
    data = {'type': fileType,
        'offset': offset,
        'count': count, }
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/material/batchget?access_token=%s'
        % (SERVER_URL, accessToken), data=data).json()
    if 'total_count' in r: r['errcode'] = 0
    return ReturnValue(r)
예제 #28
0
def send_all(msgType, mediaId, additionalDict={}, tagId=None, accessToken=None):
    msgDict = __form_send_dict(msgType, mediaId, additionalDict)
    if not msgDict: return msgDict
    msgDict['touser']  = '******'
    msgDict['toparty'] = '@all'
    msgDict['totag']   = '@all'
    msgDict['agentid'] = agentId
    msgDict['safe']    = 0
    data = encode_send_dict(msgDict)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/message/send?access_token=%s' % 
        (COMPANY_URL, accessToken), data=data).json()
    return ReturnValue(r)
예제 #29
0
파일: oauth2.py 프로젝트: zzr0427/itchatmp
def user_id_open_id_switch(userId=None, openId=None, agentId=None, accessToken=None):
    data = {}
    if userId:
        data['userid'] = userId
        if agentId: data['agentid'] = agentId
        url = '%s/cgi-bin/user/convert_to_openid?access_token=' + accessToken
    elif openId:
        data['openid'] = openId
        url = '%s/cgi-bin/user/convert_to_userid?access_token=' + accessToken
    data = encode_send_dict(data)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post(url % COMPANY_URL, data=data).json()
    return ReturnValue(r)
예제 #30
0
def addconditional(menuDict, accessToken=None):
    if not ('button' in menuDict and 'matchrule' in menuDict):
        return ReturnValue({'errcode': 40035})
    data = encode_send_dict(menuDict)
    if data is None: return ReturnValue({'errcode': -10001})
    r = requests.post('%s/cgi-bin/menu/addconditional?access_token=%s' % (
        SERVER_URL, accessToken), data=data)
    def _wrap_result(result):
        result = ReturnValue(result.json())
        if 'menuid' in result: result['errcode'] = 0
        return result
    r._wrap_result = _wrap_result
    return r
예제 #31
0
def get_users(nextOpenId='', departmentId=None, fetchChild=False, status=4, accessToken=None):
    ''' get users of the department
     * nextOpenId is for mp api
    '''
    if departmentId is None:
        return ReturnValue({'errcode': 40035, 'errmsg': 'departmentId must be set',})
    params = {
        'access_token'  : accessToken,
        'department_id' : departmentId,
        'fetch_child'   : int(fetchChild),
        'status'        : status, }
    r = requests.get('%s/cgi-bin/user/simplelist' % SERVER_URL, params=params).json()
    return ReturnValue(r)
예제 #32
0
def download(mediaId, accessToken=None):
    try:
        r = requests.get('%s/cgi-bin/media/get?access_token=%s&media_id=%s' % 
            (SERVER_URL, accessToken, mediaId), stream=True)
        if 'application/json' in r.headers['Content-Type']:
            return ReturnValue(r.json())
        else:
            tempStorage = io.BytesIO()
            for block in r.iter_content(1024):
                tempStorage.write(block)
            return ReturnValue({'file': tempStorage, 'errcode': 0})
    except Exception as e:
        return ReturnValue({'errcode': -10001, 'errmsg': e.message})
예제 #33
0
def reply_msg_format(msg):
    ''' turns string reply to reply dict
     * if format failed, it will return a ReturnValue equals to False
     * if succeeded, it will return a dict equals to string
    '''
    if isinstance(msg, dict):
        r = msg
    elif hasattr(msg, 'capitalize'):
        msgType, content, fileDir = msg[:5], msg[5:], None
        if not re.match('@[a-z]{3}@', msgType):
            content = msgType + content
            msgType = TEXT
        elif msgType[1:4] == 'msc':
            return ReturnValue({
                'errcode':
                -10003,
                'errmsg':
                'msg for type MUSIC should be: {"msgType": MUSIC, ' +
                '"musicurl" :MUSICURL, "hqmusicurl" :HQMUSICURL, ' +
                '"thumb_media_id": MEDIA_ID}'
            })
        elif msgType[1:4] not in ('img', 'voc', 'vid', 'txt', 'nws', 'cad'):
            return ReturnValue({
                'errcode':
                -10003,
                'errmsg':
                'send supports: img, voc, vid, txt, nws, cad'
            })
        else:
            msgType = {
                'img': IMAGE,
                'voc': VOICE,
                'vid': VIDEO,
                'txt': TEXT,
                'nws': NEWS,
                'cad': CARD
            }[msgType[1:4]]
            fileDir = content
        r = {'MsgType': msgType, 'MediaId': content}
        if fileDir: r['FileDir'] = fileDir
    else:
        r = ReturnValue({
            'errcode': -10003,
            'errmsg': 'msg should be string or dict'
        })
    if r and r.get('MsgType') == TEXT:
        if 'MediaId' not in r and 'Content' in r:
            r['MediaId'] = r['Content']
        elif 'MediaId' in r and 'Content' not in r:
            r['Content'] = r['MediaId']
    return r
예제 #34
0
def reply_msg_format(msg):
    ''' turns string reply to reply dict
     * if format failed, it will return a ReturnValue equals to False
     * if succeeded, it will return a dict equals to string
     * string content will be filled in MediaId key
    '''
    if isinstance(msg, dict):
        r = msg
    elif hasattr(msg, 'capitalize'):
        msgType, content = msg[1:4], msg[5:]
        r = {}
        if not re.match('@[a-z]{3}@', msg[:5]):
            r['MsgType'] = TEXT
            r['MediaId'] = msg
        elif msgType == 'msc':
            return ReturnValue({'errcode': -10003, 'errmsg': 
                'msg for type MUSIC should be: {"MsgType": MUSIC, ' + 
                '"musicurl" :MUSICURL, "hqmusicurl" :HQMUSICURL, ' +
                '"thumb_media_id": MEDIA_ID}'})
        elif msgType not in ('img', 'voc', 'vid', 'txt', 'nws', 'cad'):
            return ReturnValue({'errcode': -10003, 'errmsg': 
                'send supports: img, voc, vid, txt, nws, cad'})
        elif msgType == 'txt':
            r['MsgType'] = TEXT
            r['MediaId'] = content
        elif msgType in ('nws', 'cad'):
            r['MsgType'] = NEWS if msgType == 'nws' else CARD
            try:
                r.update(json.loads(content))
            except:
                logger.warning('content of %s is not a valid json' % r['MsgType'])
        else:
            r['MsgType'] = {'img': IMAGE, 'voc': VOICE, 'vid': VIDEO}[msgType]
            if os.path.isfile(content):
                r['FileDir'] = content
            else:
                r['MediaId'] = content
    else:
        r = ReturnValue({'errcode': -10003, 'errmsg': 
            'msg should be string or dict'})
    if 'Content' in r and not 'MediaId' in r and r.get('MsgType') == TEXT:
        r['MediaId'] = r['Content']
    return r
예제 #35
0
파일: menu.py 프로젝트: jack2949/itchatmp
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'selfmenu_info' in result: result['errcode'] = 0
     return result
예제 #36
0
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'total_count' in result: result['errcode'] = 0
     return result
예제 #37
0
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'is_autoreply_open' in result:
         result['errcode'] = 0
     return result
예제 #38
0
파일: menu.py 프로젝트: jack2949/itchatmp
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'menuid' in result: result['errcode'] = 0
     return result
예제 #39
0
 def _wrap_result(result):
     result = ReturnValue(result.json())
     if 'kf_list' in result: result['errcode'] = 0
     return result