欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Go語言實(shí)現(xiàn)微信公眾平臺(tái)

 更新時(shí)間:2015年01月04日 15:38:09   投稿:hebedich  
這篇文章主要介紹了使用Go語言實(shí)現(xiàn)微信公眾平臺(tái),雖然不是全部代碼,但是也是給我們提供了一個(gè)非常好的思路,需要的朋友可以參考下

這個(gè)不是全部的代碼哦,只是一個(gè)演示可以驗(yàn)證跟接受post傳過來的消息并且能返回消息,中間的回復(fù)邏輯就待需要各位同志們自己寫了哈

復(fù)制代碼 代碼如下:

/*
 *@go語言實(shí)現(xiàn)公眾平臺(tái)
 */
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 := `"歡迎關(guān)注
        我的微信"`
  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)
}

相關(guān)文章

  • 在?Golang?中使用?Cobra?創(chuàng)建?CLI?應(yīng)用

    在?Golang?中使用?Cobra?創(chuàng)建?CLI?應(yīng)用

    這篇文章主要介紹了在?Golang?中使用?Cobra?創(chuàng)建?CLI?應(yīng)用,來看下?Cobra?的使用,這里我們使用的?go1.13.3?版本,使用?Go?Modules?來進(jìn)行包管理,需要的朋友可以參考下
    2022-01-01
  • golang中g(shù)in框架接入jwt使用token驗(yàn)證身份

    golang中g(shù)in框架接入jwt使用token驗(yàn)證身份

    本文主要介紹了golang中g(shù)in框架接入jwt使用token驗(yàn)證身份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 用go實(shí)現(xiàn)反向代理的代碼示例

    用go實(shí)現(xiàn)反向代理的代碼示例

    當(dāng)實(shí)現(xiàn)反向代理時(shí),Go語言是一個(gè)強(qiáng)大而受歡迎的選擇,Go具有出色的并發(fā)性和網(wǎng)絡(luò)編程支持,使其成為構(gòu)建高性能反向代理的理想工具,在本文中,我將介紹如何使用Go語言實(shí)現(xiàn)一個(gè)簡單的反向代理服務(wù)器,并提供相應(yīng)的源代碼,需要的朋友可以參考下
    2023-06-06
  • go語言實(shí)現(xiàn)接口查詢

    go語言實(shí)現(xiàn)接口查詢

    這篇文章主要介紹了go語言實(shí)現(xiàn)接口查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 利用dep代替go get獲取私有庫的方法教程

    利用dep代替go get獲取私有庫的方法教程

    go get 從指定源上面下載或者更新指定的代碼和依賴,并對(duì)他們進(jìn)行編譯和安裝,但go get功能比較差,所以下面這篇文章主要給大家介紹了關(guān)于利用dep代替go get獲取私有庫的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • Golang二維切片初始化的實(shí)現(xiàn)

    Golang二維切片初始化的實(shí)現(xiàn)

    這篇文章主要介紹了Golang二維切片初始化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Golang?編寫Tcp服務(wù)器的解決方案

    Golang?編寫Tcp服務(wù)器的解決方案

    Golang?作為廣泛用于服務(wù)端和云計(jì)算領(lǐng)域的編程語言,tcp?socket?是其中至關(guān)重要的功能,這篇文章給大家介紹Golang?開發(fā)?Tcp?服務(wù)器及拆包粘包、優(yōu)雅關(guān)閉的解決方案,感興趣的朋友一起看看吧
    2022-10-10
  • golang如何去除 context 的 deadline

    golang如何去除 context 的 deadline

    在使用 context 的時(shí)候遇到了開協(xié)程處理任務(wù)的情況,但是直接在協(xié)程里使用主線程的 context 會(huì)導(dǎo)致當(dāng)主線程返回時(shí)協(xié)程任務(wù)也會(huì)因?yàn)?nbsp;context cancel 而失敗,本文提供了兩種辦法可以取消掉 context 里的 timeout 和 deadline,再設(shè)置一個(gè)新的 timeout 上去
    2023-03-03
  • 手把手帶你走進(jìn)Go語言之運(yùn)算符解析

    手把手帶你走進(jìn)Go語言之運(yùn)算符解析

    這篇文章主要介紹了手Go語言之運(yùn)算符解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • go日志庫logrus的安裝及快速使用

    go日志庫logrus的安裝及快速使用

    這篇文章主要為大家介紹了go日志庫logrus的安裝及快速使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論