开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 205|回复: 8
收起左侧

[已解决] 有没有懂GO语言的大佬 帮忙翻译成易语言

 关闭 [复制链接]
结帖率:64% (7/11)
发表于 6 天前 | 显示全部楼层 |阅读模式   山东省枣庄市
20精币
有没有懂GO语言的大佬 帮忙把下边这个翻译成易语言例子  


代码示例
package mainimport (        "crypto/hmac"        "crypto/sha512"        "encoding/hex"        "encoding/json"        "fmt"        "strconv"        "time")func GetApiSignature(secret, channel string, requestParam [byte, ts int64) string {        hash := hmac.New(sha512.New, [byte(secret))        key := fmt.Sprintf("%s\n%s\n%s\n%d", "api", channel, string(requestParam), ts)        hash.Write([byte(key))        return hex.EncodeToString(hash.Sum(nil))}// example WebSocket signature calculation implementation in gofunc main() {        apiKey := "YOUR_API_KEY"        secret := "YOUR_API_SECRET"        requestParam := ""        channel := "spot.login"        ts := time.Now().Unix()        requestId := fmt.Sprintf("%d-%d", time.Now().UnixMilli(), 1)        req := ApiRequest{                Time:    ts,                Channel: "",                Event:   "api",                Payload: ApiPayload{                        ApiKey:       apiKey,                        Signature:    GetApiSignature(secret, channel, [byte(requestParam), ts),                        Timestamp:    strconv.FormatInt(ts, 10),                        RequestId:    requestId,                        RequestParam: [byte(requestParam),                },        }        fmt.Println(GetApiSignature(secret, channel, [byte(requestParam), 1677813908) ==                "2a8d9735bc0fa5cc7db97841482f317b515663d2a666abe8518ab214efada11b3da77ddc1e5fde529d5f780efa3366e302f5e3d2f7670460ae115801442e7461")        marshal, _ := json.Marshal(req)        fmt.Println(string(marshal))        // connect ws service        u := url.URL{Scheme: "ws", Host: "xxxx", Path: "xxxx"}        websocket.DefaultDialer.TLSClientConfig = &tls.Config{RootCAs: nil, InsecureSkipVerify: true}        c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)        if err != nil {                panic(err)        }        c.SetPingHandler(nil)        // read msg        go func() {                for {                        _, message, err := c.ReadMessage()                        if err != nil {                                c.Close()                                panic(err)                        }                        fmt.Printf("recv: %s\n", message)                }        }()        err = c.WriteMessage(websocket.TextMessage, marshal)        if err != nil {                panic(err)        }        select {}}type ApiRequest struct {        App     string     `json:"app,omitempty"`        Time    int64      `json:"time"`        Id      *int64     `json:"id,omitempty"`        Channel string     `json:"channel"`        Event   string     `json:"event"`        Payload ApiPayload `json:"payload"`}type ApiPayload struct {        ApiKey       string          `json:"api_key,omitempty"`        Signature    string          `json:"signature,omitempty"`        Timestamp    string          `json:"timestamp,omitempty"`        RequestId    string          `json:"req_id,omitempty"`        RequestParam json.RawMessage `json:"req_param,omitempty"`}
请求示例
{  "time": 1681984544,  "channel": "spot.login",  "event": "api",  "payload": {    "api_key": "ea83fad2604399da16bf97e6eea772a6",    "signature": "6fa3824c8141f2b2283108558ec50966d7caf749bf04a3b604652325b50b47d2343d569d848373d58e65c49d9622ba2e73dc25797abef11c9f20c07da741591e",    "timestamp": "1681984544",    "req_id": "request-1"  }}

最佳答案

查看完整内容

根据你最后这张图来说,你的 data 应该是这样式的 data = event+ 字符 (10) + channel+ 字符 (10) + requestParam + 字符 (10) + time 也就是 data = “api” + 字符 (10) + “spot.login” + 字符 (10) + “”+ 字符 (10) + “1677813908”

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:64% (7/11)

签到天数: 10 天

 楼主| 发表于 6 天前 | 显示全部楼层   山东省枣庄市
上边图片发错一张 重新发一下 ,,.....
111.png
222.png
333.png
回复

使用道具 举报

签到天数: 20 天

发表于 6 天前 | 显示全部楼层   河北省石家庄市
根据你最后这张图来说,你的 data 应该是这样式的

data =  event+ 字符 (10) + channel+ 字符 (10) + requestParam + 字符 (10) + time

也就是  data = “api” + 字符 (10) + “spot.login” + 字符 (10) + “”+ 字符 (10) + “1677813908”

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:80% (4/5)

签到天数: 4 天

发表于 6 天前 高大上手机用户 | 显示全部楼层   安徽省合肥市
你把他生成dll给易语言调用不就行了。
回复

使用道具 举报

结帖率:64% (7/11)

签到天数: 10 天

 楼主| 发表于 6 天前 | 显示全部楼层   山东省枣庄市
代码直接复制 不知道怎么这么乱    重新发一下

GO代码.rar

111.22 KB, 下载次数: 1

GO代码.txt

2.81 KB, 下载次数: 1

1.png
2.png
3.png
回复

使用道具 举报

结帖率:64% (7/11)

签到天数: 10 天

 楼主| 发表于 6 天前 | 显示全部楼层   山东省枣庄市
老衲jack 发表于 2024-11-15 23:33
你把他生成dll给易语言调用不就行了。

我不懂GO语言..没接触过. 不会弄
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

发表于 5 天前 | 显示全部楼层   江西省南昌市
.局部变量 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

翻译成易语言大概是这样子的,自己适当修改一下
回复

使用道具 举报

结帖率:64% (7/11)

签到天数: 10 天

 楼主| 发表于 5 天前 | 显示全部楼层   山东省枣庄市
hongqingfeng 发表于 2024-11-16 01:14
.局部变量 apiKey, secret, requestParam, channel, ts, requestId, req, hash, key, signature
.局部变量 ...

其实 主要就是签名这一步  我这样写应该是符合要求的吧  
怎么就提示不对呢



336.png
回复

使用道具 举报

签到天数: 20 天

发表于 4 天前 | 显示全部楼层   河北省石家庄市
你这个正确结果应该是什么呢?被你的代码搞的一头雾水
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表