關於選完超取門市或站外付款後就結帳失敗的問題

如果您的網站近期發生了,客戶選完超取門市,或是跳轉到金流公司進行付款在跳回網站之後,就發生結帳異常的情形,這很可能又是 Cookie 問題在作怪。

去年 Chrome 80 發布之後,也曾帶來過一場災難,一樣是跳轉到第三方網站選取超取門市,或是進行付款,再跳轉回網站之後,就會觸發 samesite 規則使得瀏覽器將 cookie 清除,造成已登入會員被登出、結帳資料被清空,而無法順利完成結帳。

那時網路上的出現了大量的解決方案,提供的方法絕大部分皆是建議程式寫入 cookie 時,將 samesite 值設定為 None,或是請使用者,將瀏覽器的 SameSite by default cookies 以及 Enable removing SameSite=None cookies 設定為 Disable。

Disable SameSite by default cookies 以及 Enable removing SameSite=None cookies

然而在近期 chrome 瀏覽器 91 版本更新之後,SameSite by default cookies 此項設定已被移除,在 Chrome 瀏覽網頁若發生跨網域 POST 請求(例如從金流公司付款後跳回網站),有時將無法攜帶 Cookie 值,回到網站後已登入會員被登出、結帳資料被清空,而無法順利完成結帳,惡夢再度重演。

目前透過程式將 SameSite 值設定為 None,似乎未必能夠 100% 保證 cookie 不會在網站跳轉後被移除,較理想的做法,應該是透過串接的呼叫,傳遞加密過的重要資料,以取代原本儲存在 cookie 的變數,至於如何傳遞,這得思考第三方網站串接API中,是否有適合作為傳遞此重要資料之可用參數,細部作法可參考去年這篇 「OpenCart 如何修正 SameSite 問題(以串接ezShip為例)」文章,也希望各位都能順利解決這個 chrome 瀏覽器 91 版本所帶來的麻煩。。

=====================================================
OpenCart 網站代管、客製、維護 https://www.osec.tw/
台灣電商社團 https://www.facebook.com/groups/opencart.taiwan/
=====================================================