淘寶SKU介面 - 實時同步獲取淘寶商品的SKU資料
筆記曾經做過購物商城系統,其中最頭疼的無非是商品庫的維護難題。對於剛起步的平臺,流量不足,商家根本沒興趣參與開店之類的,更何況每天為商家貢獻不了幾單,這就造成商品的數量不多,商品的質量也就沒有保證了。於是最終反饋到使用者,就覺得這平臺商品數量少,久而久之前期花錢推廣的使用者越來越少,最後不了了之。
既然有這篇文章,那就說明筆者有辦法解決商品庫這個難題。大家都知道淘寶天貓的商品是全網最為豐富的,如果我們可以通過資料介面對接,將其商品採集到我們自己的商城系統中,那不就解決了商品庫的難題嗎?其實對於採集商品的過程是因人而異的,比如自己商城的定位不同,就需要不同的採集方案。最典型的例如阿里媽媽平臺,直接下載阿里媽媽官方打包好的商品列表匯入自己的商城系統中即可,而且列表中的商品是通過阿里媽媽官方篩選的,商品質量和服務是沒問題的。
在大家採集到的淘寶或天貓商品的結果中,各種能夠渲染出完整商品描述的資訊並不完整,但有個共同點:一定會有商品ID,那本文就是基於商品ID的基礎上,如果利用第三方提供的介面渲染出完整的商品描述。這其中包括SKU庫存、價格資訊,詳情圖、評價晒單等資訊。下面我們一步步來看看如何利用資料介面來對接淘寶天貓商品的。
本文先講實時同步獲取淘寶商品的SKU資料。
先看這裡的基本介面資訊:
請求地址:https://taoapi.ndxiu.com/service/get_sku.php
請求方式:get
請求示例:{tid:'淘寶商品id',appkey:'專屬appkey',sign:'簽名引數',noncestr:'隨機字串'}
建議場景:為了保證介面呼叫效率,建議在客戶端使用ajax方法發起呼叫。
請求引數資訊 SKU介面返回的資訊上圖是SKU介面返回的資訊,可以看出包括商品主圖、標題等基礎資訊和SKU資料資訊,SKU資料中包括了sku_id、各個sku_id的庫存數量、價格以及sku對應的圖片等資訊。有了這些資料就可以通過jq構造出SKU選擇功能了。例如下面的案例:
實時同步淘寶的SKU截圖
上圖的效果就是,當用戶點選購買按鈕彈出SKU選擇框,顯示出了所有SKU選項,使用者可以自由選擇,各個SKU的庫存、價格、圖片都會實時變化。
服務端生成簽名引數(以PHP為例):
//這裡是您自己的鑑權程式碼,通過鑑權後才開始下面的簽名
$appkey = 'tbw******'; //這裡填寫您的appkey
$appsecret = '******'; //這裡填寫您的appsecret
$noncestr = getNonceStr(6); //生成隨機字串
$signature = getSignature($appkey,$appsecret,$noncestr,$tid); //生成簽名
echo json_encode(array('tid'=>$tid,'appkey'=>$appkey,'sign'=>$signature,'noncestr'=>$noncestr)); //輸出json字串到客戶端
//獲取隨機字串的函式
function getNonceStr($length){
$chars = 'abcdefghijklmnopqrstuvwxyz';
$str = '';
for($i = 0; $i < $length; $i++){
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str.date('dHi'); //附帶上時間,共生成12位長度的隨機字串
}
//通過md5加密生成簽名的函式
function getSignature($appkey,$appsecret,$noncestr,$tid){
$string = $appkey.$appsecret.$noncestr.$tid;
$md5 = md5($string);
return $md5;
}
何時開始簽名?當您的使用者訪問商品詳情頁並點選“立即購買”或“加入購物車”時發起簽名,使用 getJSON 方法從您自己的伺服器獲取,也就是當您需要呼叫本站SKU介面時才開始獲取簽名,如此可以最大限度保證您的簽名引數不被他人使用。再舉個例子,您可以在服務端簽名程式碼的頭部加入 Referer 白名單驗證(為了防止偽造Referer,應同時使用SessionID進行驗證),或者直接使用您自己的鑑權方法(比如使用者目前是登入狀態的情況下才能獲取簽名),以避免簽名介面被惡意呼叫。
值得注意的是,每次生成的簽名只能呼叫一次SKU介面,不能複用。
客戶端使用ajax發起呼叫:
function getSku(tid,appkey,sign,noncestr){ //傳入的實參建議不要暴露給全域性
$.ajax({
type: 'GET', //使用GET請求方式
async: false,
url: 'https//taoapi.ndxiu.com/service/get_sku.php',
data: {
tid:tid,
appkey:appkey,
sign:sign,
noncestr:noncestr
},
dataType: 'jsonp', //解決跨域呼叫問題
jsonp: 'callback',
jsonpCallback: 'showSku',
success: function(jsonp){
if(!$.isEmptyObject(jsonp.skuBase)){
//生成並顯示SKU選擇頁
}else{
//不存在SKU,則直接轉到下單頁
}
},
error: function(){}
});
}
以上的get_sku介面需要前往taoapi.ndxiu.com註冊申請。
筆者的另外文章:
1、如何獲取淘寶天貓商品的詳情圖資料
2、實時獲取淘寶天貓商品的評價晒單資料
3、實時快速獲取物流進度資訊
4、使用JQ開發仿淘寶SKU選擇器(待更)