示例#1
0
    def waiting_to_login(self, step=1):
        if step == 1:
            logger.info('waiting for WeChat to scan two dimensional code login...')
        else:
            logger.info('Wait for mobile phone confirmation...')
        url = 'https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?tip=%s&uuid=%s&r=%s&_=%s' % (
            0, self.uuid, get_js_r(), get_r())
        data = str(get(url))
        logger.debug(data)
        pm = re.search(r'window.code=(\d+);', data)
        code = pm.group(1)

        # 如果返回码为201 表示还处于等待扫描状态
        if code == '201':
            return self.waiting_to_login()
        elif code == '200':
            pm = re.search(r'window.redirect_uri="(\S+?)";', data)
            r_uri = pm.group(1) + '&fun=new'
            self.base_uri = r_uri[:r_uri.rfind('/')]
            pm = re.search(r'([\S]+)/cgi-bin/', self.base_uri)
            self.wx_server_domain = pm.group(1)
            self.file_uri, self.sync_uri = get_wx_uri(self.base_uri)
            return r_uri
        elif code == '408':
            return self.waiting_to_login(step=2)
        else:
            # 大概12次超时后,登录异常 400
            logger.warning('login error ... %s' % code)
        return False
示例#2
0
def get_contact(login_info):
    url = login_info[
        'base_uri'] + '/webwxgetcontact?pass_ticket=%s&skey=%s&r=%s' % (
            login_info['pass_ticket'], login_info['skey'], get_r())
    dic = post(url, {})
    if not dic or dic['BaseResponse']['Ret'] != 0:
        logging.error(dic)
        return False
    return dic
示例#3
0
 def sync_check(self):
     params = {
         'r': get_r(),
         'sid': self.sid,
         'uin': self.uin,
         'skey': self.skey,
         'deviceid': self.deviceid,
         'synckey': self.synckey,
         '_': get_r()
     }
     url = 'https://' + self.sync_uri + \
           '/cgi-bin/mmwebwx-bin/synccheck?' + parse.urlencode(params)
     data = str(get(url))
     logger.debug('get a data : %s:' % data)
     if data == '':
         return [-1, -1]
     pm = re.search(r'window.synccheck={retcode:"(\d+)",selector:"(\d+)"}', data)
     retcode = pm.group(1)
     selector = pm.group(2)
     return [retcode, selector]
示例#4
0
 def build_qr_code(self):
     # todo  how to send this qr_img to web client is a problem ?
     if not self.uuid:
         raise WeChatLoginException('get uuid failed ...')
     url = 'https://login.weixin.qq.com/qrcode/' + self.uuid
     str2qr(url)  # are you sure to print qrcode ?
     params = {'t': 'webwx', '_': get_r()}
     qr_img_data = post(url, params, False)
     self.qr_fn = '%s-%s.jpg' % (self.uuid, str(time.time()))
     file = save_file('/tmp', self.qr_fn, qr_img_data)
     if sys.platform.startswith('win'):
         os.startfile(file)
示例#5
0
 def get_uuid(self):
     url = 'https://login.weixin.qq.com/jslogin'
     params = {
         'appid': self.appid,
         'fun': 'new',
         'lang': self.lang,
         '_': get_r(),
     }
     data = post(url, params, False).decode()
     if data == '':
         return
     regx = r'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)"'
     pm = re.search(regx, data)
     if pm and pm.group(1) == '200':
         return pm.group(2)
示例#6
0
文件: send.py 项目: Fribblezhu/webot
def webwxsendmsg(account, content, to='filehelper'):
    login_info = account['login_info']
    url = login_info['base_uri'] + \
          '/webwxsendmsg?pass_ticket=%s' % (login_info['pass_ticket'])
    msgid = get_r()
    params = {
        'BaseRequest': get_base_request(**login_info),
        'Msg': {
            "Type": 1,
            "Content": content,
            "FromUserName": account['account_id'],
            "ToUserName": to,
            "LocalID": msgid,
            "ClientMsgId": msgid
        }
    }
    # print(params)
    headers = {'content-type': 'application/json; charset=UTF-8'}
    data = json.dumps(params, ensure_ascii=False).encode('utf8')
    r = requests.post(url, data=data, headers=headers, verify=False)
    return r.json()
示例#7
0
def batch_get_contacts(login_info, group_ids, encry_chatroom_id=""):
    if not group_ids:
        return []

    url = login_info['base_uri'] + \
          '/webwxbatchgetcontact?type=ex&r=%s&pass_ticket=%s' % (
              get_r(), login_info['pass_ticket'])
    params = {
        'BaseRequest':
        get_base_request(**login_info),
        "Count":
        len(group_ids),
        "List": [{
            "UserName": group_id,
            "EncryChatRoomId": encry_chatroom_id
        } for group_id in group_ids]
    }
    dic = post(url, params)

    if not dic or dic['BaseResponse']['Ret'] != 0:
        logging.error(dic)
        return False

    return dic['ContactList']