GetMsg 获取接收到的消息 (如果是加密的返回解密数据)
(r *http.Request)
| 75 | |
| 76 | // GetMsg 获取接收到的消息 (如果是加密的返回解密数据) |
| 77 | func (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 获取接收到的消息 (解密数据) |
| 127 | func (receiver *PushReceiver) GetMsgData(r *http.Request) (MsgType, EventType, PushData, error) { |
no test coverage detected