一.微信官方對(duì)于access_token的說(shuō)明:
access_token是公眾號(hào)的全局唯一接口調(diào)用憑據(jù),公眾號(hào)調(diào)用各接口時(shí)都需使用access_token。開發(fā)者需要進(jìn)行妥善保存。access_token的存儲(chǔ)至少要保留512個(gè)字符空間。access_token的有效期目前為2個(gè)小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。 公眾平臺(tái)的API調(diào)用所需的access_token的使用及生成方式說(shuō)明: 1、建議公眾號(hào)開發(fā)者使用中控服務(wù)器統(tǒng)一獲取和刷新access_token,其他業(yè)務(wù)邏輯服務(wù)器所使用的access_token均來(lái)自于該中控服務(wù)器,不應(yīng)該各自去刷新,否則容易造成沖突,導(dǎo)致access_token覆蓋而影響業(yè)務(wù); 2、目前access_token的有效期通過(guò)返回的expire_in來(lái)傳達(dá),目前是7200秒之內(nèi)的值。中控服務(wù)器需要根據(jù)這個(gè)有效時(shí)間提前去刷新新access_token。在刷新過(guò)程中,中控服務(wù)器可對(duì)外繼續(xù)輸出的老access_token,此時(shí)公眾平臺(tái)后臺(tái)會(huì)保證在5分鐘內(nèi),新老access_token都可用,這保證了第三方業(yè)務(wù)的平滑過(guò)渡; 3、access_token的有效時(shí)間可能會(huì)在未來(lái)有調(diào)整,所以中控服務(wù)器不僅需要內(nèi)部定時(shí)主動(dòng)刷新,還需要提供被動(dòng)刷新access_token的接口,這樣便于業(yè)務(wù)服務(wù)器在API調(diào)用獲知access_token已超時(shí)的情況下,可以觸發(fā)access_token的刷新流程。 4、對(duì)于可能存在風(fēng)險(xiǎn)的調(diào)用,在開發(fā)者進(jìn)行獲取 access_token調(diào)用時(shí)進(jìn)入風(fēng)險(xiǎn)調(diào)用確認(rèn)流程,需要用戶管理員確認(rèn)后才可以成功獲取。具體流程為: 開發(fā)者通過(guò)某IP發(fā)起調(diào)用->平臺(tái)返回錯(cuò)誤碼[89503]并同時(shí)下發(fā)模板消息給公眾號(hào)管理員->公眾號(hào)管理員確認(rèn)該IP可以調(diào)用->開發(fā)者使用該IP再次發(fā)起調(diào)用->調(diào)用成功。 如公眾號(hào)管理員第一次拒絕該IP調(diào)用,用戶在1個(gè)小時(shí)內(nèi)將無(wú)法使用該IP再次發(fā)起調(diào)用,如公眾號(hào)管理員多次拒絕該IP調(diào)用,該IP將可能長(zhǎng)期無(wú)法發(fā)起調(diào)用。平臺(tái)建議開發(fā)者在發(fā)起調(diào)用前主動(dòng)與管理員溝通確認(rèn)調(diào)用需求,或請(qǐng)求管理員開啟IP白名單功能并將該IP加入IP白名單列表。 公眾號(hào)和小程序均可以使用AppID和AppSecret調(diào)用本接口來(lái)獲取access_token。AppID和AppSecret可在“微信公眾平臺(tái)-開發(fā)-基本配置”頁(yè)中獲得(需要已經(jīng)成為開發(fā)者,且?guī)ぬ?hào)沒(méi)有異常狀態(tài))。**調(diào)用接口時(shí),請(qǐng)登錄“微信公眾平臺(tái)-開發(fā)-基本配置”提前將服務(wù)器IP地址添加到IP白名單中,點(diǎn)擊查看設(shè)置方法,否則將無(wú)法調(diào)用成功。**小程序無(wú)需配置IP白名單。 接口調(diào)用請(qǐng)求說(shuō)明 https請(qǐng)求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 參數(shù)說(shuō)明 參數(shù) 是否必須 說(shuō)明 grant_type 是 獲取access_token填寫client_credential appid 是 第三方用戶唯一憑證 secret 是 第三方用戶唯一憑證密鑰,即appsecret 返回說(shuō)明 正常情況下,微信會(huì)返回下述JSON數(shù)據(jù)包給公眾號(hào): {"access_token":"ACCESS_TOKEN","expires_in":7200} 參數(shù)說(shuō)明 參數(shù) 說(shuō)明 access_token 獲取到的憑證 expires_in 憑證有效時(shí)間,單位:秒 錯(cuò)誤時(shí)微信會(huì)返回錯(cuò)誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無(wú)效錯(cuò)誤): {"errcode":40013,"errmsg":"invalid appid"} 返回碼說(shuō)明 返回碼 說(shuō)明 -1 系統(tǒng)繁忙,此時(shí)請(qǐng)開發(fā)者稍候再試 0 請(qǐng)求成功 40001 AppSecret錯(cuò)誤或者AppSecret不屬于這個(gè)公眾號(hào),請(qǐng)開發(fā)者確認(rèn)AppSecret的正確性 40002 請(qǐng)確保grant_type字段值為client_credential 40164 調(diào)用接口的IP地址不在白名單中,請(qǐng)?jiān)诮涌贗P白名單中進(jìn)行設(shè)置。(小程序及小游戲調(diào)用不要求IP地址在白名單內(nèi)。) 89503 此IP調(diào)用需要管理員確認(rèn),請(qǐng)聯(lián)系管理員 89501 此IP正在等待管理員確認(rèn),請(qǐng)聯(lián)系管理員 89506 24小時(shí)內(nèi)該IP被管理員拒絕調(diào)用兩次,24小時(shí)內(nèi)不可再使用該IP調(diào)用 89507 1小時(shí)內(nèi)該IP被管理員拒絕調(diào)用一次,1小時(shí)內(nèi)不可再使用該IP調(diào)用
二.ASP代碼實(shí)現(xiàn):
Public Function Get_Access_Token() sCode = Request("code") If sCode ="" And Session("access_token")="" Then Response.Redirect(GetAuthorization_Code) Else If DateDiff("s",Now,Session("access_token_expires"))> 0 Then Exit Function End If End If Dim url, params,Temp Url="https://api.weixin.qq.com/sns/oauth2/access_token?" params = "appid="&s_APPID params = params & "&secret=" & s_APPSECRET params = params & "&code=" & sCode params = params & "&grant_type=authorization_code" url = Url & params Temp=RequestUrl(url,"GET","") 'Die Temp If CheckData(Temp,"access_token") = True Then set obj = getjson(Temp) if isobject(obj) Then Session("access_token") = obj.access_token Session("access_token_expires") = DateAdd("s",obj.expires_in,Now) Session("openid") = obj.openid End If set obj = Nothing Else Response.Write("Get_Access_Token()=>"&Temp) Response.End() End If End Function