|
.局部变量 apiKey, secret, requestParam, channel, ts, requestId, req, hash, key, signature
.局部变量 marshal, err, u, c
.程序主体
.局部变量 apiKey = "YOUR_API_KEY"
.局部变量 secret = "YOUR_API_SECRET"
.局部变量 requestParam = ""
.局部变量 channel = "spot.login"
.局部变量 ts = 时间_获取当前时间戳()
.局部变量 requestId = 时间_获取当前时间戳毫秒() + "-" + "1"
.创建 ApiRequest 对象
req = 创建对象("ApiRequest")
req.设置属性("Time", ts)
req.设置属性("Channel", "")
req.设置属性("Event", "api")
req.设置属性("Payload", 创建对象("ApiPayload"))
req.Payload.设置属性("ApiKey", apiKey)
req.Payload.设置属性("Signature", 获取签名(secret, channel, requestParam, ts))
req.Payload.设置属性("Timestamp", 时间_获取当前时间戳())
req.Payload.设置属性("RequestId", requestId)
req.Payload.设置属性("RequestParam", requestParam)
.打印签名验证结果
.如果 获取签名(secret, channel, requestParam, 1677813908) = "2a8d9735bc0fa5cc7db97841482f317b515663d2a666abe8518ab214efada11b3da77ddc1e5fde529d5f780efa3366e302f5e3d2f7670460ae115801442e7461"
.显示信息("签名验证成功")
.否则
.显示信息("签名验证失败")
.endif
.序列化对象为 JSON 字符串
marshal = 序列化对象为JSON(req)
.连接 WebSocket 服务
u = 创建 URL 对象
u.设置属性("Scheme", "ws")
u.设置属性("Host", "xxxx")
u.设置属性("Path", "xxxx")
.创建 WebSocket 连接
c = 创建 WebSocket 连接(u.获取字符串(), nil)
.如果 c = 空
.抛出异常("无法建立 WebSocket 连接")
.endif
.设置 Ping 处理函数
c.设置 Ping 处理函数(空函数)
.读取消息
.启动新线程
.循环
.局部变量 messageType, message, error
.局部变量 messageType, message, error = c.读取消息()
.如果 error ≠ 空
c.关闭()
.抛出异常(error)
.endif
.显示信息("接收消息: " + message)
.循环结束
.发送消息
err = c.发送消息(websocket 文本消息类型, marshal)
.如果 err ≠ 空
.抛出异常(err)
.endif
.等待
.程序主体结束
.自定义函数 获取签名
.参数 secret, channel, requestParam, ts
.局部变量 hash, key, signature
hash = 创建 HMAC 对象(sha512 算法, secret)
key = "api" + "\n" + channel + "\n" + requestParam + "\n" + str(ts)
hash.更新(key)
signature = base64 编码(hash.完成())
.返回值 signature
.自定义类 ApiRequest
.属性 App, Time, Id, Channel, Event, Payload
.方法 设置属性
.参数 name, value
.如果 属性存在(name)
属性(name) = value
.否则
.抛出异常("无效的属性名称")
.endif
.自定义类 ApiPayload
.属性 ApiKey, Signature, Timestamp, RequestId, RequestParam
.方法 设置属性
.参数 name, value
.如果 属性存在(name)
属性(name) = value
.否则
.抛出异常("无效的属性名称")
.endif
翻译成易语言大概是这样子的,自己适当修改一下 |
|