Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

87 lines
1.9KB

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. )
  8. //menu is a json definition
  9. var menu = []byte(`
  10. {
  11. "button":[
  12. {
  13. "type":"click",
  14. "name":"今日歌曲",
  15. "key":"V1001_TODAY_MUSIC"
  16. },
  17. {
  18. "name":"菜单",
  19. "sub_button":[
  20. {
  21. "type":"view",
  22. "name":"搜索",
  23. "url":"http://www.soso.com/"
  24. },
  25. {
  26. "type":"click",
  27. "name":"赞一下我们",
  28. "key":"V1001_GOOD"
  29. }]
  30. }]
  31. }
  32. `)
  33. //CreateCustomMenu bulid a menu for wechat windows
  34. // 3 main manu max (< 4 mandarin words)
  35. // 5 sub items max (< 7 mandarin words)
  36. //success return nil
  37. //error return err
  38. func CreateCustomMenu(m []byte) error {
  39. atoken, err := GetAccessToken()
  40. if err != nil {
  41. return err
  42. }
  43. url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s", atoken)
  44. if len(m) == 0 {
  45. m = menu //using default menu
  46. }
  47. return jsonPostRequest(url, m)
  48. }
  49. //CreateDefaultMenu build a menu for wechat window
  50. //
  51. func CreateDefaultMenu() error {
  52. var b []byte
  53. return CreateCustomMenu(b)
  54. }
  55. //jsonPostRequest perform http post request with json body
  56. // url is the url to post to
  57. // jsonBody is the payload in http post request
  58. func jsonPostRequest(url string, jsonBody []byte) error {
  59. req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonBody))
  60. if err != nil {
  61. return err
  62. }
  63. req.Header.Set("X-Custom-Header", "Patrick Sun")
  64. req.Header.Set("Content-Type", "application/json")
  65. client := &http.Client{}
  66. resp, err := client.Do(req)
  67. if err != nil {
  68. return err
  69. }
  70. defer resp.Body.Close()
  71. fmt.Println("response Status:", resp.Status)
  72. fmt.Println("response Headers:", resp.Header)
  73. body, _ := ioutil.ReadAll(resp.Body)
  74. fmt.Println("response Body:", string(body))
  75. return nil
  76. }