diff --git a/ecpay-ecommerce-for-woocommerce.zip b/ecpay-ecommerce-for-woocommerce.zip index 463f786..49abf83 100644 Binary files a/ecpay-ecommerce-for-woocommerce.zip and b/ecpay-ecommerce-for-woocommerce.zip differ diff --git a/ecpay-ecommerce-for-woocommerce/README.txt b/ecpay-ecommerce-for-woocommerce/README.txt index 9d179fc..065af14 100644 --- a/ecpay-ecommerce-for-woocommerce/README.txt +++ b/ecpay-ecommerce-for-woocommerce/README.txt @@ -4,7 +4,7 @@ Tags: ecommerce, e-commerce, store, sales, sell, shop, cart, checkout, payment, Requires at least: 6.0 Tested up to: 6.0 Requires PHP: 8.2 -Stable tag: 1.1.2312190 +Stable tag: 1.1.2403150 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -19,6 +19,10 @@ License URI: https://www.gnu.org/licenses/gpl-2.0.html == Changelog == +v1.1.2403150 +修正貨到付款使用永久連結結帳失敗問題 +修正虛擬商品結帳失敗問題 + v1.1.2312190 支援 HPOS diff --git a/ecpay-ecommerce-for-woocommerce/admin/order/class-wooecpay-order.php b/ecpay-ecommerce-for-woocommerce/admin/order/class-wooecpay-order.php index 7ea5263..2a13a16 100644 --- a/ecpay-ecommerce-for-woocommerce/admin/order/class-wooecpay-order.php +++ b/ecpay-ecommerce-for-woocommerce/admin/order/class-wooecpay-order.php @@ -105,53 +105,52 @@ public function add_address_meta($order) { echo ''; } - echo wp_kses_post('

帳單姓名:
' . $order->get_meta('_billing_last_name', true) . ' ' . $order->get_meta('_billing_first_name', true) . '

'); + echo wp_kses_post('

帳單姓名:
' . $order->get_billing_last_name() . ' ' . $order->get_billing_first_name() . '

'); } /** * 訂單金流資訊回傳 */ public function add_payment_info($order) { - - $payment_method = $order->get_meta('_payment_method', true); + $payment_method = $order->get_payment_method(); echo '

 

'; echo '

' . __('Gateway info', 'ecpay-ecommerce-for-woocommerce') . '

'; - echo wp_kses_post('

' . __('Payment Type', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_payment_method_title', true) . '

'); + echo wp_kses_post('

' . __('Payment Type', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_payment_method_title() . '

'); switch ($payment_method) { - case 'Wooecpay_Gateway_Credit': - echo wp_kses_post('

信用卡前六碼: ' . $order->get_meta('_ecpay_card6no', true) . '

'); - echo wp_kses_post('

信用卡後四碼: ' . $order->get_meta('_ecpay_card4no', true) . '

'); - break; - case 'Wooecpay_Gateway_Credit_Installment': - echo wp_kses_post('

期數: ' . $order->get_meta('_ecpay_payment_number_of_periods', true) . '數

'); - break; - case 'Wooecpay_Gateway_Atm': - echo wp_kses_post('

' . __('Bank code', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_atm_BankCode', true) . '

'); - echo wp_kses_post('

' . __('ATM No', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_atm_vAccount', true) . '

'); - echo wp_kses_post('

' . __('Payment deadline', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_atm_ExpireDate', true) . '

'); - break; - case 'Wooecpay_Gateway_Cvs': - echo wp_kses_post('

' . __('CVS No', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_cvs_PaymentNo', true) . '

'); - echo wp_kses_post('

' . __('Payment deadline', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_cvs_ExpireDate', true) . '

'); - break; - case 'Wooecpay_Gateway_Barcode': - echo wp_kses_post('

' . __('barcode one', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_Barcode1', true) . '

'); - echo wp_kses_post('

' . __('barcode two', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_Barcode2', true) . '

'); - echo wp_kses_post('

' . __('barcode three', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_Barcode3', true) . '

'); - echo wp_kses_post('

' . __('Payment deadline', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_ExpireDate', true) . '

'); - break; - case 'Wooecpay_Gateway_Twqr': - echo wp_kses_post('

' . __('TWQR trade no', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_twqr_trad_no', true) . '

'); - break; - case 'Wooecpay_Gateway_Bnpl': - echo wp_kses_post('

' . __('BNPL Trade No', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_bnpl_BNPLTradeNo', true) . '

'); - echo wp_kses_post('

' . __('BNPL Installment', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_bnpl_BNPLInstallment', true) . '

'); - break; - default: - break; + case 'Wooecpay_Gateway_Credit': + echo wp_kses_post('

信用卡前六碼: ' . $order->get_meta('_ecpay_card6no', true) . '

'); + echo wp_kses_post('

信用卡後四碼: ' . $order->get_meta('_ecpay_card4no', true) . '

'); + break; + case 'Wooecpay_Gateway_Credit_Installment': + echo wp_kses_post('

期數: ' . $order->get_meta('_ecpay_payment_number_of_periods', true) . '數

'); + break; + case 'Wooecpay_Gateway_Atm': + echo wp_kses_post('

' . __('Bank code', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_atm_BankCode', true) . '

'); + echo wp_kses_post('

' . __('ATM No', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_atm_vAccount', true) . '

'); + echo wp_kses_post('

' . __('Payment deadline', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_atm_ExpireDate', true) . '

'); + break; + case 'Wooecpay_Gateway_Cvs': + echo wp_kses_post('

' . __('CVS No', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_cvs_PaymentNo', true) . '

'); + echo wp_kses_post('

' . __('Payment deadline', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_cvs_ExpireDate', true) . '

'); + break; + case 'Wooecpay_Gateway_Barcode': + echo wp_kses_post('

' . __('barcode one', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_Barcode1', true) . '

'); + echo wp_kses_post('

' . __('barcode two', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_Barcode2', true) . '

'); + echo wp_kses_post('

' . __('barcode three', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_Barcode3', true) . '

'); + echo wp_kses_post('

' . __('Payment deadline', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_barcode_ExpireDate', true) . '

'); + break; + case 'Wooecpay_Gateway_Twqr': + echo wp_kses_post('

' . __('TWQR trade no', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_twqr_trad_no', true) . '

'); + break; + case 'Wooecpay_Gateway_Bnpl': + echo wp_kses_post('

' . __('BNPL Trade No', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_bnpl_BNPLTradeNo', true) . '

'); + echo wp_kses_post('

' . __('BNPL Installment', 'ecpay-ecommerce-for-woocommerce') . ': ' . $order->get_meta('_ecpay_bnpl_BNPLInstallment', true) . '

'); + break; + default: + break; } } @@ -173,7 +172,7 @@ public function check_order_status_cancel($order) { ) { // 判斷金流方式 - $payment_method = $order->get_meta('_payment_method', true); + $payment_method = $order->get_payment_method(); if ( $payment_method == 'Wooecpay_Gateway_Credit' || @@ -363,11 +362,12 @@ public function add_invoice_meta($order) { * 複寫聯絡電話至收件人電話 */ public function order_update_sync_shipping_phone($post_id) { + if ($order = wc_get_order($post_id)) { + $shipping_phone = (!empty($order->get_shipping_phone())) ?: $order->get_billing_phone(); - $shipping_phone = $order->get_meta('_shipping_phone', true); - - $order->update_meta_data('wooecpay_shipping_phone', $shipping_phone); - $order->save(); + $order->update_meta_data('wooecpay_shipping_phone', $shipping_phone); + $order->save(); + } } public function ecpay_validate_logistic_fields($post_id, $data) { diff --git a/ecpay-ecommerce-for-woocommerce/ecpay-ecommerce-for-woocommerce.php b/ecpay-ecommerce-for-woocommerce/ecpay-ecommerce-for-woocommerce.php index 0c5431f..4d3c578 100644 --- a/ecpay-ecommerce-for-woocommerce/ecpay-ecommerce-for-woocommerce.php +++ b/ecpay-ecommerce-for-woocommerce/ecpay-ecommerce-for-woocommerce.php @@ -1,12 +1,12 @@ get_meta('_payment_method', true); + $payment_method = $order->get_payment_method(); if (empty($wooecpay_invoice_dalay_date)) { // 立即開立 diff --git a/ecpay-ecommerce-for-woocommerce/includes/services/helpers/logistic/ecpay-logistic-helper.php b/ecpay-ecommerce-for-woocommerce/includes/services/helpers/logistic/ecpay-logistic-helper.php index 20a8d6f..d185854 100644 --- a/ecpay-ecommerce-for-woocommerce/includes/services/helpers/logistic/ecpay-logistic-helper.php +++ b/ecpay-ecommerce-for-woocommerce/includes/services/helpers/logistic/ecpay-logistic-helper.php @@ -554,6 +554,12 @@ public function get_available_state_home_tcat_outside() { ]; } + public function get_permalink($url) { + // 產生符合永久連結格式的API URL + $symbol = (strpos($url, '?') === false) ? '?' : '&'; + return $url . $symbol; + } + public function generate_ecpay_map_form($shipping_method_id, $order_id) { $api_logistic_info = $this->get_ecpay_logistic_api_info('map'); $client_back_url = WC()->api_request_url('wooecpay_change_logistic_map_callback', true); diff --git a/ecpay-ecommerce-for-woocommerce/includes/services/helpers/payment/ecpay-payment-helper.php b/ecpay-ecommerce-for-woocommerce/includes/services/helpers/payment/ecpay-payment-helper.php index 1c9e209..ce0d81b 100644 --- a/ecpay-ecommerce-for-woocommerce/includes/services/helpers/payment/ecpay-payment-helper.php +++ b/ecpay-ecommerce-for-woocommerce/includes/services/helpers/payment/ecpay-payment-helper.php @@ -469,7 +469,7 @@ public function check_order_is_duplicate_payment($order) $merchant_trade_no_list = []; // 取得訂單付款方式 - $payment_method = $order->get_meta('_payment_method', true); + $payment_method = $order->get_payment_method(); // 取得重複付款訂單的綠界金流特店交易編號 $merchant_trade_no_list = $this->get_duplicate_payment_orders_merchant_trade_no($order->get_id()); diff --git a/ecpay-ecommerce-for-woocommerce/includes/services/logistic/class-wooecpay-logistic.php b/ecpay-ecommerce-for-woocommerce/includes/services/logistic/class-wooecpay-logistic.php index 1447312..1de66db 100644 --- a/ecpay-ecommerce-for-woocommerce/includes/services/logistic/class-wooecpay-logistic.php +++ b/ecpay-ecommerce-for-woocommerce/includes/services/logistic/class-wooecpay-logistic.php @@ -178,21 +178,23 @@ public function validate_checkout_shipping_field($data, $errors) { $chosen_shipping = $this->get_chosen_shipping_method_ids(); $chosen_shipping = (empty($chosen_shipping)) ? '' : $chosen_shipping[0]; - // 收件人姓名檢查 - $error_message = $this->logisticHelper->validate_shipping_field('name', $data['shipping_last_name'] . $data['shipping_first_name']); - if ($error_message != '') { - $errors->add('validation', $error_message); - } + if (WC()->cart->needs_shipping() && WC()->cart->show_shipping() && $this->logisticHelper->is_ecpay_logistics($chosen_shipping)) { + // 收件人姓名檢查 + $error_message = $this->logisticHelper->validate_shipping_field('name', $data['shipping_last_name'] . $data['shipping_first_name']); + if ($error_message != '') { + $errors->add('validation', $error_message); + } - // 驗證收件人電話 - $error_message = $this->logisticHelper->validate_shipping_field('phone', $data['billing_phone']); - if ($error_message != '') { - $errors->add('validation', $error_message); - } + // 驗證收件人電話 + $error_message = $this->logisticHelper->validate_shipping_field('phone', $data['billing_phone']); + if ($error_message != '') { + $errors->add('validation', $error_message); + } - // 黑貓宅配離島檢查 - if (in_array($chosen_shipping, ['Wooecpay_Logistic_Home_Tcat', 'Wooecpay_Logistic_Home_Tcat_Outside']) && in_array('Wooecpay_Logistic_Home_Tcat', get_option('wooecpay_enabled_logistic_outside', []))) { - $this->wooecpay_check_logistic_home_fields($data, $errors, $chosen_shipping); + // 黑貓宅配離島檢查 + if (in_array($chosen_shipping, ['Wooecpay_Logistic_Home_Tcat', 'Wooecpay_Logistic_Home_Tcat_Outside']) && in_array('Wooecpay_Logistic_Home_Tcat', get_option('wooecpay_enabled_logistic_outside', []))) { + $this->wooecpay_check_logistic_home_fields($data, $errors, $chosen_shipping); + } } } diff --git a/ecpay-ecommerce-for-woocommerce/includes/services/logistic/ecpay-logistic-response.php b/ecpay-ecommerce-for-woocommerce/includes/services/logistic/ecpay-logistic-response.php index 948c99f..0e7ffd0 100644 --- a/ecpay-ecommerce-for-woocommerce/includes/services/logistic/ecpay-logistic-response.php +++ b/ecpay-ecommerce-for-woocommerce/includes/services/logistic/ecpay-logistic-response.php @@ -51,7 +51,7 @@ public function map_response() { if (!$is_valid) { $confirm_msg = __('The selected store does not match the chosen shipping method (Outlying Island/Main Island). Please select a different store or cancel the transaction and place a new order.', 'ecpay-ecommerce-for-woocommerce'); $encryption_order_id = $this->logisticHelper->encrypt_order_id($order_id); - $url = WC()->api_request_url('wooecpay_logistic_redirect_map', true) . '&id=' . $encryption_order_id; + $url = $this->logisticHelper->get_permalink(WC()->api_request_url('wooecpay_logistic_redirect_map', true)) . 'id=' . $encryption_order_id; // 提示訊息 echo '