iT邦幫忙

0

蝦皮串接實作筆記-串接 API 蝦皮訂單

  • 分享至 

  • xImage
  •  

前言

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

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

前面幾篇已經取得 access token,接下來就可以來嘗試串接蝦皮資料了
這次會嘗試蝦皮訂單,在取得訂單資料之前,可以先參考一下蝦皮的 API Call Flows
看過 API Call Flows 會更了解蝦皮資料處理的順序跟邏輯


API Call Flows 的 Order Status Flow

https://ithelp.ithome.com.tw/upload/images/20220516/20136310VJine6qejO.png

橘色底是訂單的狀態,每個訂單狀態產生的原因都有在旁邊加以說明
其中幾個步驟的內容

1.訂單在確認付款後訂單狀態會由 UNPAID 轉成 READY_TO_SHIP
2.賣家或消費者刪除訂單後訂單狀態會變成 CANCELED; 消費者可以在訂單狀態變成 SHIPPED 之前取消訂單
4.在賣家安排物流後訂單狀態會變成 PROCESSED
5.物流單(託運單)被掃瞄後訂單狀態變成 SHIPPED
6.消費者要求退貨後訂單狀態變成 TO_RETURN

然後正常流程會是經過 1、4、5 這幾步驟,其他的話則是不一定


取得訂單清單 get_order_list

這個 API 可以讓你帶入需要的參數後取得你想要的訂單單號

格式 HTTP/JSON
URL • 正式區:https://partner.shopeemobile.com/api/v2/order/get_order_list
• 測試區:https://partner.test-stable.shopeemobile.com/api/v2/order/get_order_list
請求方式 GET

ps:

  • V2 大部分的 API 如果是取資料的話就會用 GET 的方式
  • 正式區跟測試區的 api path 其實都一樣,有差別的是前面的 base url

公共參數:

參數 類型 說明
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 string 期限 4 小時(可參取得 access token 那一篇)
shop_id int 商店 ID(可參授權商店那一篇)

業務參數:(因為是 GET,所以要帶到 url 的 query)

參數 類型 說明
time_range_field string 時間類別:create_time 或 update_time.
time_from int 起始時間,起始到結束不能超過 15 天
time_to int 結束時間,起始到結束不能超過 15 天
page_size int 一次 response 的筆數,最多 100
cursor string 超過 1 頁的,下一頁的數
order_status string 訂單狀態:UNPAID/READY_TO_SHIP/PROCESSED/SHIPPED/COMPLETED/IN_CANCEL/CANCELLED/INVOICE_PENDING
response_optional_fields string 回應的欄位,不填的話只會回應主要的欄位,其餘的欄位就不會有

以 PHP 為範例

// 取得訂單清單
function getOrderList(
	$host,
	$partnerId,
	$partnerKey,
	$timestamp,
	$access_token,
	$shop_id,
	$cursor,
	$page_size,
	$order_status
){
	$path='/api/v2/order/get_order_list'; 
	$base_string=strval($partnerId.$path.$timestamp.$access_token.$shop_id);
	$sign=hash_hmac('sha256',$base_string,$partnerKey,false);
		
	$time_from=strtotime('2022-05-01 11:00:00');
	$time_to=strtotime('2022-05-12 23:00:00');
	
	$paremeter='&time_range_field=create_time&time_from='.$time_from.'&time_to='.$time_to.'&page_size='.$page_size.'&order_status='.$order_status;

	$url=$host.$path.'?partner_id='.$partnerId.'&timestamp='.$timestamp.'&sign='.$sign.'&access_token='.$access_token.'&shop_id='.$shop_id.$paremeter;

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_HTTPHEADER, [
		'Content-Type: application/json'
	]);
	$res = curl_exec($ch);
	return $res;
}

串接完後會有清單的 order_sn,這樣就可以進一步去打 get_order_detail 來取得訂單詳細資料

小提醒:如果 response_optional_fields 沒有帶 order_status 就不會有喔
一開始想說怎麼不給完整的資料,但後來串接 get_order_detail 的時候,發現蠻不錯的耶,只會給你必要的資訊,需要的資訊再自己取得就好,不需要的就可以不用給,就不用接收一大坨的資料


小小心得:

經過前面商店授權、 access token 後就這次串接就相對簡單了,另外我覺得很棒的是蝦皮有提供 API Call Flows 這我覺得蠻不錯的,讓開發者可以很清楚知道實際操作跟 api 之間的關聯性!


參考資料:
API Call Flows
get_order_list


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

尚未有邦友留言

立即登入留言