源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用Go语言实现微信公众平台

  • 时间:2020-07-17 06:39 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用Go语言实现微信公众平台
这个不是全部的代码哦,只是一个演示可以验证跟接受post传过来的消息并且能返回消息,中间的回复逻辑就待需要各位同志们自己写了哈
*@go语言实现公众平台  */ package main import (  "crypto/sha1"  "encoding/xml"  "fmt"  "io"  "io/ioutil"  "log"  "net/http"  "sort"  "strings"  "time" ) type Request struct {  ToUserName   string  FromUserName string  CreateTime   time.Duration  MsgType      string  Content      string  MsgId        int } type Response struct {  ToUserName   string `xml:"xml>ToUserName"`  FromUserName string `xml:"xml>FromUserName"`  CreateTime   string `xml:"xml>CreateTime"`  MsgType      string `xml:"xml>MsgType"`  Content      string `xml:"xml>Content"`  MsgId        int    `xml:"xml>MsgId"` } func str2sha1(data string) string {  t := sha1.New()  io.WriteString(t, data)  return fmt.Sprintf("%x", t.Sum(nil)) } func action(w http.ResponseWriter, r *http.Request) {  postedMsg, err := ioutil.ReadAll(r.Body)  if err != nil {   log.Fatal(err)  }  r.Body.Close()  v := Request{}  xml.Unmarshal(postedMsg, &v)  if v.MsgType == "text" {   v := Request{v.ToUserName, v.FromUserName, v.CreateTime, v.MsgType, v.Content, v.MsgId}   output, err := xml.MarshalIndent(v, " ", " ")   if err != nil {    fmt.Printf("error:%v\n", err)   }   fmt.Fprintf(w, string(output))  } else if v.MsgType == "event" {   Content := `"欢迎关注         我的微信"`   v := Request{v.ToUserName, v.FromUserName, v.CreateTime, v.MsgType, Content, v.MsgId}   output, err := xml.MarshalIndent(v, " ", " ")   if err != nil {    fmt.Printf("error:%v\n", err)   }   fmt.Fprintf(w, string(output))  } } func checkSignature(w http.ResponseWriter, r *http.Request) {  r.ParseForm()  var token string = "你的token"  var signature string = strings.Join(r.Form["signature"], "")  var timestamp string = strings.Join(r.Form["timestamp"], "")  var nonce string = strings.Join(r.Form["nonce"], "")  var echostr string = strings.Join(r.Form["echostr"], "")  tmps := []string{token, timestamp, nonce}  sort.Strings(tmps)  tmpStr := tmps[0] + tmps[1] + tmps[2]  tmp := str2sha1(tmpStr)  if tmp == signature {   fmt.Fprintf(w, echostr)  } } func main() {  http.HandleFunc("/check", checkSignature)  http.HandleFunc("/", action)  http.ListenAndServe(":8080", nil) }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部