1.API 文件
2.準備
首先要向 yahoo 提出申請 API,申請成功後會拿到 API Key 和 Secret,
API Key 就像帳號一樣,Shared Secret 是將資料編碼。
API Key 就像帳號一樣,Shared Secret 是將資料編碼。
3.製作簽章及使用API
製作簽章的方法在 Yahoo API 文件就有說明,
直接來實作抓取 Yahoo 商城分類,
在文件中找到 API > Product API > /v1/MallCategory/Get
固定的網址是 http://tw.ews.mall.yahooapis.com/stauth (後面加上功能名稱)
直接來實作抓取 Yahoo 商城分類,
在文件中找到 API > Product API > /v1/MallCategory/Get
固定的網址是 http://tw.ews.mall.yahooapis.com/stauth (後面加上功能名稱)
YahooAPI class
/* * @author wsxrtgvbuikm@gmail.com * 首先要先 define 以下幾個變數: * 1.YAHOO_API_KEY : YAHOO申請的KEY * 2.YAHOO_API_SECRET : YAHOO申請的SECRET * 3.YAHOO_API_ID : YAHOO的帳號 (測試過其實亂打都過) * 4.YAHOO_API_NAME : YAHOO的名稱 (通常是中文) * 5.YAHOO_API_URL : http://tw.ews.mall.yahooapis.com/stauth */ header("Content-Type: text/html; charset=utf-8"); define('YAHOO_API_KEY','輸入API KEY'); define('YAHOO_API_SECRET','輸入API_SECRET'); define('YAHOO_API_ID','輸入ID'); define('YAHOO_API_NAME','輸入名稱'); define('YAHOO_API_URL','http://tw.ews.mall.yahooapis.com/stauth'); class YahooAPI { public function yahoo_api($url,$arr=array(),$other_val=array()){ $url = YAHOO_API_URL.$url; $auth_arr = array('ApiKey'=>YAHOO_API_KEY, 'TimeStamp'=>time(), 'Id'=>YAHOO_API_ID, 'Name'=>YAHOO_API_NAME, 'Format'=>'json' ); $request_arr = array_merge($auth_arr,$arr); // 會有編碼的問題所以用foreach //$request = urldecode(http_build_query($request_arr)); $request = ''; foreach($request_arr as $key=>$val){ $request .= $key.'='.$val.'&'; } $request = substr($request,0,-1); // $request用SECRET sha1加密 $signature = hash_hmac('sha1',$request,YAHOO_API_SECRET); $request_arr['Signature'] = $signature; // 加入其他參數像是上傳圖片就不包含在加密範圍 $request_arr = array_merge($request_arr,$other_val); $this->request = $request_arr; $r = $this->curl_file_get_contents($url,$request_arr); $arr = json_decode($r,true); return $arr; } public function curl_file_get_contents($url,$request){ $ch = curl_init(); $timeout = 5; $cookie = "cookieLangId=zh_tw;"; curl_setopt ($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt ($ch, CURLOPT_POST, true); // 啟用POST curl_setopt ($ch, CURLOPT_POSTFIELDS, $request); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); $r = curl_exec($ch); curl_close($ch); return $r; } }
取得分類
include("YahooAPI.php"); $Yahoo = new YahooAPI(); // 取得 YAHOO 商城分類 $url = '/v1/MallCategory/Get'; $arr = array('CategoryId'=>$CategoryId); $r = $Yahoo->yahoo_api($url,$arr); print_r($r);
上傳商品範例
在文件上有標記(Require)一定要填,
有些是要用API先去查代碼,其他(Optional)沒有傳值就不要出現不然會失敗..
有些是要用API先去查代碼,其他(Optional)沒有傳值就不要出現不然會失敗..
$url = '/v2/Product/SubmitMain'; $arr = array('SaleType'=>'Normal', // 商品銷售方式 'SaleTypeInfo'=>'Normal', // 商品銷售資訊 'ProductName'=>$rs['NAME'], // 商品名稱 'MallCategoryId'=>$rs['YAHOO_CAT'], // 商城商品分類代號 'StoreCategoryId'=>$rs['YAHOO_STORE_CAT'], // 商品歸類 'MarketPrice'=>$rs['MARKET_PRICE'], // 商品市價 'SalePrice'=>$rs['PRICE'], // 網路價 'CostPrice'=>$rs['COST'], // 成本價 'MaxBuyNum'=>$rs['LIMIT_NUM'], // 最高購買數量 'ShortDescription'=>$rs['DESC'], // 商品簡述 'LongDescription'=>$rs['CONTENT'], // 商品介紹 'PayTypeId'=>'1', // 付款方式代號 'PayTypeId'=>'2', // 付款方式代號 'PayTypeId'=>'4', // 付款方式代號 'PayTypeId'=>'8', // 付款方式代號 'PayTypeId'=>'9', // 付款方式代號 'PayTypeId'=>'10', // 付款方式代號 'ShippingId'=>'1', // 物流方式代號 'ShippingId'=>'2', // 物流方式代號 'IsTaxFree'=>'0', // 此商品是否為免稅商品 'SpecTypeDimension'=>'0', // 商品規格 'CustomizedMainProductId'=>$rs['PRODUCT_ID'], // 商品主貨號 'Stock'=>$rs['STOCK'], // 商品庫存量 'SaftyStock'=>$rs['SAFYSTOCK'], // 商品庫存最低警告量 ); $return = $Yahoo->yahoo_api($url,$arr);
上傳圖片
$url = '/v1/Product/UploadImage'; $arr = array('ProductId'=>$productId, // 商品ID 'MainImage'=>'ImageFile1', // 第一張圖 可一次傳多張 'Purge'=>'true' // 是否保留原圖 ); // 商品圖系統路徑 - 因為這個不加入簽章所以要另外放 // 前面加上@ CURL 就會當成檔案上傳 $request_arr['ImageFile1'] = '@'.HTTP_REAL_PATH.$rs['IMAGE']; $return = $this->yahoo_api($url,$arr,$request_arr);