虾皮串接实作笔记-串接 API 虾皮物流标签

前言

目标:串接虾皮订单、标签资讯,目前串接虾皮 OpenAPI 2.0 版本,串接手册
串接步骤:

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

前篇有取得订单的资料了,这次要来尝试串接物流单的 API
在取得物流单前,一样可以先参考一下虾皮的 API Call Flows 里的 Arrange Shipment & Get TrackingNo & Print AirwayBill,有清出列出取得物流单的步骤


API Call Flows Arrange Shipment & Get TrackingNo & Print AirwayBill

这次的取得物流单的前提是,虾皮已经帮我产生物流单号,所以这张图我们只看下半部即可
https://ithelp.ithome.com.tw/upload/images/20220519/20136310MjeuoYceZ6.png

最上面的菱形区块是在问是否要自己设计物流单,如果是的话就走左边,打 get_shipping_document_info 那个 API,如果不是的话就走右边然後按照顺序执行那四个 API
说明一下,这两者的差异:
方法 1(左边):打一个 API,你会获得物流单上的所有资讯。
方法 2(右边):打完四个步骤的 API,你获得可以直接拿来列印的物流单档案。


方法1 - 取得物流单资讯 get_shipping_document_info

这个 API 可以让你取得物流单的资讯

格式 HTTP/JSON
URL • 正式区:https://partner.shopeemobile.com/api/v2/logistics/get_shipping_document_info
• 测试区:https://partner.test-stable.shopeemobile.com/api/v2/logistics/get_shipping_document_info
请求方式 GET

公共参数:

参数 类型 说明
sign string access_token、partner_id、api path、shop_id、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)

参数 类型 说明
order_sn string 虾皮的订单单号,必填
package_number string 虾皮的订单包裹编号,非必填

以 PHP 为例

// 取得托运单资讯
function getShippingDocumentInfo(
	$host,
	$partnerId,
	$partnerKey,
	$timestamp,
	$access_token,
	$shop_id,
	$order_sn
){
	$path='/api/v2/logistics/get_shipping_document_info'; 
	$base_string=strval($partnerId.$path.$timestamp.$access_token.$shop_id);
	$sign=hash_hmac('sha256',$base_string,$partnerKey,false);
	
	$paremeter='&order_sn='.$order_sn;
	$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;
}

串接成功後你就会收到物流单对应的资讯,超商物流单上的条码是已经编译好的,只要依照各个物流单的规范把资讯对应到相对的位置就可以自制物流单了!


方法2 - 取得物流单

方法 2 直接取得物流单会需要打四个 API:

URL 说明 请求方式
get_shipping_document_parameter 取得建议的物流单种类 台湾的话有两种:- NORMAL_AIR_WAYBILL 普通列印(一页可以多张标签) -THERMAL_AIR_WAYBILL 热感列印(一页只有一张标签) POST
create_shipping_document 建立物流单 注意:要在 TrackingNo 产生後才能建立,如果状态已经变成 SHIPPED 就不能再建立 POST
get_shipping_document_result 取得建立物流单的结果 结果有 READY, FAILED, PROCESSING POST
download_shipping_document 下载物流单 get_shipping_document_result 结果是 READY 才可以下载 POST

(其他详细内容也可以参考虾皮的【FAQ】)

如果没有 create_shipping_document 直接去打 download_shipping_document 是不会有档案的
所以要乖乖照 API Call Flows 的流程走才会顺利取得物流单
以 7-11 店到店为例,download_shipping_document 最後会跳到平常用店到店要列印物流单的画面,这样你就可以直接列印物流单了


小小心得:

方法 1 相对来说自由度高一些,因为只会有资讯,你可以用那些资讯排版,然後再自由加上一些你想加的资讯,方法 2 的话,可以直接列印物流单,不用自己排版,相对来说方便一点。
总之两种方法都各有好处,就看自己要怎麽利用了。

个人觉得虾皮的 API 除了前面授权取 access token 时需要花一点时间研究,後面串接资料的时有感受到开发者的贴心,请求的参数很弹性,取得资料的栏位也可以自行决定,另外手册的范例、说明也都蛮清楚,就连印个标签也有两种方式让你选呢!


参考资料:

API Call Flows
【FAQ】Open API_物流相关问题


<<:  crontab 自动检测服务关闭,自动开启- 相关笔记 20220519

>>:  资安学习路上-picoCTF 解题(crypto)2

Leetcode 挑战 Day 06 [66. Plus One]

66. Plus One 今天这一题相对单纯、简单一些,但当中也有一些小技巧和观念,还是蛮值得一看的...

[Day 22] Edge Impulse + BLE Sense实现唤醒词辨识(下)

=== 书接上回 [Day 21] Edge Impulse + BLE Sense实现唤醒词辨识(...

Day16:今天来聊一下如何使用njRAT RAT Trojan控制Windows电脑攻防

攻击者会使用Trojan horses(木马程序)来诱骗使用者在电脑上执行预先设计的操作, 一旦木马...

Day 21: 人工智慧在音乐领域的应用 (AI作曲-基因演算法四 掌握生杀大权-Interactive Fitness Function)

昨天我们聊完了子代出生後所要面临的第一个挑战 - 突变。 我们接着来聊聊整个基因演算法里面最重要的一...

Day 21 Azure machine learning: Upload data- 自己的资料自己传

Azure machine learning: Upload data- 自己的资料自己传 要做汇率...