【平臺(tái)介紹】
餓了么商家開(kāi)放平臺(tái)作為一個(gè)服務(wù)集成平臺(tái),致力于滿足商戶的多樣經(jīng)營(yíng)性需求,提供合作伙伴更多的平臺(tái)資源,服務(wù)商戶接入,提供給商戶豐富的經(jīng)營(yíng)能力。
同時(shí),開(kāi)放平臺(tái)將通過(guò)提供一系列非業(yè)務(wù)性的,例如測(cè)試工具、API調(diào)試工具、服務(wù)監(jiān)控告警、日志分析統(tǒng)計(jì)等解決方案,讓開(kāi)發(fā)者專注于業(yè)務(wù)系統(tǒng)的開(kāi)發(fā),降低開(kāi)發(fā)者的接入成本。
【授權(quán)說(shuō)明】
應(yīng)用接入開(kāi)放平臺(tái)需要獲取商戶的隱私數(shù)據(jù)(如賬號(hào)、商品、訂單、店鋪信息等),為保證商戶數(shù)據(jù)的安全與隱私,應(yīng)用需要取得商戶的授權(quán),即獲取訪問(wèn)商戶數(shù)據(jù)的授權(quán)令牌 Access Token。因此,應(yīng)用需要引導(dǎo)商戶完成使用餓了么商家?guī)ぬ?hào)“登錄授權(quán)”的流程。該流程采用國(guó)際通用的OAuth2.0標(biāo)準(zhǔn)協(xié)議作為商戶身份驗(yàn)證與授權(quán)協(xié)議。
具體可參考:餓了么接口文檔
【獲取方式】
OAuth 2.0的運(yùn)行流程如下圖,摘自RFC 6749。
步驟如下:
(A)商戶打開(kāi)開(kāi)發(fā)者的應(yīng)用客戶端以后,應(yīng)用要求商戶給予授權(quán)。
(B)商戶同意給予應(yīng)用授權(quán),開(kāi)放平臺(tái)給應(yīng)用頒發(fā)授權(quán)碼。
(C)應(yīng)用使用上一步獲得的授權(quán)碼,向開(kāi)放平臺(tái)的認(rèn)證服務(wù)器申請(qǐng)?jiān)L問(wèn)令牌。
(D)認(rèn)證服務(wù)器對(duì)應(yīng)用進(jìn)行認(rèn)證以后,確認(rèn)無(wú)誤,返回訪問(wèn)令牌給到應(yīng)用。
(E)客戶端應(yīng)用使用訪問(wèn)令牌,向開(kāi)放平臺(tái)的資源服務(wù)器申請(qǐng)?jiān)L問(wèn)數(shù)據(jù)資源。
(F)開(kāi)放平臺(tái)資源服務(wù)器確認(rèn)訪問(wèn)令牌有效,同意向客戶端應(yīng)用開(kāi)放資源。
根據(jù)應(yīng)用的類型不同,授權(quán)分為客戶端模式授權(quán)和授權(quán)碼模式授權(quán)。
如果使用商戶賬號(hào)登錄開(kāi)放平臺(tái)且創(chuàng)建的個(gè)人類型應(yīng)用,請(qǐng)使用OAuth2.0的客戶端授權(quán)模式。
如果注冊(cè)了服務(wù)商賬號(hào),創(chuàng)建了企業(yè)類型的應(yīng)用,需要使用OAuth2.0的授權(quán)碼模式引導(dǎo)商戶授權(quán)。
普通商戶賬號(hào)只能創(chuàng)建個(gè)人類型的應(yīng)用,用于為自己的餓了么店鋪進(jìn)行功能開(kāi)發(fā)。服務(wù)商賬號(hào)目前只能創(chuàng)建企業(yè)類型的應(yīng)用,可以為多個(gè)不同的商戶提供服務(wù)。
授權(quán)請(qǐng)求入口地址
1)獲取授權(quán)碼(code)
2)獲取訪問(wèn)令牌(access token)
注意事項(xiàng):授權(quán)成功后得到的access_token正式環(huán)境有效期為30天,沙箱環(huán)境有效期是1天(expires_in的單位為秒),應(yīng)用需要自行存儲(chǔ)這個(gè)access_token,并且在每次接口訪問(wèn)前判斷token是否失效(失效的判斷邏輯是token已經(jīng)過(guò)了expires_in的有效期或者接口調(diào)用返回的code為UNAUTHORIZED),如果失效需要重新授權(quán)獲取,在有效期內(nèi)token可以不能每次接口調(diào)用前都授權(quán)訪問(wèn)一次。有效期內(nèi)重復(fù)授權(quán)訪問(wèn)會(huì)導(dǎo)致上一次的access_token失效。
授權(quán)碼授權(quán)模式流程
企業(yè)類型的應(yīng)用的開(kāi)發(fā)是指企業(yè)獨(dú)立完成應(yīng)用的設(shè)計(jì)開(kāi)發(fā)后,作為商品服務(wù)推廣給商戶使用。
需要注意的是,連鎖店商戶授權(quán)后所有連鎖店的商戶都會(huì)對(duì)該應(yīng)用授權(quán)。
(A)商戶訪問(wèn)客戶端應(yīng)用,后者將前者導(dǎo)向開(kāi)放平臺(tái)認(rèn)證服務(wù)器。
(B)商戶自行選擇是否給予應(yīng)用授權(quán)。
(C)假設(shè)商戶給予授權(quán),認(rèn)證服務(wù)器將商戶導(dǎo)向客戶端事先指定的"重定向URI"(redirection URI),同時(shí)附上一個(gè)授權(quán)碼code。
(D)客戶端收到授權(quán)碼,使用授權(quán)碼向認(rèn)證服務(wù)器申請(qǐng)?jiān)L問(wèn)令牌。這一步是在客戶端的后臺(tái)服務(wù)器上完成的,對(duì)商戶不可見(jiàn)。
(E)認(rèn)證服務(wù)器核對(duì)了授權(quán)碼和重定向URI,確認(rèn)無(wú)誤后,向客戶端發(fā)送訪問(wèn)令牌(access_token)和更新令牌(refresh_token)。
(F)假設(shè)商戶拒絕授權(quán),認(rèn)證服務(wù)器將商戶導(dǎo)向客戶端事先指定的"重定向URI"(redirection URI),同時(shí)附上error信息
(G)在access_token即將過(guò)期之前,可以使用refresh_token直接向認(rèn)證服務(wù)器發(fā)起請(qǐng)求,換取新的access_token,延續(xù)access_token的有效期
授權(quán)碼模式各步驟詳細(xì)說(shuō)明:
此處以沙箱環(huán)境獲取acccess_token為例說(shuō)明,如果是正式環(huán)境請(qǐng)求,需將請(qǐng)求入口地址等相關(guān)數(shù)據(jù)換成正式環(huán)境對(duì)應(yīng)入口地址,操作流程沙箱環(huán)境和正式環(huán)境是一致的。
實(shí)際進(jìn)行授權(quán)操作時(shí),測(cè)試的數(shù)據(jù) client_id、secret、redirect_uri 等參數(shù)均需要根據(jù)自己創(chuàng)建的應(yīng)用實(shí)際數(shù)據(jù)給予替換,不能拿示例中給出的值直接進(jìn)行測(cè)試,以免影響實(shí)際測(cè)試效果。下圖為服務(wù)端授權(quán)方式流程圖,以下按流程圖逐步說(shuō)明。
(A)步驟中,客戶端拼接授權(quán)需要訪問(wèn)的URL,示例及參數(shù)說(shuō)明如下:
(B)步驟引導(dǎo)商戶到授權(quán)頁(yè),商戶可以選擇點(diǎn)擊【同意授權(quán)】或者【取消授權(quán)】
(C)步驟獲取授權(quán)碼,如果商戶點(diǎn)擊【同意授權(quán)】,開(kāi)放平臺(tái)認(rèn)證服務(wù)器會(huì)回應(yīng)客戶端的授權(quán)回調(diào)URI,并且返回參數(shù)
(D)步驟使用授權(quán)碼換取訪問(wèn)令牌,客戶端向認(rèn)證服務(wù)器發(fā)起訪問(wèn)令牌的請(qǐng)求,示例及參數(shù)說(shuō)明
(E)步驟,如果認(rèn)證成功,認(rèn)證服務(wù)器響應(yīng)HTTP請(qǐng)求,Token示例如下:
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"token_type": "bear",
"expires_in": 3600,
"refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
"scope": "all"
}