有安裝 `Woocommerce Subscription` 外掛時,後續訂單抓不到初始訂單的發票資訊 ISSUE
lukehsuhao opened this issue · 4 comments
lukehsuhao commented
這是個訂閱商品
客戶在第一次下單時,有輸入統編,使用好用版的綠界發票,但是在續訂的訂單裡,開成 個人的
照理說續訂的訂單,要能夠抓到 上層訂單(第一筆訂單)的發票資料,然後照著開立
附上影片
https://www.awesomescreenshot.com/video/24024420?key=3790e2f03b91a5a3adf8713ebf03c3a8
lukehsuhao commented
另外 藍新電子發票的這塊,也是需要比照辦理
j7-dev commented
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;
}
j7-dev commented
2024/04/26 更新
藍新、綠界、paynow都要Check
[ ] - 藍新
[ ] - 綠界
[ ] - 統一金