今天來帶大家了解綠界的「重發機制」
昨天的「模擬付款」功能文章有提到
有幾種可能導致模擬付款失敗:
其實對綠界而言,會判斷失敗的主因就是
「沒有收到你的ReturnURL回傳1|OK」
只要綠界沒正確收到1|OK回覆
就會啟動重發機制
那甚麼是重發機制呢?
正常來說,當付款完成,綠界會回傳第一次的付款結果通知
若綠界沒有收到ReturnURL正確回傳1|OK訊息
就會排程每「5~15分鐘」重發一次付款結果通知
最多重發「四次」
若中途有收到ReturnURL正確回傳1|OK,就會停止重發機制
也就是說,若從頭到尾都沒有正確回1|OK
那就會收到「共5次(第一次)+(4次補發)」的付款結果通知
要注意的是,如果是付款成功
那第一次的payload內的RtnMsg會是中文
RtnMsg=交易成功
第二次開始的補發,RtnMsg會是英文
RtnMsg=paid
我們來實際做看看吧
先寫好ReturnURL程式,並故意回傳錯誤的格式
echo 'GOOD';
完成後將ReturnURL對外:
https://75c7-211-23-76-78.ngrok-free.app/hi/ReturnURL.php
帶入自己的ReturnURL
"ReturnURL" => "https://75c7-211-23-76-78.ngrok-free.app/hi/ReturnURL.php",
建立訂單並完成付款:
完成付款後可以看我們的ReturnURL的收發狀況
由下圖可以看到
我的ReturnURL回給綠界的是GOOD:
由於我們故意回錯誤的格式給綠界
所以就會開始收到綠界的補發機制囉
第一次接收到的payload:
+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 2024-09-10 15:17:31 ++++++++++++++++++++++++++++++++++++++++++++
來源IP: 175.99.72.1
請求方法: POST
CustomField1=&CustomField2=&CustomField3=&CustomField4=&MerchantID=1099236&MerchantTradeNo=ECPaytest1725952597&PaymentDate=2024/09/10 15:17:28&PaymentType=Credit_CreditCard&PaymentTypeChargeFee=2&RtnCode=1&RtnMsg=交易成功&SimulatePaid=0&StoreID=&TradeAmt=100&TradeDate=2024/09/10 15:16:51&TradeNo=2409101516518014&CheckMacValue=BD538BDB2B2C6F21B4C7613DD91F3C364ED876117E6A0CABF604A2FAA5059DCB
第一次補發:
+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 2024-09-10 15:25:46 ++++++++++++++++++++++++++++++++++++++++++++
來源IP: 175.99.72.1
請求方法: POST
CheckMacValue=91E9AD294032DE696AEA4825D43A24965968D1EDEDB64A727FFD907B7B2C5E4F&CustomField1=&CustomField2=&CustomField3=&CustomField4=&MerchantID=1099236&MerchantTradeNo=ECPaytest1725952597&PaymentDate=2024/09/10 15:17:28&PaymentType=Credit_CreditCard&PaymentTypeChargeFee=2&RtnCode=1&RtnMsg=paid&SimulatePaid=0&StoreID=&TradeAmt=100&TradeDate=2024/09/10 15:16:51&TradeNo=2409101516518014
第二次補發:
+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 2024-09-10 15:30:30 ++++++++++++++++++++++++++++++++++++++++++++
來源IP: 175.99.72.1
請求方法: POST
CheckMacValue=91E9AD294032DE696AEA4825D43A24965968D1EDEDB64A727FFD907B7B2C5E4F&CustomField1=&CustomField2=&CustomField3=&CustomField4=&MerchantID=1099236&MerchantTradeNo=ECPaytest1725952597&PaymentDate=2024/09/10 15:17:28&PaymentType=Credit_CreditCard&PaymentTypeChargeFee=2&RtnCode=1&RtnMsg=paid&SimulatePaid=0&StoreID=&TradeAmt=100&TradeDate=2024/09/10 15:16:51&TradeNo=2409101516518014
第三次補發:
+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 2024-09-10 15:35:30 ++++++++++++++++++++++++++++++++++++++++++++
來源IP: 175.99.72.1
請求方法: POST
CheckMacValue=91E9AD294032DE696AEA4825D43A24965968D1EDEDB64A727FFD907B7B2C5E4F&CustomField1=&CustomField2=&CustomField3=&CustomField4=&MerchantID=1099236&MerchantTradeNo=ECPaytest1725952597&PaymentDate=2024/09/10 15:17:28&PaymentType=Credit_CreditCard&PaymentTypeChargeFee=2&RtnCode=1&RtnMsg=paid&SimulatePaid=0&StoreID=&TradeAmt=100&TradeDate=2024/09/10 15:16:51&TradeNo=2409101516518014
第四次補發:
+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 2024-09-10 15:40:11 ++++++++++++++++++++++++++++++++++++++++++++
來源IP: 175.99.72.1
請求方法: POST
CheckMacValue=91E9AD294032DE696AEA4825D43A24965968D1EDEDB64A727FFD907B7B2C5E4F&CustomField1=&CustomField2=&CustomField3=&CustomField4=&MerchantID=1099236&MerchantTradeNo=ECPaytest1725952597&PaymentDate=2024/09/10 15:17:28&PaymentType=Credit_CreditCard&PaymentTypeChargeFee=2&RtnCode=1&RtnMsg=paid&SimulatePaid=0&StoreID=&TradeAmt=100&TradeDate=2024/09/10 15:16:51&TradeNo=2409101516518014
你可以看到,每次補發的時間間隔都是5-15分
一共只會補發4次
以上就是整個補發機制的流程
這樣有沒有更了解了呢?
這樣你可能會想問
我其實都有收到綠界回傳的付款結果通知
那這樣是不是不用管重發機制?
這就要看各位的網站怎麼設計的
有些人不知到綠界有重發機制
也沒正確回傳1|OK
最後總共收到五筆付款成功的payload
以為消費者重複付款了五次
這裡就看各位怎麼進行邏輯處理了
這裡提供兩個比較直接的處理方式:
以上,就是今天說明綠界「重發機制」的文章
希望對你有幫助
我們明天見