1688開放平臺WEB端授權教程

一、WEB授權方式:

對於WEB授權開發方式而言,您的app不會在阿里巴巴應用市場售賣,那麼您需要完成完整的授權過程,請參考如下授權流程

 

二、WEB端授權流程詳解
授權及使用授權時序圖

如果已經授權並且得到refreshToken,那麼可以參考refreshToken換取accessToken流程詳解一節;如果是首次授權,那麼授權流程如下:

1) 用戶使用app,訪問在 1688 的隱私數據

2) app發起授權請求

https://auth.1688.com/oauth/authorize?client_id=xxx&site=1688&redirect_uri=YOUR_REDIRECT_URL&state=YOUR_PARM

a) client_id:app註冊時,分配給app的唯一標示,又稱appKey

b) site:site參數標識當前授權的站點,直接填寫1688

c) redirect_uri: app的入口地址,授權臨時令牌會以queryString的形式跟在該url後返回。注意參數中回調地址的域名必須與app註冊時填寫的回調地址的域名匹配。

d) state:可選,app自定義參數,回跳到redirect_uri時,會原樣返回

3) 用戶輸入用戶名密碼,並確認授權

4) 返回臨時授權碼code給app 
具體返回方式,參照redirect_uri說明

5) 使用code獲取令牌

https://gw.open.1688.com/openapi/http/1/system.oauth2/getToken/YOUR_APPKEY?grant_type=authorization_code&need_refresh_token=true&client_id= YOUR_APPKEY&client_secret= YOUR_APPSECRET&redirect_uri=YOUR_REDIRECT_URI&code=CODE

注:此接口必須使用POST方法提交;必須使用https

getToken接口參數說明:

a) grant_type爲授權類型,使用authorization_code即可

b) need_refresh_token爲是否需要返回refresh_token,如果返回了refresh_token,原來獲取的refresh_token也不會失效,除非超過半年有效期

c) client_id爲app唯一標識,即appKey

d) client_secret爲app密鑰 

e) redirect_uri爲app入口地址

f) code爲授權完成後返回的一次性令牌

g) 調用getToken接口不需要簽名注:如果超過code有效期(2分鐘)或者已經使用code獲取了一次令牌,code都將失效,需要返回第二步重新獲取code

6) 返回令牌 
getToken返回結果:{"aliId":"8888888888","resource_owner":"xxx","memberId":"xxxxxxx","expires_in":"36000","refresh_token":"479f9564-1049-456e-ab62-29d3e82277d9","refresh_token_timeout":"20121222222222+0800","access_token":"f14da3b8-b0b1-4f73-a5de-9bed637e0188"} 
說明:resource_owner爲登錄id,memberId爲會員接口id,aliId爲阿里巴巴集團統一的id,refresh_token_timeout表示refreshToken的過期時間

7) 使用令牌訪問用戶隱私數據 
例如訪問以下api : http://gw.open.1688.com/openapi/param2/1/cn.alibaba.open/member.get/1?memberId=xxx&access_token=ACCESS_TOKEN&_aop_signature=SIGENATURE 
簽名示例見 API簽名規則

 

、refreshToken換取accessToken流程詳解

換取accessToken流程

如果refreshToken有效並且accessToken已經過期(超過10小時),那麼可以使用refresh_token換取access_token,不用重新進行授權,然後訪問用戶隱私數據。

注意:如果refreshToken已經超過了半年的有效期,用戶修改密碼,用戶訂購到期或者用戶通過取消授權工具取消了對app的授權,那麼都需要用戶重新授權獲取refreshToken

換取accessToken的url示例如下:

https://gw.open.1688.com/openapi/param2/1/system.oauth2/getToken/YOUR_APPKEY請求參數如下:

grant_type=refresh_token&client_id=YOUR_APPKEY&client_secret=YOUR_APPSECRET&refresh_token=REFRESH_TOKEN
注:此接口必須使用POST方法提交;必須使用https

a) 此處grant_type參數必須爲refresh_token,表示通過refreshToken換取accessToken,而不是通過臨時code換取

b) 調用getToken接口時不需要簽名

、換取新的refreshToken流程詳解

換取refreshToken流程

如果當前時間離refreshToken過期時間在30天以內,那麼可以調用postponeToken接口換取新的refreshToken;否則會報錯。

注意:有自動功能的應用(用戶不進入應用主頁也能使用第三方應用,因爲在應用後臺可以自動調用api處理用戶數據,如自動重發類的應用)才需要調用此接口。如果沒有自動功能,那麼不需要調用,因爲用戶必須在應用主頁操作才能獲取以及修改用戶數據,所以即使refreshToken過期了,用戶再次通過應用市場進入應用主頁時授權一次即可

換取refreshToken的url示例如下:

https://gw.open.1688.com/openapi/param2/1/system.oauth2/postponeToken/YOUR_APPKEY請求參數如下:

client_id=YOUR_APPKEY&client_secret=YOUR_APPSECRET&refresh_token=REFRESH_TOKEN&access_token=ACCESS_TOKEN返回結果類似getToken的返回結果:

{"aliId":"8888888888","resource_owner":"xxx","memberId":"xxxxxxx","expires_in":"36000","refresh_token":"479f9564-1049-456e-ab62-29d3e82277d9","access_token":"f14da3b8-b0b1-4f73-a5de-9bed637e0188","refresh_token_timeout":"20121222222222+0800"}
注:此接口必須使用https,get和post都行

a) 調用postponeToken接口需要授權,所以必須帶上access_token參數

b) 調用postponeToken接口時不需要簽名

c) refresh_token參數表示當前使用的refreshToken,如果refreshToken的有效期和當前時間的差值小於30天,那麼調用此接口後當前使用的refreshToken失效,返回一個新的refreshToken

五、簽名規則

一、API簽名算法及工具

API簽名算法及工具

二、API簽名串組裝規則

在1688開放平臺,url請求的多個參數都要參與簽名(與文件上傳有關的api中,文件字節流那個參數不參與簽名),下面以兩個參數爲例,假設請求的url格式如下所示: 
http://gw.open.1688.com/openapi/param2/1/system/currentTime/1000000?b=2&a=1(appKey=1000000, 假設 secretKey=test123

參照簽名算法說明,簽名串s組裝規則爲: 
1、 構造簽名因子:urlPath。url 中的一部分,我們稱之爲urlPath,從協議(param2)開始截取,到“?”爲止,urlPath=param2/1/system/currentTime/1000000 
2、 構造簽名因子:拼裝的參數。參數 b=2&a=1,首先將參數的key和value拼在一起,得到b2和a1,然後按照首字母排序,得到a1和b2,最後按順序拼在一起得到a1b2 
3、 合併兩個簽名因子。把前兩步的字符串拼起來,得到s = param2/1/system/currentTime/1000000a1b2 
4、 對合並後的簽名因子執行hmac_sha1算法。 Signature=uppercase (hex (hmac_sha1 (s, secretKey)) 得到簽名33E54F4F7B989E3E0E912D3FBD2F1A03CA7CCE88 
——secretKey爲簽名密鑰,與urlPath中的appKey(1000000)對應 
——hmac_sha1爲通用的hmac_sha1算法,各編程語言一般都對應類庫 
——hex爲轉爲十六進制 
——uppercase爲轉爲大寫字符

說明:API簽名算法主要是使用urlPath和請求參數作爲簽名因子進行簽名,主要針對api 調用

三、參數簽名算法及工具

參數簽名算法及工具

四、參數簽名串組裝規則

在1688開放平臺,用戶在客戶端訪問app時app發起的授權請求url如下所示 :( 注意:只有客戶端或WEB端授權流程中的"app發起授權請求"這一步的簽名才使用此規則,參見 客戶端流程詳情 ) 
http://gw.open.1688.com/auth/authorize.htm?client_id=YOUR_CLIENT_ID&site=china&redirect_uri=YOUR_REDIRECT_URL&state=YOUR_PARAM&_aop_signature=SIGNATURE 
注意:此處訪問的是授權頁面authorize.htm,並不是api調用,所以沒有urlPath,不能用API簽名算法,只是用請求參數作爲簽名因子進行簽名。請求參數的拼裝算法跟API簽名一致

假設用戶授權請求的參數爲 client_id=10000&site=china&redirect_uri=http://localhost:8888&state=test( client_id爲appKey,對應的簽名密鑰假設爲 client_secret=abcd), 那麼簽名串的組裝規則爲 : 
1、 構造簽名因子:拼裝的參數 。 參數 client_id=10000&site=china&redirect_uri=http://localhost:8888&state=test, key和value拼在一起得到 client_id10000&sitechina&redirect_urihttp://localhost:8888&statetest, 然後按照首字母排序,排序後爲 client_id10000&redirect_urihttp://localhost:8888&sitechina&statetest, 然後將排序後的數組拼在一起 ,得到最終的簽名因子 data=client_id10000redirect_urihttp://localhost:8888sitechinastatetest 
2、 對最終的簽名因子執行hmac_sha1算法 。 Signature=uppercase (hex (hmac_sha1 (data, client_secret)) 得到簽名CA538FE6B2180496B77EB46D0EBB5A2EA7A2418B 
——client_secret爲簽名密鑰,與值爲10000(client_id參數的值)的appKey對應 
——hmac_sha1爲通用的hmac_sha1算法,各編程語言一般都對應類庫 
——hex爲轉爲十六進制 
——uppercase爲轉爲大寫字符

說明:參數簽名算法只使用請求參數作爲簽名因子進行簽名,僅針對客戶端或WEB端授權時請求臨時令牌code

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章