群益API 登入錯誤代碼分類地圖,說明程式端可解與屬帳戶設定範疇兩類的差別

群益API 登入錯誤怎麼判讀?這 2 類錯誤碼決定你該不該繼續查程式

先確認你在哪一關:如果連元件都載入不起來、登入視窗根本開不了,那是更前面的問題(見文末延伸閱讀)。本篇處理的是元件正常、程式跑得動,但 SKCenterLib_Login 回了一個數字的情況——也就是最典型的群益API 登入錯誤。

拿到那個數字之後,多數人的下一步是打開程式碼開始翻。但有相當一部分的碼,無論你把程式讀幾遍都不會有答案——因為問題根本不在程式裡。這篇要給你的不是「每個碼怎麼解」,而是先判斷這個碼該不該讓你繼續查程式

群益API 登入錯誤代碼分類地圖,說明程式端可解與屬帳戶設定範疇兩類的差別

群益API 登入錯誤代碼怎麼判讀?先問「這是程式的問題嗎」

把群益API 登入錯誤碼分成兩類,判讀就有了方向:

類別這些碼在講什麼你該做什麼
A 類:程式端可解參數沒帶、呼叫順序錯、重試節流、連線異常、版本過舊問題在你這一端,回程式裡找
B 類:屬帳戶設定範疇帳戶側的狀態或前置作業未完成不是程式的問題,繼續讀程式碼不會有結果

認出一個碼屬於 B 類,本身就是有用的資訊——它讓你停止在正確的程式碼裡找錯。

這篇只分這兩類,不再細分。分得越細,B 類看起來越像一份可以照著做的清單,但那正好是它不是的東西。

判讀的第一步:讓 API 自己把碼翻成文字

判讀群益API 登入錯誤的第一個動作不是翻程式碼,是把數字換成文字。SKCenterLib_GetReturnCodeMessage 可以直接把回傳碼換成官方訊息:

int nCode = m_pSKCenter.SKCenterLib_Login(userId, password);
string message = m_pSKCenter.SKCenterLib_GetReturnCodeMessage(nCode);

不要自己維護一份錯誤碼中文對照表。 錯誤碼會隨版本增加——9996 就是較新版本才出現的碼,自建的表不會自己長出它,於是你會拿到一個查不到的數字,然後開始懷疑是自己漏了什麼文件。

把官方訊息一併記進日誌,之後排查省下來的時間會遠超過這兩行的成本。

A 類:程式端可解的群益API 登入錯誤代碼

這一類群益API 登入錯誤的共同點是動作都發生在你的程式或你的機器上,所以官方說明可以直接照著做。

常數名官方說明為什麼是程式端的事
2017SK_WARNING_REGISTER_REPLYLIB_ONREPLYMESSAGE_FIRST請(註冊)接收公告再登入登入前沒掛 OnReplyMessage
1000SK_ERROR_LOGIN_FIRST請先由 Center 進行登入動作。*請注意登入帳號是否為大寫呼叫順序或帳號大小寫;也可能是下面第 5 節的連鎖
1080SK_ERROR_LOGIN_WITHOUT_LOGINID登入未輸入登入 ID 帳號參數沒帶
1079SK_ERROR_LOGIN_WITHOUT_PASSWORD登入未輸入個人密碼參數沒帶
1081SK_ERROR_LOGIN_WITHOUT_SETQUOTE登入未設定開啟行情功能初始化設定沒做
1129SK_ERROR_LOGIN_FAIL_IN_PROCESSING登入失敗,請稍等五秒後再試重試節流,程式端自己控
9997SK_ERROR_LOGIN_FAIL_LIMIT登入失敗已達五次,請重啟 API累計上限,同上
306您輸入的身份證字號錯誤一個容易被忽略的條件是身分證字號必須大寫
300您輸入的密碼錯誤輸入層
101請重新登入重登即可
1097SK_ERROR_TELNET_LOGINSERVER_FAILTelnet 登入主機失敗,請確認您的環境(Firewall 及 hosts 等)連線層,見第 6 節
1098SK_ERROR_TELNET_AGREEMENTSERVER_FAILTelnet 同意書查詢主機失敗,請確認您的環境連線層
1038SK_ERROR_CERT_NOT_VERIFIED憑證尚未驗章,請先執行 ReadCertByID呼叫順序,見下方延伸閱讀的初始化篇
9996SK_ERROR_UPDATE_API_REQUIRED此版本已無法登入,請更新版本部署端換元件版本
2003SK_WARNING_LOGIN_ALREADYID 已登入,無需重複登入不是錯誤,程式端判斷即可

有幾個碼沒有正式常數名,只有說明文字,表格裡以 表示——不要自己替它們發明常數名,那會在協作時造成混淆。

B 類:不是程式能解決的群益API 登入錯誤代碼

這一類群益API 登入錯誤指向的是帳戶側的狀態。列出來的目的只有一個:讓你認出它、然後停止在程式裡找原因

它代表什麼
321帳戶側的前置作業未完成
507裝置碼未綁定或無效
3031該市場的商品基本資料未下載,與帳戶側的聲明書狀態有關
2018證券或期貨 API 下單聲明書狀態未完成
2019期貨 API 下單聲明書狀態未完成
1074該商品或功能需要同意書,狀態未完成
307密碼被鎖定
604憑證過期或已註銷
1045SK_ERROR_CERT_NOT_FOUND,憑證不存在
502511特殊(群組)身份的帳號權限問題

這一類的碼,程式端做不了什麼。 改程式、換寫法、重裝元件都不會讓它們消失,因為要改變的狀態不在你的機器上。認出這件事,比繼續除錯有價值。

這篇不會告訴你這些狀態各自該怎麼處理——那超出「寫程式」這個主題的範圍。本篇能給的是判別:你卡在哪一類

如果有遇到這類的問題可以先跟您的營業員反應。

登入看起來成功了,功能卻全部回 1000?

這是整篇最值得記住的一種群益API 登入錯誤,因為它的錯誤訊息會主動把你導向錯誤的方向

症狀:主畫面開得起來、看起來登入成功了,但行情、回報、下單全部回 1000。而 1000 的官方說明是「請先由 Center 進行登入動作」——於是你回頭去檢查登入流程,在一段完全正確的程式碼裡繞圈子

機制:登入回傳 600699 並不是失敗,而是未使用雙因子的登入成功。如果程式只判斷「回傳值是不是 0」,就會把這個狀態當成失敗;或者更麻煩——當成完全正常,直接放行進主畫面。而在這個狀態下,後端可能把後續功能全部擋掉,使用者看到的就是一片 1000

關鍵在於:登入回傳值有三種狀態,不是兩種。

// 登入回傳值有三種狀態,不能只判斷 == 0
int nCode = m_pSKCenter.SKCenterLib_Login(userId, password);
string message = m_pSKCenter.SKCenterLib_GetReturnCodeMessage(nCode);

if (nCode == 0)
{
    // 雙因子登入成功
    OnLoginSucceeded();
}
else if (nCode >= 600 && nCode <= 699)
{
    // 登入成功,但未使用雙因子:可以繼續,但後續功能可能全部被擋
    // 這裡一定要明確提示,否則使用者只會看到一片 1000
    OnLoginSucceededWithWarning(nCode, message);
}
else
{
    OnLoginFailed(nCode, message);
}

程式端該做的有三件:把 600699 當成獨立的第三種狀態、在這個狀態下明確提示使用者、並把 SKCenterLib_GetReturnCodeMessage 取到的官方訊息一併顯示出來。這個狀態與憑證有關,屬於帳戶側的範疇;程式這一端能做也該做的,是讓使用者知道自己現在在哪個狀態,而不是讓他對著一片 1000 猜。

1097 遇到了,要馬上去改防火牆嗎?

先不要。

1097 的官方說明是「Telnet 登入主機失敗,請確認您的環境(Firewall 及 hosts 等)」,指向的是環境設定。但它也可能只是暫時性的連線卡住,重連就通。

建議的順序是先重試幾次,數次仍失敗才往環境設定的方向查理由不是機率,是成本不對稱——重試花你幾秒鐘,調防火牆規則與 hosts 檔可能花掉半天,而問題說不定在你動手之前就已經自己好了。就算暫時性只佔一小部分,先重試仍然划算。

1098 屬於同一層(同意書查詢主機連線失敗),成本結構一樣,套用同樣的處理順序即可。這類連線層的群益API 登入錯誤,先給它一點時間再動手改設定。

常見問題

群益API 登入錯誤回傳不是 0,是不是就代表登入失敗?

不一定。600–699 是登入成功,只是未使用雙因子。程式如果只判斷「是不是 0」,會把這個狀態誤判成失敗,或誤當成完全正常。

所有功能都回 1000(請先登入),是不是我的登入流程寫錯了?

不一定。登入那段程式碼可能完全正確,問題在於登入回傳的是 600 系列,而程式沒有分辨這第三種狀態。先去看登入當下的回傳值是什麼。

是不是每個登入錯誤碼都有程式端的解法?

不是。有一部分的碼屬於帳戶設定範疇,繼續在程式裡找原因不會有結果。認出這一類本身就是有用的資訊。

需要自己維護一份錯誤碼中文對照表嗎?

不需要。SKCenterLib_GetReturnCodeMessage 可以直接取得官方訊息,而且自建的表會隨版本漂移——新版增加的碼不會自己出現在你的表裡。

遇到 1097 要先改防火牆設定嗎?

建議先重試幾次。官方說明指向環境設定,但它也可能只是暫時性的連線問題。先重試的理由是成本——重試幾秒,調設定半天;重試數次仍失敗,再往環境方向查。

風險揭露

期貨與選擇權屬高槓桿商品,價格波動可能造成超過原始保證金的損失,交易人須自負交易責任。本文為程式開發技術教學,說明登入回傳碼的判讀方式,不構成投資建議,也不保證任何交易結果。程式化交易並不降低市場風險,反而可能因程式錯誤造成非預期的委託行為。

投資人教育資源

機構資源
臺灣期貨交易所(TAIFEX)期貨及選擇權數位學習網
證券暨期貨市場發展基金會證券期貨市場教育推廣
金融智慧網金管會金融知識平台
中華民國期貨業商業同業公會期貨業法規與宣導
證券投資人及期貨交易人保護中心投資人保護與申訴

延伸閱讀

參考資料

  • 錯誤碼代號、常數名與官方說明文字,出自群益官方元件使用說明的錯誤碼表;9996 為較新版本新增。
  • 600 系列的語意與後續呼叫的連鎖現象,為應用端實測紀錄,非官方文件記載。
  • 1097 先重試再查環境設定的處理順序,為實務歸納,非官方說法;官方說明指向環境設定。

免責聲明

本文章僅作為群益API實作經驗分享,不構成投資建議,且策略及程式皆應自行撰寫。期貨及衍生性金融商品交易屬高風險投資,請謹慎評估自身風險承擔能力。

延伸閱讀|相關文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *