最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用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)文章

  • 使用Go語言創(chuàng)建靜態(tài)文件服務(wù)器問題

    使用Go語言創(chuàng)建靜態(tài)文件服務(wù)器問題

    這篇文章主要介紹了使用Go語言創(chuàng)建靜態(tài)文件服務(wù)器,本文通過試了代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解Go語言單元測試中如何解決MySQL存儲(chǔ)依賴問題

    詳解Go語言單元測試中如何解決MySQL存儲(chǔ)依賴問題

    MySQL?存儲(chǔ)就是一個(gè)非常常見的外部依賴,這篇文章主要來和大家一起探討在?Go?語言中編寫單元測試時(shí),如何解決?MySQL?存儲(chǔ)依賴,需要的可以參考一下
    2023-07-07
  • Go語言操作redis數(shù)據(jù)庫的方法

    Go語言操作redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了Go語言操作redis數(shù)據(jù)庫的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Go語言列表List獲取元素的4種方式

    Go語言列表List獲取元素的4種方式

    Golang的列表元素的獲取可以使用內(nèi)置的 Front 函數(shù)獲取頭結(jié)點(diǎn),使用 Back 函數(shù)獲取尾結(jié)點(diǎn),使用 Prev 獲取前一個(gè)結(jié)點(diǎn),使用 Next 獲取下一個(gè)結(jié)點(diǎn),本文就介紹了Go語言列表List獲取元素的4種方式,感興趣的可以了解一下
    2022-04-04
  • Go 中實(shí)現(xiàn)超時(shí)控制的方案

    Go 中實(shí)現(xiàn)超時(shí)控制的方案

    這篇文章主要介紹了Go 里的超時(shí)控制實(shí)現(xiàn)方案,本文給大家?guī)韮煞N解決方案,第一種方案是 Time.After(d Duration),第二種方案是利用 context,go 的 context 功能強(qiáng)大,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • GoLang并發(fā)編程中條件變量sync.Cond的使用

    GoLang并發(fā)編程中條件變量sync.Cond的使用

    Go標(biāo)準(zhǔn)庫提供Cond原語的目的是,為等待/通知場景下的并發(fā)問題提供支持,本文主要介紹了Go并發(fā)編程sync.Cond的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-01-01
  • Golang實(shí)現(xiàn)驗(yàn)證一個(gè)字符串是否為URL

    Golang實(shí)現(xiàn)驗(yàn)證一個(gè)字符串是否為URL

    在實(shí)際開發(fā)過程中,有時(shí)候會(huì)遇到?URL?的校驗(yàn)問題,Go?語言中有哪些方法去驗(yàn)證一個(gè)字符串是否滿足?URL?格式呢?本文就來和大家詳細(xì)講講
    2023-04-04
  • 用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之項(xiàng)目介紹

    用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之項(xiàng)目介紹

    從本節(jié)開始將從后端到前端一步一步實(shí)現(xiàn)一個(gè)Go語言Web服務(wù),后端除了MySQL驅(qū)動(dòng),全部使用Go語言標(biāo)準(zhǔn)庫來實(shí)現(xiàn)一個(gè)小型項(xiàng)目,本篇將簡單的介紹一下項(xiàng)目開發(fā)要準(zhǔn)備的流程,感興趣的同學(xué)可以閱讀一下
    2023-05-05
  • Go語言中的Struct結(jié)構(gòu)體

    Go語言中的Struct結(jié)構(gòu)體

    這篇文章介紹了Go語言中的Struct結(jié)構(gòu)體,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang根據(jù)job數(shù)量動(dòng)態(tài)控制每秒?yún)f(xié)程的最大創(chuàng)建數(shù)量方法詳解

    Golang根據(jù)job數(shù)量動(dòng)態(tài)控制每秒?yún)f(xié)程的最大創(chuàng)建數(shù)量方法詳解

    這篇文章主要介紹了Golang根據(jù)job數(shù)量動(dòng)態(tài)控制每秒?yún)f(xié)程的最大創(chuàng)建數(shù)量方法
    2024-01-01

最新評(píng)論

高阳县| 施秉县| 高邑县| 千阳县| 梅河口市| 靖江市| 寻乌县| 湖口县| 黔西| 东源县| 岫岩| 老河口市| 扎赉特旗| 鹤壁市| 广宁县| 太和县| 遂溪县| 东乡县| 盐源县| 清远市| 邻水| 禹城市| 姜堰市| 桐梓县| 开平市| 修武县| 海门市| 巴林右旗| 额济纳旗| 威海市| 屏东县| 二连浩特市| 仁化县| 兰州市| 河南省| 台北县| 海林市| 凭祥市| 武山县| 连山| 承德市|