綠界定期定額訂閱外掛拆解

公司有一個專案買了這個綠界定期定額專業版,因此不得已要研究一下他的運作方式
https://cloudwp.pro/market/plugins/premium-plugins/ecpay-subscriptions-pro/

搭配著 Woocommerce Subscription 分析 這篇文章

我們知道「訂單」和「收款更新」是兩件事

  1. 這個 Woocommerce Subscription 會在固定排程新增續訂訂單
  2. 這個定期定額外掛的 class-action.php 裏面會接收綠界收款資訊後,更新到 _cw-allpay-cce_order-info 或是 _cw-allpay-cce_period-return

因此這邊提供幾個檢驗:

  1. 使用以下程式來檢驗是否有正確的收到定期定額的付款
$intSubscriptionID = 12345; // 訂閱編號
print_r(get_post_meta($intSubscriptionID, '_cw-allpay-cce_period-return', true));
  1. 取得續訂訂單的 subscriptionOrder 或是 order
$orderId = 3499;
$subscriptionOrder = wc_get_order(
    reset(
        wcs_get_subscriptions_for_order($orderId, ['order_type' => 'any'])
    )->get_parent_id()
);
  1. 比較暴力一點取得訂單所有的 meta 來看一下
$intSubscriptionID = 2945;
print_r(get_post_meta($intSubscriptionID));
  1. 幾個 meta

_cw-allpay-cce_order-info: 上層訂單 會有的資訊

Array
(
    [URL] => https://xxxxxxxxxxxxxx
    [MerchantID] => 3156350
    [TotalAmount] => 1200
    [PeriodType] => M
    [Frequency] => 1
    [ExecTimes] => 12
    [ItemName] => xxxxxxxx
    [OrderResultURL] => https://xxxxxxx
    [HashKey] => xxxxxxx
    [HashIV] => xxxxxxxx
    [PostURL] => https://payment.ecpay.com.tw/Cashier/AioCheckOut/V5
    [Time] => 1718026577
    [MerchantTradeNo] => xxxxxx
    [Language] => TWN
    [OrderID] => 2968
    [SubscriptionID] => 2969
    [EncryptType] => 1
)

_cw-allpay-cce_allpay-return: 上層訂單會有資訊

Array
(
    [AlipayID] => 
    [AlipayTradeNo] => 
    [amount] => 1200
    [ATMAccBank] => 
    [ATMAccNo] => 
    [auth_code] => 094760
    [card4no] => 0206
    [card6no] => 469656
    [CustomField1] => 
    [CustomField2] => 
    [CustomField3] => 
    [CustomField4] => 
    [eci] => 
    [ExecTimes] => 12
    [Frequency] => 1
    [gwsr] => xxxxx
    [MerchantID] => xxxxxxx
    [MerchantTradeNo] => xxxxxxxx
    [PayFrom] => 
    [PaymentDate] => 2024/06/10 13:37:05
    [PaymentNo] => 
    [PaymentType] => Credit_CreditCard
    [PaymentTypeChargeFee] => 27
    [PeriodAmount] => 1200
    [PeriodType] => M
    [process_date] => 2024/06/10 13:37:05
    [red_dan] => 
    [red_de_amt] => 
    [red_ok_amt] => 
    [red_yet] => 
    [RtnCode] => 1
    [RtnMsg] => 交易成功
    [SimulatePaid] => 0
    [staed] => 
    [stage] => 
    [stast] => 
    [StoreID] => 
    [TenpayTradeNo] => 
    [TotalSuccessAmount] => 1200
    [TotalSuccessTimes] => 1
    [TradeAmt] => 1200
    [TradeDate] => 2024/06/10 13:36:19
    [TradeNo] => xxxxxxxxx
    [WebATMAccBank] => 
    [WebATMAccNo] => 
    [WebATMBankName] => 
    [CheckMacValue] => xxxxxxxxxx
)

_cw-allpay-cce_period-return: 續訂訂單 和 訂閱訂單 (最新的那次) 會有資訊

Array
(
    [Amount] => 1200
    [AuthCode] => xxxxxx
    [CustomField1] => 
    [CustomField2] => 
    [CustomField3] => 
    [CustomField4] => 
    [ExecTimes] => 12
    [FirstAuthAmount] => 1200
    [Frequency] => 1
    [Gwsr] => xxxxxx
    [MerchantID] => xxxxxx
    [MerchantTradeNo] => xxxxxxx
    [PeriodType] => M
    [ProcessDate] => 2025/04/10 10:22:41
    [RtnCode] => 1
    [RtnMsg] => success
    [StoreID] => 
    [TotalSuccessTimes] => 11
    [CheckMacValue] => xxxxx
)