前面有介紹把訂單匯出 ( WooCommerce訂單管理 REST API ) => 用API取得宅急便託運單資訊 ( 使用Python串接黑貓宅急便 )
接下來的最後一步,就是回填
作法
import json import requests # ------------------------------- # WooCommerce 商店設定(移除 store_url 中嵌入的認證) # ------------------------------- store_url = "https://yoursite" consumer_key = "ck_key" consumer_secret = "cs_secret" # ------------------------------- # 讀取 tcat.json 檔案,取得印單 API 回應資料 # ------------------------------- with open("tcat.json", "r", encoding="utf-8") as f: tcat_data = json.load(f) orders_data = tcat_data.get("response", {}).get("Data", {}).get("Orders", []) if not orders_data: print("在 tcat.json 中找不到 'response' -> 'Data' -> 'Orders' 資料,請確認格式。") exit(1) # ------------------------------- # 逐筆處理每筆訂單,並回寫 OBTNumber 到 WooCommerce 訂單的 ywot_tracking_code 欄位 # ------------------------------- for order in orders_data: obt_number = order.get("OBTNumber") if not obt_number: print("訂單缺少 OBTNumber,跳過。") continue # 從 Picking.Details 取得所有 OrderId(若有重複,只更新一次) picking_details = order.get("Picking", {}).get("Details", []) order_ids = {detail.get("OrderId") for detail in picking_details if detail.get("OrderId")} if not order_ids: print(f"OBTNumber {obt_number} 未找到任何 OrderId,跳過。") continue for order_id in order_ids: update_payload = { "meta_data": [ { "key": "ywot_tracking_code", "value": obt_number } ] } # 使用 URL Query 參數帶入認證資訊 update_url = ( f"{store_url}/wp-json/wc/v3/orders/{order_id}" f"?consumer_key={consumer_key}&consumer_secret={consumer_secret}" ) try: response = requests.put(update_url, json=update_payload) except Exception as e: print(f"更新訂單 {order_id} 時發生例外:{e}") continue if response.status_code in [200, 201]: print(f"訂單 {order_id} 已更新,ywot_tracking_code 設定為:{obt_number}") else: print(f"訂單 {order_id} 更新失敗,狀態碼:{response.status_code},回應:{response.text}")
這裡的範例是根據 tcat.json 中的訂單編號以及託運單號,回填到 ywot_tracking_code