1. 程式人生 > 實用技巧 >golang開發微信公眾號(使用測試號)

golang開發微信公眾號(使用測試號)

  • golang開發微信公眾號(使用測試號)

    • 開始開發之前的準備工作

      • 搞定內網穿透的問題

      • 微信公眾號測試號申請/登入:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

      • 登入成功之後,就會看到下面的介面

      • appID和appSecret,後面的很多開發都需要用到這兩個引數。介面配置資訊中的URL就是啟動內網穿透工具後,對映我們埠的網址,Token是我們自己設定的,和接下來在程式碼裡設定的Token一致,域名的話就是對映埠的網址去掉http協議頭就行了。

      • 微信平臺接入驗證的過程就是當我們配置好介面資訊(URL和Token)提交時,微信伺服器會發送一個http Get請求到我們填寫的URL上,這個Get請求中附帶有四個引數signature,timestamp,nonce,echostr,我們需要將我們自己設定的token和timestamp,nonce三個引數進行字典序排序(也就是按照首字母ABCD進行排序),然後將排序好的這三個引數組合成一個字串進行sha1加密,加密後的字串和signature進行比較(正確情況下,他們倆是一樣的),如果兩者相同,原樣返回echostr引數給微信伺服器,接入驗證就成功了,我們就成為微信開發者了,就可以寫各種微信功能了。(記得先開啟自己的伺服器,然後再點選提交)

      • golang驗證程式碼

        • package main
          
          import (
              "crypto/sha1"
              "fmt"
              "io"
              "log"
              "net/http"
              "sort"
              "strings"
          )
          
          const (
              token = "sixah" //設定token
          )
          
          func makeSignature(timestamp, nonce string) string { //本地計算signature
              si := []string{token, timestamp, nonce}
              sort.Strings(si)            //字典序排序
              str := strings.Join(si, "") //組合字串
              s := sha1.New()             //返回一個新的使用SHA1校驗的hash.Hash介面
              io.WriteString(s, str)      //WriteString函式將字串陣列str中的內容寫入到s中
              return fmt.Sprintf("%x", s.Sum(nil))
          }
          
          func validateUrl(w http.ResponseWriter, r *http.Request) bool {
              timestamp := strings.Join(r.Form["timestamp"], "")
              nonce := strings.Join(r.Form["nonce"], "")
              signature := strings.Join(r.Form["signature"], "")
              echostr := strings.Join(r.Form["echostr"], "")
              signatureGen := makeSignature(timestamp, nonce)
          
              if signatureGen != signature {
                  return false
              }
              fmt.Fprintf(w, echostr) //原樣返回eechostr給微信伺服器
              return true
          }
          
          func procSignature(w http.ResponseWriter, r *http.Request) {
              r.ParseForm() //Request需要解析
              if !validateUrl(w, r) {
                  log.Println("Wechat Service: This http request is not from wechat platform")
                  return
              }
              log.Println("validateUrl Ok")
          }
          
          func main() {
              log.Println("Wechat Service: Start!")
              http.HandleFunc("/", procSignature)
              err := http.ListenAndServe(":80", nil)
              if err != nil {
                  log.Println("Wechat Service: ListenAndServe Error: ", err)
              }
              log.Println("Wechat Service: Stop!")
          }
          
        • 配置成功之後,根據體驗介面許可權表寫自己的業務程式碼

        • 需要demo留言跟我說