程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Aliexpress API 授權流程整理

Aliexpress API 授權流程整理

編輯:C#入門知識

前言

我零零總總用了好幾個月的時間,寫了一個自用的小程序,從 Aliexpress 上抓取訂單的小程序。剛開始寫的時候,該API還沒有開放,而且沒有訂單相關的功能。我完全是通過模擬用戶在網頁上的操作來做的:獲取網頁源碼,用正則取數據,然後組裝到本地數據庫。

 期間經歷過Ali 的數次微調,每次微調,我都要耗費幾個小時做程序上的調整,最大的改動就是Ali 弄個新的 和 老的 訂單展示頁並存的時候。

 最難的部分當數用戶登陸部分,一次登陸,需要跨幾個域,收集這幾個域返回的 Cookie,收集好幾個ajax返回的結果. Cookie 的問題,我用同一個 CookieContainer 解決了,但是 ajax 的,我還得老老實實的每個每個的按順序去請求。

 前兩天,Ali 搞了一個小飛機,某狀態下沒有訂單,分頁居然有 2147483648 頁,一看就是溢出了,正當我准備調整程序的時候,他們又神一般的把這個問題修復了。

 數月前,我就申請成開發者賬戶,而且通過了,只是一直沒有去研究。通過這次小飛機後,我決定,改用API獲取訂單數據,不在從網頁抓取了。

 

開始

首先要注冊成為開發者:

http://gw.api.alibaba.com/isv/index.htm

 注冊成功後,會分配給你一個應用的唯一標志:

其中:

Key 即為API 中說的 YOUR_APPKEY

簽名串 即為 API 中說的YOUR_APPSECRET

 

API 說明可以打開如下地址:

http://gw.api.alibaba.com/dev/doc/sys_auth.htm?ns=aliexpress.open

 

獲取授權步驟:

發起授權請求,用戶同意授權後,返回 ,這裡稱為

該步驟請求如下地址:

http://gw.api.alibaba.com/auth/authorize.htm?client_id=xxx&site=aliexpress&redirect_uri=urn:ietf:wg:oauth:2.0:oob

client_id 要填寫 APPKEY

redirect_uri 是同意授權後回調的地址,因為我寫的是客戶端,不是WEB應用,所以當然沒有回調地址,所以就用這個:urn:ietf:wg:oauth:2.0:oob

 

在請求之前,需要把上面的地址進行簽名,把簽名的值做為參數:_aop_signature的值,加到上面的地址裡,一起請求,簽名說明如下:

 

,只用

http://gw.api.alibaba.com/dev/tools/app_signature.html

 

二,獲取授權碼

獲取到臨時碼後,需要,所有的API都是通過授權碼進行操作的

 

授權碼獲取地址:

https://gw.api.alibaba.com/openapi/http/1/system.oauth2/getToken/{0}?grant_type=authorization_code&&client_id={1}&client_secret={2}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code={3}

 

其中:

{0}處和{1}處填寫 APPKEY

{2} 處填寫 APPSECRET

{3}處填寫上一步獲取到的那個臨時授權碼 Code

 

need_refresh_token 如果為 false 的話,不會返回用於刷新授權碼的

 

返回的結果如下:

{"aliId":"xxx","resource_owner":"xxx","expires_in":"36000","refresh_token":"xxx","access_token":"xxx"}

 

expires_in 是授權碼的過期時間(秒),10個小時 (60 x 60 x 10)。如果過了10小時,就需要刷新授權碼。

refresh_token 是後面需要用的

access_token 即新的授權碼

 

三,刷新授權令牌

授權令牌自生成時間起,會在10小時後過期,這時如果在訪問API,返回的是401 未授權。當該狀況發生時,需要刷新授權令牌。不需要 重新獲取 臨時碼

 

請求地址:

https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/getToken/{0}

POST 如下數據:

grant_type 值為固定的 refresh_token

client_id 值為 APPKEY

client_secret 值為APPSECRET

refresh_token 即上一步中獲取的令牌中的(refhreshToken)

 

刷新授權令牌 得到的結果 和用 臨時授權碼 得到的 授權令牌 大致一致,但是少了刷新碼,因為刷新碼的有效期為半年。

其它說明

令牌的刷新碼(refreshToken),在API文檔中,說是半年有效期,但是在令牌中並沒有關於刷新碼的過期時間信息。

業務邏輯和結構邏輯分離

不知道我這樣說有沒有什麼不妥。

 

 

     [AttributeUsage(AttributeTargets.Class |        
 
                              }

 

 

          opts = input.Target              (opts.AuthToken ==                                
 
                                          }

 

使用起來很簡單,就是在需要做授權判斷的方法上加上相關的 Attribute

 

   OrderDetail FindOrderById(    url =                  .SetUrlKeyValue(  rh =  RequestHelper(  ctx =  JsonConvert.DeserializeObject<OrderDetail> }

不過,上面的還不夠,還需要在獲取實例的時候:

 

   APIOpts GetAPIOpts( user,   opts = (opts ==  opts = PolicyInjection.Create<APIOpts> 
   opts = PolicyInjection.Wrap<APIOpts>  }

 

 

好了,現在只需要在需要有授權的API方法上加上 NeedAuth 特性就行了,如果沒有授權,就會自動去授權,如果需刷新授權碼,就會自動刷新授權碼,代碼看起來清爽多了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved