目標:串接蝦皮訂單、標籤資訊,目前串接蝦皮 OpenAPI 2.0 版本,串接手冊
串接步驟:
前一篇已經將商店授權,接下來這個步驟取得 Access token(之後其他 API 都會需要)
要取得 access token,你會需要上一個步驟商店授權後獲得的 code、shop_id
格式 | HTTP/JSON |
---|---|
URL | 正式區:https://partner.shopeemobile.com/api/v2/auth/token/get |
測試區:https://partner.test-stable.shopeemobile.com/api/v2/auth/token/get | |
請求方式 | POST |
參數說明:蝦皮的 API 有兩種參數:公共參數、業務參數
公共參數:
參數 | 類型 | 說明 |
---|---|---|
sign | string | partner_id、api path、timestamp HMAC-SHA256 編碼,並用 partner key 當作加密 Key (可參授權商店那一篇) |
partner_id | int | Create App 產生的 partner_id (可參Create App 那一篇) |
timestamp | int | 時間戳,期限 5 min |
業務參數:(因為是 POST,所以要帶到 Body)
參數 | 類型 | 說明 |
---|---|---|
code | string | 授權商店後跳轉 url 中的 code,一次性,10 min 有效 |
partner_id | int | Create App 產生的 partner_id (可參Create App 那一篇) |
shop_id | int | 授權商店後跳轉 url 中的 shop_id |
main_account_id | int | 授權商店後跳轉 url 中的 main_account_id |
code 時效只有10 分鐘,如果過期就必須重新將商店授權
shop_id、main_account_id 二選一,授權商店只收到 shop_id 的話,就只要帶 shop_id 就好
以 PHP 為例:
// 正式區
$host='https://partner.shopeemobile.com';
$partnerId=xxxxxx;
$partnerKey='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // call api 時作為加密key
$timestamp=xxxxxxxxxxx;
$shop_id='xxxxxxxxxxxxx';
$$code='xxxxxxxxxxxxx';
// 取得 access token
function getAccessToken(
$host,
$partnerId,
$partnerKey,
$timestamp,
$shop_id,
$code
) {
$path='/api/v2/auth/token/get';
$base_string=strval($partnerId.$path.$timestamp);
$sign=hash_hmac('sha256',$base_string,$partnerKey,false);
$url=$host.$path.'
?partner_id='.$partnerId.'×tamp='.$timestamp.'&sign='.$sign;
$Payload='{
"code":"'.$code.'",
"partner_id":'.$partnerId.',
"shop_id":'.$shop_id.'
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $Payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
getAccessToken($host,$partnerId,$partnerKey,$timestamp,$shop_id,$code);
Response
參數 | 類型 | 說明 |
---|---|---|
request_id | string | 每個 request 的 id |
error | string | 錯誤碼,如果成功會是空的 |
refresh_token | string | refresh_token 之後重取 token 會需要,期限 30 天 |
access_token | string | 授權碼,可多次使用,4小時失效 |
expire_in | int | access token 的有效時間(秒) |
message | string | 錯誤訊息 |
merchant_id_list | int[] | request 有帶 main_account_id 才有,main account 下的所有 merchant_id |
shop_id_list | int[] | request 有帶 main_account_id 才有,main account 下的所有 shop_id |
有了 access_token 就可以打其他 API 了!
因為 access_token 四小時候就會過期,所以要用 refresh_token 去重取新的 access token
重取 access token 跟上一步取得 access token 是不一樣的 url,帶的參數也略有不同
公共參數:
格式 | HTTP/JSON |
---|---|
URL | 正式區:https://partner.shopeemobile.com/api/v2/auth/access_token/get |
測試區:https://partner.test-stable.shopeemobile.com/api/v2/auth/access_token/get | |
請求方式 | POST |
業務參數:(因為是 POST,所以要帶到 Body)
參數 | 類型 | 說明 |
---|---|---|
sign | string | partner_id、api path、timestamp HMAC-SHA256 編碼,並用 partner key 當作加密 Key (可參授權商店那一篇) |
partner_id | int | Create App 產生的 partner_id (可參Create App 那一篇) |
timestamp | int | 時間戳,期限 5 min |
上一步取得access token 是要帶 code,重取則是要帶 refresh_token,
參數 | 類型 | 說明 |
---|---|---|
refresh_token | string | 在取得 access token 時產生的 refresh_token |
partner_id | int | Create App 產生的 partner_id (可參Create App 那一篇) |
shop_id | int | 授權商店後跳轉 url 中的 shop_id |
merchant_id | int | 授權給開發者的 merchant_id |
shop_id、merchant_id 二擇一填入 |
Response
參數 | 類型 | 說明 |
---|---|---|
request_id | string | 每個 request 的 id |
error | string | 錯誤碼,如果成功會是空的 |
refresh_token | string | refresh_token 之後重取 token 會需要,期限 30 天 |
access_token | string | 授權碼,可多次使用,4小時失效 |
expire_in | int | access token 的有效時間(秒) |
partner_id | int | create App 取得的 partner_id |
shop_id | int | 授權 url 取得的 shop_id |
merchant_id | int | request 有帶 main_account_id 才有,main account 下的所有 merchant_id |
知道如何重取 token 後也大概熟悉了蝦皮 API 的模式,下一篇就可以來取得蝦皮的資料啦~
[中文版] OpenAPI 2.0 Overview
(更詳細可以參考蝦皮的手冊)