ใช้ SDK ของปลั๊กอิน WV¶
เพื่อสนับสนุนการดึงข้อมูลผู้ใช้ การดำเนินการเทรด การจัดการเหตุการณ์ และอื่นๆ ปลั๊กอิน WebView (ไคลเอ็นต์) ต้องสร้างการสื่อสารที่เชื่อถือได้กับแอปพลิเคชัน cTrader (โฮสต์) SDK ของปลั๊กอิน WebView ช่วยอำนวยความสะดวกในการโต้ตอบเหล่านี้กับ cTrader และคู่มือนี้จะอธิบายถึงไปป์ไลน์การสื่อสารระหว่างไคลเอ็นต์และโฮสต์
การติดตั้ง SDK ¶
SDK ของปลั๊กอิน WebView มีให้ใช้งานเป็น แพ็คเกจ npm ในการติดตั้ง SDK ให้นำทางไปยังไดเรกทอรีโปรเจกต์ของคุณในหน้าต่างเทอร์มินัล แล้วรันคำสั่งนี้:
npm install @spotware-web-team/sdk
การซิงโครไนซ์ระหว่างไคลเอ็นต์และโฮสต์ ¶
หมายเหตุ
โปรโตคอลที่เกี่ยวข้องมีให้อ้างอิงเป็น ข้อความ
ก่อนที่จะมีการแลกเปลี่ยนข้อความใดๆ จะต้องมีการสร้างช่องทางการสื่อสารก่อน การดำเนินการทั่วไปประกอบด้วย:
-
ในช่วงเริ่มต้นของการสื่อสาร จะมีการแลกเปลี่ยนเหตุการณ์ alive ที่ทั้งไคลเอ็นต์และโฮสต์ส่งเหตุการณ์
-
โฮสต์ส่งเหตุการณ์การลงทะเบียน (
payloadType = 2000) ตัวอย่าง:window.dispatchEvent(new MessageEvent('message-from-host', { data: {"clientMsgId": "152cf2d4-bfb6-4426-a303-9243b6a0daf4", "payload": {}, "payloadType": 2000} })) -
ปลั๊กอิน WebView ส่งเหตุการณ์การยืนยัน (
payloadType = 2001) ตัวอย่าง:window.dispatchEvent(new MessageEvent('message-to-host', { data: {"clientMsgId": "152cf2d4-bfb6-4426-a303-9243b6a0daf4", "payload": {}, "payloadType": 2001} })) -
สำหรับเหตุการณ์การยืนยันใหม่แต่ละครั้ง จะมีการส่งเหตุการณ์การลงทะเบียนใหม่เพื่อให้แน่ใจว่ามีการซิงโครไนซ์ แม้ว่าปลั๊กอินจะเริ่มต้นใหม่ก็ตาม
หมายเหตุ
หากฝ่ายใดฝ่ายหนึ่งไม่ได้รับเหตุการณ์ alive ที่เกี่ยวข้อง ปลั๊กอินจะไม่ถูกติดตั้ง เพื่อหลีกเลี่ยงการวนซ้ำ ปลั๊กอินต้องส่งเหตุการณ์การยืนยันเพียงครั้งเดียวและติดตามการไหลของข้อความ
คำเตือน
การส่งเหตุการณ์การยืนยันหลายครั้งจะทำให้เกิดเหตุการณ์การลงทะเบียนซ้ำๆ ซึ่งอาจส่งผลให้เกิดการวนซ้ำที่ไม่ต้องการ
คำขอ ¶
เมื่อการซิงโครไนซ์เสร็จสมบูรณ์ ปลั๊กอินสามารถโต้ตอบกับบริการ cTrader โดยเรียกใช้ เมธอด SDK ที่สื่อสารภายในกับโฮสต์
-
ปลั๊กอินเรียกใช้เมธอด SDK ตัวอย่างเช่น สามารถขอ ข้อมูลบัญชีของผู้ใช้
-
ปลั๊กอิน WebView ส่งคำขอ ตัวอย่าง:
{ "payloadType": 2100, "payload": { "payloadType": 175, "clientMsgId": "asd1-asd1" }, "clientMsgId": "asd2-asd2" }ภายในจะกำหนดฟิลด์
clientMsgIdสองฟิลด์ (ภายในและภายนอก):- ฟิลด์ภายในระบุคำขอเฉพาะภายในเพย์โหลดและถูกใช้โดย cTrader เพื่อจับคู่คำขอนั้นกับการตอบสนองที่เกี่ยวข้องและเหตุการณ์ที่เกี่ยวข้อง
- ฟิลด์ภายนอก (เมื่อใช้ร่วมกับฟิลด์ภายใน) ติดตามการไหลของข้อความโดยรวมระหว่างไคลเอ็นต์และโฮสต์
-
โฮสต์รับฟังคำขอ:
window.addEventListener('message-to-host', function (event) {})
หมายเหตุ
เมธอด SDK ทั้งหมดสำหรับการส่งคำขอและรับการตอบสนองมีให้อ้างอิงเป็น ข้อความเซิร์ฟเวอร์ ในขณะที่รายละเอียดเกี่ยวกับฟิลด์ที่ซ้ำกันภายในคำขอและการตอบสนองมีให้เป็น โมเดล
การตอบสนอง ¶
-
โฮสต์ส่งการตอบสนอง:
window.dispatchEvent(new MessageEvent('message-from-host', { data }))การตอบสนองแต่ละครั้งจะรวม
clientMsgIdต้นฉบับเพื่อเชื่อมโยงกับคำขอ การตอบสนองอิงตามโครงสร้างนี้:payloadType: 2101 clientMsgId: "<same-id-as-request>"การตอบสนองแบบเรียลไทม์หรือหลายครั้งจะสร้างเหตุการณ์ใหม่โดยใช้:
payloadType: 2102 clientMsgId: "<same-id-as-request>" -
ไคลเอ็นต์รับฟังการตอบสนอง:
window.addEventListener('message-from-host', function (event) {})
เหตุการณ์และการซับสไครบ์ ¶
ปลั๊กอิน WebView สามารถซับสไครบ์ข้อมูลแบบเรียลไทม์ เช่น ราคา การอัปเดตดีล เหตุการณ์การดำเนินการ และอื่นๆ
-
ซับสไครบ์ข้อมูลราคาโดยส่งคำขอ:
{ "payloadType": 2100, // indicates a request "payload": { "payloadType": 601, "symbolId": ["EURUSD_ID"], "clientMsgId": "quote-sub-123" }, "clientMsgId": "asd2-asd2" // outer message ID } -
การซับสไครบ์ทำให้โฮสต์ส่งการตอบสนองเป็นระยะ:
{ "payloadType": 2102, // indicates an event "payload": { "payloadType": 3, // mapped to QUOTE_EVENT "payload": { "ask": 85274, "bid": 85271, "depth": [], "high": 85340, "low": 84932, "sessionClose": 85133, "symbolId": 9, "tickbar": [], "timestamp": 1750162811236, "trendbar": [] }, "clientMsgId": "asd1-asd1" // inner message ID }, "clientMsgId": "asd2-asd2" // outer message ID }
ดีปลิงก์ ¶
ปลั๊กอินสามารถขอให้ cTrader เปิด ดีปลิงก์ (URL ภายใน) โดยส่งคำขอนี้:
payloadType: 2103
clientMsgId: "<client-msg-id>"
จากนั้นปลั๊กอินจะรับฟังการตอบสนอง:
payloadType: 2104
clientMsgId: "<same-id-as-request>"
ปลั๊กอิน WebView สามารถใช้ ดีปลิงก์ที่รองรับ ตามที่แสดงด้านล่าง:
// Open EURUSD symbol overview
const openEURUSDInfo = useCallback(() => {
const url = baseUrl ? ${baseUrl}symbols/EURUSD/info : 'symbols/EURUSD/info';
openUrl(url);
}, [baseUrl, openUrl]);
สรุปข้อความ ¶
ตารางด้านล่างสรุปข้อความโปรโตคอล
| ประเภท | ประเภทเพย์โหลด | การเริ่มต้น | กรณีการใช้งาน |
|---|---|---|---|
| วงจรชีวิต/แฮนด์เชค | 2000 (เหตุการณ์การลงทะเบียน),2001 (เหตุการณ์การยืนยัน) | จำเป็นต้องเริ่มต้นการสื่อสารปลั๊กอิน โฮสต์ส่งเหตุการณ์การลงทะเบียน ปลั๊กอินตอบกลับด้วยเหตุการณ์การยืนยัน | การตั้งค่าช่องทาง การติดตั้ง ความพร้อมในการสื่อสาร |
| เหตุการณ์ (ทางเดียว) | 2102 | เริ่มต้นจากเซิร์ฟเวอร์ เหตุการณ์ที่ส่งโดยไม่มีคำขอจากไคลเอ็นต์ก่อนหน้า โฮสต์สร้าง clientMsgId หนึ่งรายการ; แบ็กเอนด์ cTrader รวมอีกหนึ่งรายการ | ราคาตลาด การอัปเดตการดำเนินการเทรด การแจ้งเตือนราคา |
| คำขอการนำทางภายใน | 2103 (OpenInternalUrlReq), 2104 (OpenInternalUrlRes) | คำขอที่เริ่มต้นจากปลั๊กอินเพื่อนำทางภายในแอป cTrader โฮสต์ประมวลผลและยืนยันผ่านการตอบสนองที่จับคู่ | การเปิดภาพรวมของสัญลักษณ์ การเปิดหน้าจอคำสั่งสำหรับสัญลักษณ์ |
| คำขอ/การตอบสนอง | 2100 (req), 2101 (res) | เริ่มต้นโดยปลั๊กอิน ใช้สำหรับการดำเนินการที่มีการตอบสนองครั้งเดียว ทั้ง clientMsgId ภายในและภายนอกถูกนำมาใช้ซ้ำในการตอบสนอง | การรับข้อมูลบัญชี สัญลักษณ์ หรือดีล |
| คำขอ/หลายเหตุการณ์ | 2100 (คำขอ) จากนั้นหลาย 2102 (เหตุการณ์) | หนึ่งคำขอทำให้เกิดสตรีมของเหตุการณ์ที่เกี่ยวข้อง เหตุการณ์นำ clientMsgId (ภายใน) มาใช้ซ้ำ และ ID เหตุการณ์ใหม่ถูกสร้างโดยโฮสต์ | การวางคำสั่ง การซับสไครบ์การอัปเดตหลังจากคำสั่ง |
| การตอบสนองข้อผิดพลาด | 2500 (PublicErrorRes) | โฮสต์หรือ cTrader ใช้สิ่งนี้เพื่อรายงานความล้มเหลวในการประมวลผลคำขอ รวม clientMsgId ภายนอกและภายใน | เพย์โหลดไม่ถูกต้อง การเข้าถึงที่ไม่ได้รับอนุญาต คำขอ SDK ที่ผิดรูปแบบ |
การจัดการข้อผิดพลาด ¶
คำเตือน
สาเหตุทั่วไปของข้อผิดพลาดรวมถึงปลั๊กอินที่ไม่รู้จักหรือไม่ได้ลงทะเบียน รูปแบบคำขอไม่ถูกต้อง และการตรวจสอบความถูกต้องฝั่งเซิร์ฟเวอร์ล้มเหลว
หากมีบางอย่างผิดพลาด โฮสต์จะออกการตอบสนองข้อผิดพลาดที่มีโครงสร้าง:
payloadType: 2500
clientMsgId: <original-id>
{
"payloadType": 2500,
"clientMsgId": "<original-id>",
"error": "InvalidPayload"
}
SDK จัดการข้อผิดพลาดและแสดงให้ผู้สร้างปลั๊กอินเห็น