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