j7-dev / woomp

GNU General Public License v2.0
11 stars 2 forks source link

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

Closed lukehsuhao closed 9 months ago

lukehsuhao commented 10 months ago

這是個訂閱商品

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

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

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

lukehsuhao commented 10 months ago

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

j7-dev commented 10 months ago

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

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

image

j7-dev commented 9 months ago

說明:

當用戶結帳了一筆訂閱訂單 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 6 months ago

2024/04/26 更新

藍新、綠界、paynow都要Check

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