golang 和 python 微信菜單設定

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

公眾號開發中,需要發送http請求來設定菜單。寫了一個程式放在這裡,避免每次用postman發請求的麻煩。

需要在程式目錄下面放置menu.txt檔案,內容就是公眾號開發中菜單的json格式,比如:

{     "button":[     {          "type":"click",          "name":"今日歌曲",          "key":"V1001_TODAY_MUSIC"      },      {           "name":"菜單",           "sub_button":[           {               "type":"view",               "name":"搜尋",               "url":"http://www.soso.com/"            },            {               "type":"view",               "name":"視頻",               "url":"http://v.qq.com/"            },            {               "type":"click",               "name":"贊一下我們",               "key":"V1001_GOOD"            }]       }] }


golang代碼如下:

package mainimport ("bytes""encoding/json""flag""fmt""io/ioutil""net/http""os")const (WX_ID         = "xxxxxxxx"WX_SECRECT    = "xxxxxxxxxxxxxxxxxxxxxxxx"REQ_TOEKN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"GET_MENU_URL  = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=%s"SET_MENU_URL  = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s")func readMenu(path string) []byte {fi, err := os.Open(path)if err != nil {fmt.Println("read file error:", err)return nil}defer fi.Close()fd, err := ioutil.ReadAll(fi)if err != nil {fmt.Println("read menu file error:", err)return nil}return fd}func GetToken() string {url := fmt.Sprintf(REQ_TOEKN_URL, WX_ID, WX_SECRECT)resp, err := http.Get(url)if err != nil {fmt.Println("get token failed")return ""}defer resp.Body.Close()decoder := json.NewDecoder(resp.Body)var retMap map[string]interface{}err = decoder.Decode(&retMap)if nil != err {bodySlice, err := ioutil.ReadAll(resp.Body)fmt.Println("json decode error:", err, string(bodySlice))return ""}token, ok := retMap["access_token"].(string)if !ok {fmt.Println("ret package error:", retMap)return ""}return token}func SetMenu(file string, token string) bool {menuSlice := readMenu(file)if nil == menuSlice {return false}url := fmt.Sprintf(SET_MENU_URL, token)req, err := http.NewRequest("POST", url, bytes.NewReader(menuSlice))if nil != err {fmt.Println("new http request error:", err)return false}client := &http.Client{}resp, err := client.Do(req)if nil != err {fmt.Println("http client do error:", err)return false}defer resp.Body.Close()decoder := json.NewDecoder(resp.Body)var retMap map[string]interface{}err = decoder.Decode(&retMap)if nil != err {bodySlice, err := ioutil.ReadAll(resp.Body)fmt.Println("json decode error:", err, string(bodySlice))return false}fmt.Println("set menu ret:", retMap)return true}func GetMenu(token string) {url := fmt.Sprintf(GET_MENU_URL, token)resp, err := http.Get(url)if nil != err {fmt.Println("http get error:", err)return}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("read http body error:", err)return}var menuMap map[string]interface{}err = json.Unmarshal(body, &menuMap)if err != nil {fmt.Println("json decode menu failed:", err)return}menuIndent, err := json.MarshalIndent(menuMap, "", "    ")if err != nil {fmt.Println("json encode format failed:", err)return}fmt.Println("menu info:")fmt.Println(string(menuIndent))}func main() {menuFile := flag.String("menu", "menu.txt", "menu file path")setMenu := flag.String("set", "yes", "need to set menu")flag.Parse()accessToken := GetToken()if "" == accessToken {fmt.Println("get accecss token failed")return}if "yes" == *setMenu {SetMenu(*menuFile, accessToken)}GetMenu(accessToken)}

python代碼如下:

import jsonimport urllib2import requestsimport getoptimport syswxid = "xxxxxxxx"wxsecrect = "xxxxxxxxxxxxxxxxxxxxxx"reqTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"getMenuUrl = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=%s"setMenuUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s"def main(argv):try:opts, args = getopt.getopt(argv, "hr", ["help", "read"])except getopt.GetoptError:usage()sys.exit(2)needSet = Truefor opt, arg in opts:if opt in ("-h", "--help"):usage()sys.exit()elif opt in ("-r", "--read"):needSet = FalsefileObj = open("menu.txt")try:menuText = fileObj.read()finally:fileObj.close()url = reqTokenUrl % (wxid, wxsecrect)retStr = urllib2.urlopen(url).read()ret = json.loads(retStr)token = ret["access_token"]if needSet:url = setMenuUrl % tokenresp = requests.post(url, data=menuText)print resp.texturl = getMenuUrl % tokenretStr = urllib2.urlopen(url).read()print retStrif __name__ == "__main__":main(sys.argv[1:])


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.