iT邦幫忙

0

蝦皮串接實作筆記-Access Token

  • 分享至 

  • xImage
  •  

前言

目標:串接蝦皮訂單、標籤資訊,目前串接蝦皮 OpenAPI 2.0 版本,串接手冊
串接步驟:

  1. Create App:建立串接的帳號
  2. Authorize Shop:商店授權
  3. Access Token:取得串接用需要的 access token
  4. 串接 API

前一篇已經將商店授權,接下來這個步驟取得 Access token(之後其他 API 都會需要)

要取得 access token,你會需要上一個步驟商店授權後獲得的 code、shop_id


取得 Access Token

格式 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 有兩種參數:公共參數、業務參數

  • 公共參數:要帶到 url 的 query 上
  • 業務參數:依請求方式 POST、GET 帶到 BODY 或 Query

公共參數:

參數 類型 說明
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.'&timestamp='.$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 (Refresh 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
(更詳細可以參考蝦皮的手冊)


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言