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留言跟我說


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM