当前位置: 首页 > 编程笔记 >

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

潘佐
2023-03-14
本文向大家介绍使用Go语言实现微信公众平台,包括了使用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)

}

 类似资料:
  • 本文向大家介绍Java微信公众平台开发(1) 接入微信公众平台,包括了Java微信公众平台开发(1) 接入微信公众平台的使用技巧和注意事项,需要的朋友参考一下 前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当

  • 本文向大家介绍php实现微信公众平台发红包功能,包括了php实现微信公众平台发红包功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php微信公众平台给用户发红包的具体代码,供大家参考,具体内容如下 直接上代码: 代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍Python实现微信公众平台自定义菜单实例,包括了Python实现微信公众平台自定义菜单实例的使用技巧和注意事项,需要的朋友参考一下 首先先获取access_token,并保存与全局之中 利用上面获得的access_token,创建自定义表单

  • 本文向大家介绍微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解,包括了微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现微信公众号支付功能。分享给大家供大家参考,具体如下:    直言无讳,我就是一个初涉微信开发的小白,写这篇博客的原因:一是为了给自己做下备忘记录,以便以后能回忆这条程序猿的坎坷路;二是希望能帮

  • 本文向大家介绍php微信公众平台开发类实例,包括了php微信公众平台开发类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php微信公众平台开发类。分享给大家供大家参考。具体分析如下: ThinkWechat.php类文件如下: 希望本文所述对大家的php程序设计有所帮助。

  • 本文向大家介绍.net开发微信公众平台实例教程,包括了.net开发微信公众平台实例教程的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了.net开发微信公众平台的方法。分享给大家供大家参考。具体实现方法如下: 一、说明: 公众平台信息接口为开发者提供了一种新的消息处理方式,只有申请成为开发者后,你才能使用公众平台的开发功能,在这里你需要填写一个URL和一个Token,这两项信息也需要你拥有自