如何透過 WooCommerce REST API 建立訂單

之前在研究 WooCommerce Store API 的時候有順便紀錄 WooCommerce REST API 的用法,再次感謝有寫下這篇文章的自己,剛好這禮拜就派上了用場。需求是客戶想在後台透過更簡便以及客製化的操作介面來手動新增訂單,本想用 Store API 處理,但爬了 REST API 發現到裡面也有建立訂單的方法。

於是我先用 ACF 開好建立訂單的設定頁面並將欄位建好後,透過 ACF 的 acf/save_post 勾點來完成當儲存設定頁時觸發建立訂單 API,然後使用官方提供的 Composer 套件來建立 API 請求物件,接下來照著官方範例就可以在更新設定頁後很順利的建立訂單。

但有兩個地方在官方的範例裡面沒有提到,第一個是訂單自訂欄位,由於客戶需要在這個訂單手動建立畫面也能輸入電子發票選項,因此我需要將發票資訊一併寫入,後來查到的寫法是使用 meta_data 這個 key 來寫入,裡面帶的是 key value 陣列。

另一個問題是透過 REST API 建立的訂單沒有顧客歸屬,也就是該訂單的結帳對象都是訪客,根據 API 的回傳資料發現裡面有一個 customer_id 參數,實測後發現在請求時必須要將該參數帶入 user id 才能正確將會員跟訂單做綁定。

程式碼實作如下:

use Automattic\WooCommerce\Client;

$woocommerce = new Client(
	home_url(),
	'API_KEY',
	'API_SECRECT',
	array(
		'wp_api'            => true,
		'version'           => 'wc/v3',
		'query_string_auth' => true,
	)
);

$data = array(
	'payment_method'       => 'manual_order',
	'payment_method_title' => 'Manual Order',
	'customer_id'          => 1,
	'set_paid'             => true,
	'billing'              => array(
		'first_name' => 'Oberon',
		'address_1'  => 'tw',
		'email'      => 'm615926@gmail.com',
		'phone'      => '0912345678',
	),
	'line_items'           => array(
		array(
			'product_id' => 1,
			'quantity'   => 1
		)
	),
	'meta_data'            => array(
		array(
			'key'   => '_invoice_data',
			'value' => array(
				'invoice-type' => 0,
				'invoice-carrier' => '/A123456',
			),
		),
	),
);

$resp = $woocommerce->post( 'orders', $data );

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Picture of 賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!