欧意交易所API提供了丰富的功能,允许外部应用程序与欧意交易平台进行交互,获取市场数据、下单、查询订单、管理账户等。本文将详细介绍如何使用易语言调用欧意交易所API。
准备工作
在调用欧意交易所API之前,需要完成以下准备工作:
1. 注册欧意交易所账户:访问欧意交易所官网,注册并通过KYC认证。
2. 获取API密钥:登录欧意交易所账户,前往“API管理”页面,生成API密钥。
3. 安装易语言开发环境:下载并安装易语言开发环境,用于编写API调用代码。
HTTP请求
欧意交易所API使用HTTP协议发起请求,可以在易语言中使用`WinInet`库进行HTTP请求。下面是一个示例代码,演示了如何发送一个GET请求:
e
include
Define BYTESIZE = 512
Char URL = "https://api.okx.com/api/v5/public/ticker"
Function GetRequest(URL As String) :String
hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0)
hRequest = InternetOpenUrl(hInternet, URL, NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0)
If hRequest <> 0
Dim Buffer As Char(BYTESIZE)
Repeat
Buffer = Char(0)BYTESIZE
TotalRecv = 0
While InternetReadFile(hRequest, Buffer, BYTESIZE, TotalRecv)
Buffer[TotalRecv] = 0
Return Buffer
Wend
Until Err() = 12111
End If
End Function
上面代码中:
`URL`是请求的地址。
`InternetOpen`函数打开互联网会话。
`InternetOpenUrl`函数发起HTTP请求。
`InternetReadFile`函数读取HTTP响应内容。
请求签名
欧意交易所API要求对请求进行签名,以确保请求的安全性和真实性。易语言中可以使用`Crypt32`库进行请求签名。下面是一个示例代码,演示了如何对请求进行签名:
e
include
include
Function SignRequest(Key As String, Content As String) :String
Dim HMAC As CryptHash(SHA256)
Dim Data As Byte[(Len(Content) + Len(Key))2]
Dim KeyBytes As Byte(0, Len(Key) - 1)
Str2Bytes(Key, KeyBytes)
Str2Bytes(Content, Data)
HMAC = CreateHash(SHA256)
HMAC.Update(Data)
HMAC.SetKey(KeyBytes)
HMAC.Final(Data)
Bytes2Str(Data, Ret)
HMAC.CloseHash
End Function
上面代码中:
`Key`是API密钥。
`Content`是请求参数的JSON字符串。
`HMAC`是HMAC签名对象。
`Data`是请求参数和密钥的字节数组。
`KeyBytes`是密钥的字节数组。
发送请求
在准备请求和签名之后,就可以发送请求了。下面是一个示例代码,演示了如何使用`WinInet`库发送请求:
e
include
include
String APIKey = "Your_API_Key"
String APISecret = "Your_API_Secret"
Function SendRequest(Method As String, URL As String, Content As String) :String
hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0)
hRequest = InternetOpenUrl(hInternet, URL, NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0)
If hRequest <> 0
Submit = 0
If Method = "POST"
Submit = 1
End If
If InternetSetOption(hRequest, INTERNET_OPTION_HTTP_METHOD, Method, Len(Method)) <> 0
If InternetSetOption(hRequest, INTERNET_OPTION_CONTENT_TYPE, "application/json", Len("application/json")) <> 0
If InternetSetOption(hRequest, INTERNET_OPTION_IGNORE_CERT_CN_INVALID, 1, Len(1)) <> 0
TimeStamp = Str(Round(Now(), 3))
Header = "Content-Type: application/json" + CHR(13) + CHR(10) + "OK-ACCESS-KEY: " + APIKey + CHR(13) + CHR(10) + "OK-ACCESS-SIGN: " + SignRequest(APISecret, Content + TimeStamp) + CHR(13) + CHR(10) + "OK-ACCESS-TIMESTAMP: " + TimeStamp
If InternetSetRequestHeaders(hRequest, Header, Len(Header), INTERNET_FLAG_RELOAD) <> 0
If Submit = 1
If InternetWriteFile(hRequest, Content, Len(Content), WriteLen) <> 0
Dim Buffer As Char(BYTESIZE)
Repeat
Buffer = Char(0)BYTESIZE
TotalRecv = 0
While InternetReadFile(hRequest, Buffer, BYTESIZE, TotalRecv)
Buffer[TotalRecv] = 0
Return Buffer
Wend
Until Err() = 12111
End If
Else
Return ""
End If
End If
End If
End If
End If
End If
End Function
上面代码中:
`Method`是请求方法(POST或GET)。
`URL`是请求地址。
`Content`是请求参数的JSON字符串。
示例
以下是一个使用易语言调用欧意交易所API获取行情数据的示例代码:
e
include
String APIKey = "Your_API_Key"
String APISecret = "Your_API_Secret"
Function GetTicker(Symbol As String) :String
URL = "https://api.okx.com/api/v5/public/ticker"
Param = "{instrument_id: \"" + Symbol + "\"}"
Ret = SendRequest("GET", URL + "?" + Param, "")
If Ret <> ""
If JsonParse(Ret, "code") = "0"
JsonDel(Ret, "code")
JsonDel(Ret, "msg")
Return Ret
Else
Ret = "Error: " + JsonParse(Ret, "msg")
End If
End If
Return "Error: Network error"
End Function
上面代码中:
`Symbol`是交易对符号,例如“BTC-USDT”。
`URL`是请求地址。
`Param`是请求参数。
`Ret`是HTTP响应内容。
调用`GetTicker`函数即可获取指定交易对的最新行情数据。