微信獲取用戶的openid和詳細信息

 

獲取用戶的信息的原理,首先用戶會點擊一個url,這個url會包含一個參數redirect_uri,這個url是指向微信那邊的服務器的,而後微信會把這個http請求重定向到redirect_uri,即咱們的後端,並且會附帶一個code參數,若是咱們須要獲取用戶的基礎信息(也就是openid)就須要用這個code去訪問微信的指定url來請求用戶的openid,若是咱們須要獲取用戶的詳細信息(微信名稱,頭像),咱們就須要先用code獲取一個access_token,再用這個access_token來獲取用戶的信息後端

獲取用戶點擊的那個url的方法:api

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com'


def get_redirect_url(uri, is_info=0):
    '''
    獲取url,改url能夠訪問微信的網址,而後會重定向回來咱們的網址,並且附帶訪問的微信用戶的信息
    uri 須要跳轉到的uri  如/cherrs
    is_info 是否獲取詳細信息,若是爲1,就獲取用戶的詳細信息,包括名字,圖片,不然就獲取基本信息,只有open_id
    返回 url
    '''
    pre_url = 'http://xxxx.xxxxx.com'
    appid = 'wxxxxxxxxxxxxxxxxxeb'
    scope = 'snsapi_userinfo' if is_info else 'snsapi_base'
    data = {'redirect_uri': pre_url + uri,
            'appid': appid,
            'response_type': 'code',
            'scope': scope,
            'state': '123'}

    urlencode = urllib.urlencode(data)
    wei_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?' + urlencode + '#wechat_redirect'

    return wei_url

經過code獲取用戶open_id服務器

def get_base_info(code):
    '''
    經過獲取的code,訪問微信的api,獲取用戶基本信息(只有openid)
    return 用戶的open id
    '''
    if not code: return ''
    url = 'https://api.weixin.qq.com/sns/oauth2/access_token'
    try:
        data = {'appid': const.appid, 'secret': const.secret, 'code': code, 'grant_type': 'authorization_code'}
        post_body = urllib.urlencode(data)
        f = urllib2.urlopen(url, post_body).read()
        r = ast.literal_eval(f) #字符串轉換成字典
        return r['openid']
    except:
        return ''

經過code獲取用戶詳細信息:微信

def get_detail_info(code):
    '''
    獲取用戶的詳細信息
    return dict {'userID':'','nickname':''m',headimgurl':''}
    '''
    ret = {}
    url = 'https://api.weixin.qq.com/sns/oauth2/access_token'
    try:
        data = {'appid': const.appid, 'secret': const.secret, 'code': code, 'grant_type': 'authorization_code'}
        post_body = urllib.urlencode(data)
        f = urllib2.urlopen(url, post_body).read()
        r = ast.literal_eval(f) #字符串轉換成字典

        #獲取用戶詳細信息
        access_token = r['access_token']
        ret['userID'] = r['openid']
        url = 'https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN' % (
            access_token, ret['userID'])
        f = urllib2.urlopen(url).read()
        r = ast.literal_eval(f) #字符串轉換成字典
        ret['nickname'] = urllib.unquote(r['nickname'])
        ret['headimgurl'] = urllib.unquote(r['headimgurl'])
    except urllib2.URLError, e:
        return ret
    return ret
相關文章
相關標籤/搜索