這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
公眾平台的開發,說穿了一文不值,因為公眾平台存在的目的就是給人用的,不存在什麼技術門檻,但過程中坑實在太多,記錄下來,希望能幫到其他人吧。
找到入口
在基本配置菜單中,可以看到修改配置按鈕(群裡真有找不到的),點進去
填參數
如果伺服器已經通過nginx等方式將地址映射到了80連接埠,可以像這麼寫(Token和Key當然已經換掉了)
開始搓代碼
在文檔中,官方是這麼寫的:將這3個參數按照字典序排序,剛開始我是懵逼的,後來發現就是各語言版本的sort…接下來就好說了
我們加個路由,這個地址就是填入伺服器配置中的url
接著在controllers中添加WxConnect.go檔案
package controllersimport ( "github.com/astaxie/beego" "strings" "sort" "crypto/sha1" "io" "fmt")type WxConnectController struct { beego.Controller}const Token = "Dswq1322s1dfsf31s2af321231rew"func (c *WxConnectController) Get() { //接入驗證 這是首次對接 填寫url後 伺服器會發一個請求過來 //c.Ctx.Request.URL-------------wx_connect?signature=038d75ed5485b9881a01b3b93e85f9fff28ea739&echostr=5756456183388806654×tamp=1476173150&nonce=1093541731 //開發人員提交資訊(包括URL、Token)後,伺服器將發送Http Get請求到填寫的URL上, //GET請求攜帶四個參數:signature、timestamp、nonce和echostr。公眾號服務程式應該按如下要求進行接入驗證 timestamp, nonce,signatureIn := c.GetString("timestamp"), c.GetString("nonce"),c.GetString("signature") signatureGen := makeSignature(timestamp, nonce) //將加密後獲得的字串與signature對比,如果一致,說明該請求來源於 if signatureGen != signatureIn { fmt.Printf("signatureGen != signatureIn signatureGen=%s,signatureIn=%s\n", signatureGen, signatureIn) c.Ctx.WriteString("") } else { //如果請求來自於,則原樣返回echostr參數內容 以上完成後,接入驗證就會生效,開發人員配置提交就會成功。 echostr := c.GetString("echostr") c.Ctx.WriteString(echostr) }}func makeSignature(timestamp, nonce string) string { //1. 將 plat_token、timestamp、nonce三個參數進行字典序排序 sl := []string{Token, timestamp, nonce} sort.Strings(sl) //2. 將三個參數字串拼接成一個字串進行sha1加密 s := sha1.New() io.WriteString(s, strings.Join(sl, "")) return fmt.Sprintf("%x", s.Sum(nil))}
重新跑一下項目,點擊設定頁面上的提交按鈕,應該就能顯示通過,請仔細校對參數,複製粘貼猶佳。
至此,公眾平台已經向你敞開了大門(記得點啟用按鈕,否則光驗證通過沒什麼卵用)。