EVERY8D 簡訊新版 API 串接工程紀錄

由於 EVERY8D 日前似乎停用了舊版的 API,所以前幾天幫商家重新設計了 OpenCart 的 EVERY8D 簡訊串接模組,設計過程踩了一些坑,乾脆紀錄成文章,以便分享給其他有需要的商家。

EVERY8D 官方網站有提供新版的 API 文件及範例程式(https://www.teamplus.tech/product/every8d-download/),閱讀文件同時搭配閱讀範例程式,還算不難理解,直接將範例程式(PHP版)下載安裝到我的 localhost,替換發送帳號、發送密碼,並將發送號碼修改成自己的手機號碼,透過瀏覽器呼叫範例程式,即可發送測試簡訊,程式碼可以不用作任何的修改。

經上述 localhost 測試沒問題之後,就將 EVERY8D 新版簡訊發送的相關程式,替換到正式網站原有的 OpenCart 簡訊模組,更新後進行發送測試,遇到了第一個問題,產生了底下的錯誤訊息 :
PHP Warning: fsockopen(): unable to connect to api.every8d.com:80 (Connection timed out) in /home/opencart/public_html/system/library/SMSHttp.php on line 74

錯誤訊息是無法連上 api.every8d.com,這讓我有點困惑,因為剛剛在 localhost 是可以呼叫 api.every8d.com 發送簡訊的,於是退一步測試,將剛剛在 localhost 測試成功的程式碼,原封不動的上傳到正式網站進行發送測試,結果卻還是收到跟上面一樣的錯誤訊息。

回頭檢查 API 文件,發現有區分 http 及 https 兩種通訊協定,由於範例程式是串 http,localhost 也是 http,而正式網站是 https,果然將 SMSHttp.php 檔案中的通訊協定改成 https,就能再正式網站上發送成功了。

雖然正式主機上已能發送簡訊,但出現了底下的警告,遇到了第二個問題 :
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP;

回頭檢查官方提供的範例程式 SMSHttp.php 檔案中的 class 宣告,發現建構子是採用舊式的同名宣告方式,改成 __construct 就可以了,重新測試就不再出現警告了。

套回正式網站的簡訊模組,測試已可正常運作,EVERY8D 的管理後台也提供了蠻有用的發送紀錄查訊,包括發送時間、訊息主旨、訊息內容、以及最後的 [發送扣點] 欄位資料,要解釋發送扣點之前,要先了解簡訊的字數限制,依據中華電信的說明,一則簡訊的字數限制為 70 個中文字(https://www.cht.com.tw/home/consumer/mobservice/basic/sms-service),但是目前的簡訊系統可以支援長簡訊,就是雖然發送的字數超過了 70 個中文字,但仍可以順利發送,只不過系統會將簡訊拆成多筆簡訊傳送,相對的,計費也是以多筆來計算。

所以如果您的購物網站,有串接了簡訊發送功能,建議請注意您的發送內容長度,是否因為內容過長而被以多通數計算,別以為發送一次就是計一則費用,一般的簡訊後台應該都有提供發送紀錄的查詢,如果你的內容剛好超過字數限制一點點,那就考慮一下調整簡訊內容,讓它可以少計一則,如果您的發送通數不低,這也是一筆可以節省的費用啊,這是此次工程發現的第三個問題。

如果你有考慮串接簡訊,建議多參考幾家簡訊廠商,因為目前主流的簡訊廠商應該是三竹簡訊,費用好像也沒有比較高,如果有推薦的簡訊廠商,麻煩請提供給我。

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