京東聯盟對接


Skip to content

 

利用京東聯盟API獲取自定義推廣鏈接

By  管理員 2015年6月28日

本文創建於3年前,內容已經老舊,京東頁面也已經改版,請加群了解更多。

歡迎加入京東聯盟技術討論群(379480469):

JDUnion技術討論

 

接口沒有權限?請看本文京東聯盟接口調用時的權限問題

 

最新:利用聯盟API做的一個chrome擴展,京東商品佣金查看,可以直接在商品詳情頁查看佣金信息

 

【有困難的童鞋可以參考最新的文章http://www.coderecord.cn/jd-jos-api.html,把目前的http://devonios.com/app/jd/index.php這個demo的后台代碼都貼上了】

 

本文將簡單介紹下京東聯盟、京東宙斯兩個平台,以及如何利用京東宙斯平台的京東聯盟API來快速獲取自定義推廣鏈接。

關於京東聯盟

京東聯盟(去官網看看)是一個CPS模式的營銷平台,我們可以使用自己的網站放置聯盟的推廣鏈接為京東推銷產品,當用戶在我們的網站上點擊了某個推廣鏈接,並促成了真實的訂單,那么我們將獲得一定的佣金。

申請京東聯盟的條件是必須有一個在國內的備案網站,這個是重點哦。使用京東帳號登錄后,填寫網站信息,等待審核即可。

強烈推薦先看下聯盟的介紹和規則:http://media.jd.com/statc/help/hc.htm

關於京東宙斯

京東宙斯(去官網看看)是一個京東提供的API接口平台(基於oauth2驗證),通過使用API,我們可以自己創建各種網站、無線應用來讀取京東商品信息、活動信息等。商家可以通過API將自己的信息系統嵌入京東的各種服務系統。

本文將介紹如何使用京東宙斯中的京東聯盟API來獲取京東聯盟自定義推廣鏈接。

京東聯盟自定義推廣鏈接

自定義推廣鏈接,可以使用京東上各種商品,各種活動頁面的鏈接,其范圍非常的廣泛和實用。

在聯盟管理界面中,我們可以看到生成自定義推廣鏈接的操作非常簡單:

自定義推廣鏈接支持的鏈接有:京東首頁、商品detail頁、活動頁面、店鋪頁面。

點擊獲取代碼按鈕后,會生成一個union開頭的鏈接,我們把這個鏈接放置在網站上即可(這個鏈接只能在注冊的網站上使用,通過其他方式打開的無效)。

我們自己可以點擊這個鏈接,當我們自己在京東上購買商品時,也能獲得佣金哦!(詳細信息請看聯盟幫助

在京東宙斯平台注冊為京東開發者

我們可以在京東聯盟管理界面獲取推廣鏈接,但是每次都要登錄,非常的繁瑣!幸好,京東開放了京東聯盟API,我們可以使用代碼來自動獲取!

首先,先用您的京東帳號登錄京東宙斯平台(打開官網),然后填寫開發者基本信息,即可完成注冊開發者(不需要認證開發者),接着授權服務頁面申請京東宙斯服務。

完成后會顯示您已獲得授權的服務:

創建一個應用

當我們成為注冊開發者,授權京東宙斯服務后,我們需要創建一個應用,因為使用API是需要授權(access_token)的,而這個token是由我們創建的應用的APP key和App Secret生成,我們對API的請求記錄都會記錄在這個應用下面。

在創建應用界面,我們選擇【買家】【無線應用】:

完成后,我們還需要完善下應用信息,填寫下回調地址,回調地址的作用是在獲取訪問API的授權碼(accecc_token)時的一個中間地址:

下一步,然后提交審核,應用的狀態就變成上線運行中了,這時我們就可以正式開始使用應用證書中的APP key來獲取Token了!

使用APPkey和APPSecrect獲取Token

首先,奉上官網的文檔:http://jos.jd.com/doc/channel.htm?id=152,有能力的你可以自行研究下~

這里,我使用的是第一種:Authorization Code來獲取Token,好處是Token有效期能保持1年時間,每天30萬次請求!我們現在只需要獲取一次即可!

由於是基於Oauth2.0,所以流程很簡單,先使用APPKey獲取一個Code,然后結合Code再獲取Token!

Code的獲取是使用京東的登錄頁面,輸入您的京東帳號信息后,得到授權之后會回到我們的回調地址上,此時回調地址上會帶有一個code參數,這個參數就是我們需要的!

獲取Code的請求(GET請求)鏈接:

https://oauth.jd.com/oauth/authorize

有幾個參數需要帶上:

參數名稱 參數選項 描述
response_type 必須 此流程下,該值固定為code
client_id 必須 即創建應用時的Appkey(從JOS控制台->管理應用中獲取)
redirect_uri 必須 即應用的回調地址,必須與創建應用時所填回調頁面url一致
state 可選 狀態參數,由ISV自定義,頒發授權后會原封不動返回
scope 可選 權限參數,API組名串。多個組名時,用”,”分隔,目前支持參數值:read
view 可選

移動端授權,該值固定為wap;非移動端授權,無需傳值

整理后完整的請求鏈接為:

https://oauth.jd.com/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID& redirect_uri=YOUR_REGISTERED_REDIRECT_URI

只需要修改下client_id(即APP Key)和redirect_uri(回調地址,必須和創建應用時寫的一樣)即可。

使用瀏覽器訪問這個鏈接,會定向到登錄頁面:

登錄成功后,會跳轉到我們寫的回調地址上,此時我們可以獲得code參數值!

現在我們可以使用Code值來獲得token了。

獲取token的請求鏈接:

https://oauth.jd.com/oauth/token

參數有:

參數名稱 參數選項 描述
grant_type 必須 授權類型,此流程下,該值固定為authorization_code
code 必須 授權請求返回的授權碼
redirect_uri 必須 應用的回調地址,必須與創建應用時所填回調頁面url一致
client_id 必須 即創建應用時的Appkey(從JOS控制台->管理應用中獲取)
client_secret 必須 即創建應用時的Appsecret(從JOS控制台->管理應用中獲取)
state 可選 狀態參數,由ISV自定義,頒發授權后會原封不動返回

整理后完整的請求鏈接為:

https://oauth.jd.com/oauth/token?grant_type=authorization_code&client_id=YOUR_CLIENT_ID&
redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=GET_CODE&client_secret= YOUR_APP_SECRET

使用瀏覽器訪問這個鏈接,返回的是標准的json格式:

{
     "access_token": "您的Token值",
     "code": 0,
     "expires_in": 31622400,
     "refresh_token": "4a07031d-5122-4100-a60d-4ab982a55307",
     "time": "1435499129281",
     "token_type": "bearer",
     "uid": "您的京東帳號ID",
     "user_nick": "您的京東帳號昵稱"
}

自此一個理論流程完成了!現在我們用php自動下,即獲取code后自動發送獲取token的請求,然后顯示token內容。

PHP實現自動獲取token的簡單Demo

直接看代碼把,非常簡單哦,一個php文件:

<?php

$response_type = "code";
$grant_type = "authorization_code";
$client_id = "這里改為您的APP Key";
$client_secret = "這里改為您的APP Secret";
$redirect_uri = "這里改為你的回調地址";
$state = "jdunion";
$codeurl = 'https://oauth.jd.com/oauth/authorize';
$tokenurl = "https://oauth.jd.com/oauth/token?";

$code = $_GET["code"];

if ($code != "")
{
  $fields = [
      "grant_type" => urlencode($grant_type),
      "client_id" => urlencode($client_id),
      "redirect_uri" => urlencode($redirect_uri),
      "code" => urlencode($code),
      "state" => urlencode($state),
      "client_secret" => urlencode($client_secret)
  ];

  $fields_string = "";
  foreach($fields as $key=>$value) {
     $fields_string .= $key.'='.$value.'&';
  }
  rtrim($fields_string, '&');

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $tokenurl.$fields_string);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $result = curl_exec($ch);
  curl_close($ch);

  echo "Response:<br />".mb_convert_encoding($result,"UTF-8","GBK");

}
else
{
  header("Location: ".$codeurl."?response_type=".$response_type."&client_id=".$client_id."&redirect_uri=".$redirect_uri."&state=".$state);
}

您只需要將開頭的幾個值修改為自己的,然后訪問這個php文件。

使用京東聯盟API獲取自定義推廣鏈接

得到token后,妥善保管,現在開始的每個API請求都需要帶上這個token值。

首先,我們要知道的是,訪問API有個BaseUrl,這是整個宙斯(JOS)平台所有API的主鏈接,只是不同API的參數不同:

https://api.jd.com/routerjson

JOS API里面有兩種參數大類,一個是系統參數,即APP Key、Token這些驗證信息,這是所有API都通用的,另一個是應用參數,即不同API它有自己的參數列表。

系統參數有下面這些:

名稱

類型

必須

描述

method

String

API接口名稱

access_token

String

采用OAuth授權方式為必填參數

app_key

String

應用的app_key

sign

String

簽名

timestamp

String

時間戳,格式為yyyy-MM-ddHH:mm:ss,例如:2011-06-16 13:23:30。京東API服務端允許客戶端請求時間誤差為6分鍾

v

String

API協議版本,可選值:2.0.

其中的method參數為API接口的名稱,京東聯盟API接口的名稱是:

 

jingdong.service.promotion.getcode

sign參數是對完整的請求鏈接md5加密后的字符串,加密規則如下:

  1. 所有參數名稱按字母先后排序
  2. 將參數名與參數值拼起來,去掉&和=兩個字符
  3. 在第2步中得到的字符串兩端拼上App Secret值
  4. 對第3步中得到的字符串計算md5
  5. 把計算得到的MD5值轉為大寫形式
  6. 最后這個大寫的MD5值即為我們要使用的sign參數的值

京東聯盟API接口的應用參數有下面這些:

名稱 類型 必須 示例值 描述
promotionType  Number   7 推廣類型 1:商品推廣,2:店鋪推廣,3:專櫃推廣,4:頻道推廣,7:自定義推廣 系統目前暫時只支持自定義推廣。 
materialId  String   http://www.jd.com 物料ID 1、推廣類型是商品推廣,推廣物料ID對應着”skuid” 2、推廣類型為店鋪推廣,推廣物料ID對應着”shopID” 3、推廣類型為頻道頁推廣,推廣物料ID對應着”頻道頁類目ID” 4、推廣類型為自定義推廣時,則該物料ID對應着”着陸頁URL” 5、推廣類型為專櫃推廣時,則該物料ID對應着“類目ID_類目ID_類目ID…” 
unionId  Number    聯盟ID(京東客ID) 
subUnionId  String    子聯盟Id(不能超過16個字符) 
siteSize  String    推廣位尺寸,具體尺寸見FQA 
siteId  String    推廣位ID 
channel  String    推廣渠道 PC:pc推廣,WL:無線推廣 
webId  String    網站ID 
extendId  String    擴展ID 
ext1  String    擴展字段1 

promotionType參數這里目前只支持自定義推廣,值為7。

materiaId參數為我們需要轉換的京東網站鏈接(推廣類型4,自定義推廣),比如京東首頁。

unionID參數為您的京東聯盟帳號的ID,這個可以登錄京東聯盟網站后查看到。

webId參數為您在京東聯盟網站注冊的網站編號,也可以在聯盟網站上找到。

知道這些參數后,我們需要開始構建請求的鏈接了。

首先應用參數在使用時需要構建成json格式拼接在BaseUrl上,使用的參數名叫:

 

360buy_param_json

php實例:

 

$_360buy_param_json =
'{"channel":"'.$channel.'","materialId":"'.$sourceurl.'","promotionType":'.$type.',"unionId":"'.$unionId.'",
  "webId":"'.$webId.'"}';

現在根據以上系統和應用參數信息,拼接成完整的請求鏈接,使用瀏覽器請求即可,返回的格式是json。

下面是我寫好的php代碼:

<?php

$sourceurl = $_GET["u"];

if($sourceurl == ""){

  echo "error:請輸入url參數";
  exit();
}

$method = "jingdong.service.promotion.getcode";
$channel = "PC";
$type = 7;
$unionId = "您的京東聯盟ID";
$webId = "您在京東聯盟注冊的網站的ID";
$token = "您的Token";
$appkey = "您的APPKey";
$appSecret = "您的APPSecret";
$v = "2.0";
$time = date('Y-m-d H:i:s',time());

$baseurl = "https://api.jd.com/routerjson?";

//應用參數,json格式
$_360buy_param_json =
'{"channel":"'.$channel.'","materialId":"'.$sourceurl.'","promotionType":'.$type.',"unionId":"'.$unionId.'",
  "webId":"'.$webId.'"}';

//系統參數
$fields = [
    "360buy_param_json" => urlencode($_360buy_param_json),
    "access_token" => urlencode($token),
    "app_key" => urlencode($appkey),
    "method" => urlencode($method),
    "timestamp" => urlencode($time),
    "v" => urlencode($v)
];

$fields_string = "";

//用來計算md5,以appSecret開頭
$_tempString = $appSecret;

foreach($fields as $key=>$value)
{
    //直接將參數和值拼在一起
    $_tempString .= $key.$value;
    //作為url參數的字符串
    $fields_string .= $key.'='.$value.'&';
}

//最后再拼上appSecret
$_tempString .= $appSecret;

//計算md5,然后轉為大寫,sign參數作為url中的最后一個參數
$sign = strtoupper(md5($_tempString));

//加到最后
$fields_string .= ("sign=".$sign);

//最終請求的url
$link = $baseurl.$fields_string;

//發送get請求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);

//轉換為json
$jsonArray = json_decode($result,true);
$queryjs_result= $jsonArray["jingdong_service_promotion_getcode_responce"]["queryjs_result"];

$url = json_decode($queryjs_result,true);
echo urldecode($url["url"]);
?>

修改文件中的幾個參數值,然后訪問這個php文件,帶上參數:u=京東鏈接(比如u=http://www.jd.com)。

最后頁面將直接輸出union打頭的推廣鏈接。

結束

到目前為止,我們已經有了一個php文件,通過參數u=京東鏈接形式,即可快速的得到推廣鏈接。

注意,得到推廣鏈接,直接訪問它是沒有任何效果的,需要將鏈接添加在京東聯盟注冊的網站中去,從這個網站點擊跳轉才能生效。

查看Demo:http://devonios.com/app/jd/index.php

Category:  OpenAPI 標簽: apijosopenapiphp京東宙斯京東聯盟宙斯
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM