引導使用者進入授權頁面同意授權,獲取code
通過code換取網頁授權access_token(與基礎支援中的access_token不同)
如果需要,開發者可以重新整理網頁授權access_token,避免過期
通過網頁授權access_token和openid獲取使用者基本資訊
獲取code的介面:
scope為snsapi_basescope為snsapi_userinfo
引數說明引數
是否必須說明是
redirect_uri
是response_type
是返回型別,請填寫code
scope
是應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取使用者openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要使用者授權,也能獲取其資訊)
state
否重定向後會帶上state引數,開發者可以填寫a-za-z0-9的引數值
#wechat_redirect
是無論直接開啟還是做頁面302重定向時候,必須帶此引數
下圖為scope等於snsapi_userinfo時的授權頁面:
使用者同意授權後
如果使用者同意授權,頁面將跳轉至 redirect_uri/?code=code&state=state。若使用者禁止授權,則重定向後不會帶上code引數,僅會帶上state引數redirect_uri?state=state
code說明 :code作為換取access_token的票據,每次使用者授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動過期。
由於access_token擁有較短的有效期,當access_token超時後,可以使用refresh_token進行重新整理,refresh_token擁有較長的有效期(7天、30天、60天、90天),當refresh_token失效的後,需要使用者重新授權。引數請求方法
引數是否必須說明是
grant_type
是填寫為refresh_token
refresh_token
是填寫通過access_token獲取到的refresh_token引數
返回說明
正確時返回的json資料報如下:
描述access_token
網頁授權介面呼叫憑證,注意:此access_token與基礎支援的access_token不同
expires_in
access_token介面呼叫憑證超時時間,單位(秒)
refresh_token
使用者重新整理access_token
openid
使用者唯一標識
scope
使用者授權的作用域,使用逗號(,)分隔
全域性返回碼說明如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取使用者資訊了。
請求方法
http:get(請使用https協議)引數說明引數
描述access_token
網頁授權介面呼叫憑證,注意:此access_token與基礎支援的access_token不同
openid
使用者的唯一標識
lang
返回國家地區語言版本,zh_cn
簡體,zh_tw 繁體,en 英語
返回說明
正確時返回的json資料報如下:
引數描述openid
使用者的唯一標識
nickname
使用者暱稱
***使用者的性別,值為1時是男性,值為2時是女性,值為0時是未知
province
使用者個人資料填寫的省份
city
普通使用者個人資料填寫的城市
country
國家,如中國為cn
headimgurl
使用者頭像,最後乙個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),使用者沒有頭像時該項為空
privilege
使用者特權資訊,json
unionid
下面是獲取使用者資訊的部分原始碼:第一步應該是獲取code,我這裡沒有原始碼,但前面已經給出介面了。
public modelandview getweixininfo(httpservletrequest request,httpservletresponse response)
catch (jsonexception e)
url2=""+access_token+"&openid="+openid+"&lang=zh_cn";
res2=stringutil.geturltxtwithcharset(""+access_token+"&openid="+openid+"&lang=zh_cn","utf-8",3000,3000);
jsonobject userinfo=null;
try catch (jsonexception e)
request.setattribute("res1", res1);
request.setattribute("res2", res2);
request.setattribute("url1",url1 );
request.setattribute("url2",url2 );
request.setattribute("access_token",access_token );
request.setattribute("openid", openid);
return mv;
}
geturltxtwithcharset方法:
public static string geturltxtwithcharset(string strurl,string charset)
public static string geturltxtwithcharset(string strurl,string charset,int conndelay,int readdelay)
// connection.setrequestmethod("get");
// connection.setdooutput(true);
// connection.setdoinput(true);
// outputstream os = connection.getoutputstream();
reader=new bufferedreader(new inputstreamreader(connection.getinputstream(),charset));
while ((line=reader.readline())!=null)
result = sb.tostring();
contenttype = connection.getcontenttype();
} catch (exception e)
try}catch (exception e)
finally catch (exception e2)
} return result;
}
這部分原始碼少了獲取code的那一步。
本來想寫點自己的見解的,誰知寫起來後都是複製貼上的,覺得有點失敗,感覺還是沒有研究透徹,沒有成為自己的東西,如果你看到這篇文章,覺得對自己有幫助,我就非常高興了。
微信公眾平台 獲取使用者openid
第一步 理解邏輯。1 獲取openid的邏輯 則可以獲得json型別的返回資料,其中就有我們需要的openidurl1 string url redirect uri redirect uri response type code scope snsapi base state state wech...
微信公眾平台 獲取使用者openid
第一步 理解邏輯。1 獲取openid的邏輯 則可以獲得json型別的返回資料,其中就有我們需要的openidurl1 string url redirect uri redirect uri response type code scope snsapi base state state wech...
微信公眾平台 獲取使用者openid
第一步 理解邏輯。1 獲取openid的邏輯 則可以獲得json型別的返回資料,其中就有我們需要的openidurl1 string url redirect uri redirect uri response type code scope snsapi base state state wech...