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

Method getMessage

officialaccount/server/server.go:136–174  ·  view source on GitHub ↗

getMessage 解析微信返回的消息

()

Source from the content-addressed store, hash-verified

134
135// getMessage 解析微信返回的消息
136func (srv *Server) getMessage() (interface{}, error) {
137 var rawXMLMsgBytes []byte
138 var err error
139 if srv.isSafeMode {
140 encryptedXMLMsg, dataErr := srv.getEncryptBody()
141 if dataErr != nil {
142 return nil, dataErr
143 }
144
145 // 验证消息签名
146 timestamp := srv.Query("timestamp")
147 srv.timestamp, err = strconv.ParseInt(timestamp, 10, 32)
148 if err != nil {
149 return nil, err
150 }
151 nonce := srv.Query("nonce")
152 srv.nonce = nonce
153 msgSignature := srv.Query("msg_signature")
154 msgSignatureGen := util.Signature(srv.Token, timestamp, nonce, encryptedXMLMsg.EncryptedMsg)
155 if msgSignature != msgSignatureGen {
156 return nil, fmt.Errorf("消息不合法,验证签名失败")
157 }
158
159 // 解密
160 srv.random, rawXMLMsgBytes, err = util.DecryptMsg(srv.AppID, encryptedXMLMsg.EncryptedMsg, srv.EncodingAESKey)
161 if err != nil {
162 return nil, fmt.Errorf("消息解密失败, err=%v", err)
163 }
164 } else {
165 rawXMLMsgBytes, err = io.ReadAll(srv.Request.Body)
166 if err != nil {
167 return nil, fmt.Errorf("从body中解析xml失败, err=%v", err)
168 }
169 }
170
171 srv.RequestRawXMLMsg = rawXMLMsgBytes
172
173 return srv.parseRequestMessage(rawXMLMsgBytes)
174}
175
176func (srv *Server) getEncryptBody() (*message.EncryptedXMLMsg, error) {
177 var encryptedXMLMsg = &message.EncryptedXMLMsg{}

Callers 1

handleRequestMethod · 0.95

Calls 5

getEncryptBodyMethod · 0.95
QueryMethod · 0.95
parseRequestMessageMethod · 0.95
SignatureFunction · 0.92
DecryptMsgFunction · 0.92

Tested by

no test coverage detected