京東JOS API 接入使用筆記

商戶開設了京東店、淘寶店,最近打算使用京東物流,需要使用京東倉庫(京東店的訂單使用京倉發貨,淘寶等其他店使用京東雲倉)發貨,所以得從自家的ERP與京東滄海(ECLP)API對接,實現收發存。

首先得在JOS上開通京東自研應用。開通過程有一個回調地址要填,如果沒有外網服務器,可以使用ngrok虛擬一個外網地址實現通信。ngrok代理開通後會給一個網址,類似http://55d35ecb.ngrok.io,填回調地址的時候,要注意後面帶上接收京東返回數據的頁面或方法,例如:http://55d35ecb.ngrok.io/js_callback.php,jd_callback.php頁面,就要寫獲取到數據後的操作。

Jos開通自研應用後,會獲取APP_KEY和APP_SCRET。

接入的代碼實現過程:

1、獲取ACCESS_TOKEN:

      access_token是調用京東API的憑證,所以第一步是獲取這個。獲取這個,分兩步走:

      1.1、先要獲取CODE:按照京東文檔的指示,在自己的文檔生成鏈接地址,https://oauth.jd.com/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&state=YOUR_CUSTOM_CODE,使用戶點擊這個鏈接後,會引導到商戶授權頁面(類似QQ登陸授權),授權完畢後,會按給定的回調地址,將code碼返回。

      1.2、獲取access_token:在jos_callback.php文件裏面獲取code,$_GET['code'],將獲取的code、APP_KEY和APP_SCRET,組裝成下面的URL,

https://oauth.jd.com/oauth/token?grant_type=authorization_code&client_id=YOUR_CLIENT_ID&

redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=GET_CODE&state=YOUR_CUSTOM_CODE&client_secret= YOUR_APP_SECRET

      然後,header("Location:".$toUrl);不出錯的話,就能拿到access_token了。獲取後,我是直接手工存到數據庫,因爲這個token可用時間長,不會經常要求獲取。當然也可以根據grant_type或response_type參數做對應處理。如果是response_type=code,就做進一步獲取access_token處理,如果grant_type=authorization_code,就將獲取到的JSON保存到數據庫。

    注意這裏的YOUR_REGISTERED_REDIRECT_URI,這個地址最好跟JOS平臺上設置的一樣。

 

2、調用JOS API

  調用API之前,首先要把SDK下載下來。https://jos.jd.com/doc/channel.htm?id=285

      我使用的到的是滄海API,https://jos.jd.com/api/list.htm?id=138,測試可以調用獲取事業部信息,這個簡單。https://jos.jd.com/api/detail.htm?apiName=jingdong.eclp.master.queryDept&id=941。

      先頁面生成調用路徑,比如:<a href="/jd/queryDept.php" >查看事業部信息</a>。

     在queryDept.php裏面,按照它的調用實例,把變量填好。其中SERVER_URL是API調入入口,按照京東文檔提供的地址設置就行:define(SERVER_URL,'https://api.jd.com/routerjson ');

$c = new JdClient();
$c->appKey = appKey;
$c->appSecret = appSecret;
$c->accessToken = accessToken;
$c->serverUrl = SERVER_URL;
$req = new EclpMasterQueryDeptRequest();
//$req->setDeptNos( "jingdong" ); //這個接口可以不設置參數調用,非必需。
$resp = $c->execute($req, $c->accessToken);

$resp是調用結果,根據需要做進一步處理。

 

3、京東SDK有些bug,調用如果返回錯誤,日記記錄會有一些問題。要進一步調試。現在不知道解決沒有。我用的是2017年6月版本。一開始調用的時候,會出現商戶沒有綁定權限的問題,例如405問題,(405 : "code":"405","error_description":"用戶[xxx]無權給app[C05EBAAB019CC6E91D44D45834ER]授權"(請將報錯信息,包含用戶名及appkey發送至jos#jd.com申請綁定授權關係)。這時需要京東的客服協助。

 

4、關於返回值stdclass類的使用:京東正確的返回值是stdclass類型,用PHP訪問時,就跟訪問數組一樣,$rsl_code=$resp->code;要將返回的JSON數組轉換爲php數組,使用先編碼成標準的JSON格式,再用JOSN_decode解碼,解碼是,要帶第二個參數true,即:json_decode(json_encode($resp->goodsInfoList),true)

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