getMessage 解析微信返回的消息
()
| 134 | |
| 135 | // getMessage 解析微信返回的消息 |
| 136 | func (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 | |
| 176 | func (srv *Server) getEncryptBody() (*message.EncryptedXMLMsg, error) { |
| 177 | var encryptedXMLMsg = &message.EncryptedXMLMsg{} |
no test coverage detected