這裡只是初期階段筆記,如果要做成在每筆訂單點了下載還要另外開發
先到宅急便網站申請API授權碼
https://www.takkyubin.com.tw/YMTContract/aspx/Login.aspx (取得印單API授權碼)
新增程式碼片段
// 在 WordPress 中使用 Shortcode 來發送 API 請求
function send_api_request_shortcode() {
// HTML 表單和 JavaScript
$html = '<form id="apiRequestForm">
<label for="jsonData">請輸入 JSON 資料:</label><br>
<textarea id="jsonData" name="jsonData" rows="4" cols="50"></textarea><br><br>
<input type="button" value="執行" onclick="sendRequest()">
</form>
<script>
// 定義 sendRequest 函數
function sendRequest() {
// 取得輸入的 JSON 資料
var jsonData = document.getElementById("jsonData").value;
// 執行 API 請求
var xhr = new XMLHttpRequest();
var url = "https://egs.suda.com.tw:8443/api/Egs/PrintOBT";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
// 處理回應
var data = JSON.parse(xhr.responseText);
// 在這裡你可以根據需要處理回應資料,例如將其顯示在頁面上
console.log(data);
// 從回應中獲取 FileNo
var fileNo = data.Data.FileNo;
// 發送下一個 API 請求
var downloadUrl = "https://egs.suda.com.tw:8443/api/Egs/DownloadOBT";
var downloadData = {
"CustomerId": "youid",
"CustomerToken": "your token",
"FileNo": fileNo
};
var downloadXhr = new XMLHttpRequest();
downloadXhr.open("POST", downloadUrl, true);
downloadXhr.setRequestHeader("Content-Type", "application/json");
downloadXhr.responseType = "blob"; // 設置回應類型為二進位資料流
downloadXhr.onreadystatechange = function () {
if (downloadXhr.readyState === 4 && downloadXhr.status === 200) {
// 處理回應,下載 PDF 檔案
var blob = new Blob([downloadXhr.response], { type: "application/pdf" });
var link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = "downloaded_obt.pdf";
link.click();
console.log("託運單下載成功");
} else if (downloadXhr.readyState === 4) {
// 處理錯誤
console.error("託運單下載失敗:", downloadXhr.responseText);
}
};
downloadXhr.send(JSON.stringify(downloadData));
} else if (xhr.readyState === 4) {
// 處理錯誤
console.error("Request failed with status code:", xhr.status);
}
};
xhr.send(jsonData);
}
</script>';
// 回傳 HTML
return $html;
}
add_shortcode('send_api_request', 'send_api_request_shortcode');
CustomerToken 即宅急便網站申請的API授權碼
在頁面執行shortcode
在程式碼片段新增上面的程式後,在頁面執行shortcode
[send_api_request]
完成後,在頁面就能看到一個空白輸入框,輸入框填入json值
{
"CustomerId": "youid",
"CustomerToken": "your token",
"PrintType": "01",
"PrintOBTType": "01",
"Orders": [
{
"OBTNumber": "",
"OrderId": "YourOrderId1",
"Thermosphere": "0001",
"Spec": "0001",
"ReceiptLocation": "01",
"RecipientName": "小米",
"RecipientTel": "061234567",
"RecipientMobile": "0912345678",
"RecipientAddress": "台南市永華路1號",
"SenderName": "測試公司",
"SenderTel": "061234568",
"SenderMobile": "0912345679",
"SenderZipCode": "70523K",
"SenderAddress": "台南市永華路2號",
"ShipmentDate": "20240410",
"DeliveryDate": "20240411",
"DeliveryTime": "01",
"IsFreight": "Y",
"IsCollection": "N",
"CollectionAmount": 0,
"IsSwipe": "N",
"IsDeclare": "N",
"DeclareAmount": 0,
"ProductTypeId": "0001",
"ProductName": "商品名稱",
"Memo": "備註"
},
{
"OBTNumber": "",
"OrderId": "YourOrderId2",
"Thermosphere": "0001",
"Spec": "0001",
"ReceiptLocation": "01",
"RecipientName": "大米",
"RecipientTel": "061234569",
"RecipientMobile": "0912345677",
"RecipientAddress": "台南市永華路3號",
"SenderName": "測試公司",
"SenderTel": "061234568",
"SenderMobile": "0912345679",
"SenderZipCode": "70523K",
"SenderAddress": "台南市永華路2號",
"ShipmentDate": "20240410",
"DeliveryDate": "20240411",
"DeliveryTime": "01",
"IsFreight": "Y",
"IsCollection": "N",
"CollectionAmount": 0,
"IsSwipe": "N",
"IsDeclare": "N",
"DeclareAmount": 0,
"ProductTypeId": "0001",
"ProductName": "商品名稱",
"Memo": "備註"
}
]
}
執行後就會下載pdf檔
其實注意事項及備註
json在傳出跟傳入的連結,在正式環境務必要把資安做好,絕對不能在前台直接取得,避免客戶個資外流
備註:想要知道json在執行的情況,可以在瀏覽器按F12,再點選主控台即可看到交換的流程動作
上面的環境為測試環境,如果需要文件及細節可以詢問宅急便的工程師,原則上我也只是起個頭,要做出正式的流程,是要能做到在管理訂單時可以取號及下載託運單,或許不久就會有人釋出宅急便的WoooCommerce的外掛了 XD