docker-wechatPc
docker-wechatPc copied to clipboard
连上websocket之后无法获取到消息,是还需要额外传什么参数吗?
代码如下
Python
:
import hashlib
import hmac
import time
import websocket
def on_message(ws, message):
print("收到消息啦")
# print(ws)
print(message)
def on_error(ws, error):
print(ws)
print(error)
def on_close(ws):
print(ws)
print("### closed ###")
def get_sign(query, app_secret):
sss = "{q}&app_key={ak}".format(q=query, ak=app_secret)
return hashlib.sha256(sss.encode('utf-8')).hexdigest()
# hmac.new(sss.encode('utf-8'), hashlib.sha256).hexdigest()
if __name__ == '__main__':
app_id = "sgkjg8uafpcfh6z8yrgqf5gf2a55ekx3"
app_secret = "Z6epEb5NEu4qeEJRs3LWx36kvQcVHLY7"
url = "ws://10.0.0.51:5678/?"
query = "app_id={app_id}×tamp={timestamp}".format(app_id=app_id, timestamp=int(time.time() * 1000))
sign = get_sign(query, app_secret)
query = "{query}&hash={sign}".format(query=query, sign=sign)
print(query)
url = "{url}{query}".format(url=url, query=query)
print(url)
websocket.enableTrace(True)
ws = websocket.WebSocketApp(url,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
Golang
:
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"gitee.ltd/lxh/logger"
"github.com/gorilla/websocket"
"time"
)
const (
WsUrl = "ws://10.0.0.51:5678/?"
AppId = "sgkjg8uafpcfh6z8yrgqf5gf2a55ekx3"
AppSecret = "Z6epEb5NEu4qeEJRs3LWx36kvQcVHLY7"
)
func main() {
// 参数拼接
query := fmt.Sprintf("app_id=%s×tamp=%v", AppId, time.Now().Local().UnixMilli())
h := sha256.New()
h.Write([]byte(fmt.Sprintf("%s&app_key=%s", query, AppSecret)))
hashKey := hex.EncodeToString(h.Sum(nil))
query = fmt.Sprintf("%s&hash=%s", query, hashKey)
logger.Say.Debugf("WebSocket连接参数: %s", query)
//创建一个拨号器,也可以用默认的 websocket.DefaultDialer
dialer := websocket.DefaultDialer
// 创建ws客户端
conn, _, err := dialer.Dial(WsUrl+query, nil)
if err != nil {
logger.Say.Panicf("微信接口服务器连接失败: %v", err)
}
//离开作用域关闭连接,go 的常规操作
defer conn.Close()
// 循环读取服务器消息
for {
// 休眠两秒钟
time.Sleep(2 * time.Second)
// 设置超时
//err = conn.SetReadDeadline(time.Now().Add(time.Second * 10))
//if err != nil {
// logger.Say.Errorf("设置超时失败: %v", err)
//}
var messageType int
var messageData []byte
messageType, messageData, err = conn.ReadMessage()
if err != nil {
logger.Say.Errorf("读取消息失败: %v", err)
continue
}
logger.Say.Debugf("消息类型: %v", messageType)
logger.Say.Debugf("消息内容: %v", string(messageData))
}
}