package base
import (
"fmt"
"net/http"
"sort"
"strings"
"crypto/sha1"
"io"
"encoding/xml"
"time"
"io/ioutil"
"log"
)
const TOKEN = "fshare"
type Base struct {
token string
Resp http.ResponseWriter
Req *http.Request
}
type TextRequestBody struct {
XMLName xml.Name `xml:"xml"`
ToUserName string
FromUserName string
CreateTime time.Duration
MsgType string
Content string
MsgId int
}
func (t *Base) Valid(echostr string) {
//fmt.Println(echostr)
if t.checkSignature() {
//fmt.Println("aaaa")
fmt.Fprintf(t.Resp, echostr)
}
}
func (t *Base) checkSignature() bool {
t.token = TOKEN
timestamp, nonce, signature := t.Req.Form["timestamp"][0], t.Req.Form["nonce"][0], t.Req.Form["signature"][0]
var tmpArr = []string{t.token, timestamp, nonce}
//fmt.Println(t.Req.Form)
sort.Strings(tmpArr)
/*
//高效做法
buffer := bytes.Buffer
for _, v := range tmpArr {
buffer.WriteString(v)
}
tmpStr := buffer.String()
fmt.Println(tmpStr)
*/
tmpStr := strings.Join(tmpArr, " ")
//fmt.Println(tmpArr, tmpStr)
ts := sha1.New()
io.WriteString(ts, tmpStr)
tmpStr = fmt.Sprintf("%x",ts.Sum(nil))
//fmt.Println(tmpStr)
if signature == tmpStr {
return true
}
return false
}
func (t *Base) ResponseMsg() {
fmt.Fprintf(t.Resp, string(t.parseTextRequest()))
}
/* 接收的数据 xml 格式 */
func (t *Base) parseTextRequest() *TextRequestBody {
body, err := ioutil.ReadAll(t.Req.Body)
if err != nil {
log.Fatal(err)
return nil
}
fmt.Println(string(body))
requestBody := &TextRequestBody{}
xml.Unmarshal(body, requestBody)
return requestBody
}

智慧安全方案
- 粉丝: 3927
最新资源
- 公司汽车保养场工程施工招标文件.doc
- 微信小程序校园微社区.zip
- 一个致力于微信小程序和 Web 端同构的解决方案.zip
- 大厦消防每日检查登记表.doc
- 安全内业资料整套填写示范(1).doc
- 园林绿化工程量计算入门讲义3.ppt
- 挖掘装载机的分类、现状与发展趋势分析.doc
- 典型的存储备份拓扑图.doc
- 鼎盛佳园B座临电、临水专项施工方案.docx
- QC提高桥面铺装外观施工质量.ppt
- 职业实践登记手册完成情况表.doc
- 机务维修管理手册R1-[兼容模式].pdf
- 污水处理厂外部污水主干管完善工程施工组织设计.doc
- 胖东来时代广场预案.doc
- 消防泵房及水池样图.pdf
- 安徽某电信综合楼施工组织设计(6层-框架结构).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


