j7-dev/woomp

有安裝 `Woocommerce Subscription` 外掛時,後續訂單抓不到初始訂單的發票資訊 ISSUE

lukehsuhao opened this issue · 4 comments

這是個訂閱商品

客戶在第一次下單時,有輸入統編,使用好用版的綠界發票,但是在續訂的訂單裡,開成 個人的

照理說續訂的訂單,要能夠抓到 上層訂單(第一筆訂單)的發票資料,然後照著開立

附上影片
https://www.awesomescreenshot.com/video/24024420?key=3790e2f03b91a5a3adf8713ebf03c3a8

另外 藍新電子發票的這塊,也是需要比照辦理

j7-dev commented

這支 hook 應該可以在續訂創建訂單後呼叫

如果測試可以就可以,在創建訂單後寫入原始訂單的發票資訊

image

j7-dev commented

說明:

當用戶結帳了一筆訂閱訂單 id:1086
WCS 會複製 部分資料,並且生成一個 subscription object id:1087
這個 subscription object 是用來記錄訂閱的狀態,例如 on-hold, active
但此 subscription object id:1087 會記錄 parent_id:1086 即第一筆的訂閱訂單資訊
因此當我們

$subscription  = wcs_get_subscription(1087);
$_ecpay_invoice_data = $subscription->get_meta('_ecpay_invoice_data');

是可以使用 WC_Order 的方法取得第一筆訂單的資料的

暫定解法

$to_object - 是 WCS 續訂時建立的 order
$from_object - 是 WCS 的 subscription object

add_filter("wc_subscriptions_object_data", 'sync_invoice_data_at_renew_subscription', 100, 3);

function sync_invoice_data_at_renew_subscription($data, $to_object, $from_object, $copy_type)
{

	if (!method_exists($from_object, 'get_meta') || !method_exists($to_object, 'update_meta_data')) {
		return $data;
	}

	$_ecpay_invoice_data = $from_object->get_meta('_ecpay_invoice_data');
	if (!empty($_ecpay_invoice_data)) {
		$to_object->update_meta_data('_ecpay_invoice_data', $_ecpay_invoice_data);
	}

	$_ezpay_invoice_data = $from_object->get_meta('_ezpay_invoice_data');
	if (!empty($_ezpay_invoice_data)) {
		$to_object->update_meta_data('_ezpay_invoice_data', $_ezpay_invoice_data);
	}

	return $data;
}

2024/04/26 更新

藍新、綠界、paynow都要Check

[ ] - 藍新
[ ] - 綠界
[ ] - 統一金