MCPcopy
hub / github.com/silenceper/wechat / GetMsg

Method GetMsg

miniprogram/message/message.go:77–124  ·  view source on GitHub ↗

GetMsg 获取接收到的消息 (如果是加密的返回解密数据)

(r *http.Request)

Source from the content-addressed store, hash-verified

75
76// GetMsg 获取接收到的消息 (如果是加密的返回解密数据)
77func (receiver *PushReceiver) GetMsg(r *http.Request) (string, []byte, error) {
78 // 判断请求格式
79 var dataType string
80 contentType := r.Header.Get("Content-Type")
81 if strings.HasPrefix(contentType, "text/xml") {
82 // xml 格式
83 dataType = DataTypeXML
84 } else {
85 // json 格式
86 dataType = DataTypeJSON
87 }
88
89 // 读取参数,验证签名
90 signature := r.FormValue("signature")
91 timestamp := r.FormValue("timestamp")
92 nonce := r.FormValue("nonce")
93 encryptType := r.FormValue("encrypt_type")
94 // 验证签名
95 tmpArr := []string{
96 receiver.Token,
97 timestamp,
98 nonce,
99 }
100 sort.Strings(tmpArr)
101 tmpSignature := util.Signature(tmpArr...)
102 if tmpSignature != signature {
103 return dataType, nil, errors.New("signature error")
104 }
105
106 if encryptType == "aes" {
107 // 解密
108 var reqData DataReceived
109 if dataType == DataTypeXML {
110 if err := xml.NewDecoder(r.Body).Decode(&reqData); err != nil {
111 return dataType, nil, err
112 }
113 } else {
114 if err := json.NewDecoder(r.Body).Decode(&reqData); err != nil {
115 return dataType, nil, err
116 }
117 }
118 _, rawMsgBytes, err := util.DecryptMsg(receiver.AppID, reqData.Encrypt, receiver.EncodingAESKey)
119 return dataType, rawMsgBytes, err
120 }
121 // 不加密
122 byteData, err := io.ReadAll(r.Body)
123 return dataType, byteData, err
124}
125
126// GetMsgData 获取接收到的消息 (解密数据)
127func (receiver *PushReceiver) GetMsgData(r *http.Request) (MsgType, EventType, PushData, error) {

Callers 1

GetMsgDataMethod · 0.95

Calls 3

SignatureFunction · 0.92
DecryptMsgFunction · 0.92
GetMethod · 0.65

Tested by

no test coverage detected