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.

151 lines
3.3KB

  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. "name":"Member",
  14. "sub_button":[
  15. {
  16. "type":"click",
  17. "name":"My Profile",
  18. "key": "MEMBER_MYPROFILE"
  19. },
  20. {
  21. "type":"click",
  22. "name":"Credits",
  23. "key": "MEMBER_CREDITS"
  24. },
  25. {
  26. "type":"click",
  27. "name":"Search",
  28. "key":"MEMBER_SEARCH"
  29. },
  30. {
  31. "type":"click",
  32. "name":"Broadcast",
  33. "key":"MEMBER_BROADCAST"
  34. }
  35. ]
  36. },
  37. {
  38. "name":"Events",
  39. "sub_button":[
  40. {
  41. "type":"click",
  42. "name":"Start One",
  43. "key": "EVENT_STARTONE"
  44. },
  45. {
  46. "type":"click",
  47. "name":"Contribute Photo",
  48. "key": "EVENT_CONTRIBUTEPHOTO"
  49. },
  50. {
  51. "type":"click",
  52. "name":"Check in (on arrival)",
  53. "key": "EVENT_CHECKIN"
  54. },
  55. {
  56. "type":"click",
  57. "name":"Lucky Draw",
  58. "key": "EVENT_LUCKYDRAW"
  59. },
  60. {
  61. "type":"click",
  62. "name":"Upcoming",
  63. "key":"EVENTS_UPCOMING"
  64. }]
  65. },
  66. {
  67. "name":"Career Development",
  68. "sub_button":[
  69. {
  70. "type":"click",
  71. "name":"Job Opportunities",
  72. "key": "CAREERDEV_JOBS"
  73. },
  74. {
  75. "type":"click",
  76. "name":"Local Industry",
  77. "key": "CARDEV_INDUSTRY"
  78. },
  79. {
  80. "type":"click",
  81. "name":"Internatioal Opportunity",
  82. "key":"CARDEV_TRANSPORT"
  83. }]
  84. }
  85. ]
  86. }
  87. `)
  88. //CreateCustomMenu bulid a menu for wechat windows
  89. // 3 main manu max (< 4 mandarin words)
  90. // 5 sub items max (< 7 mandarin words)
  91. //success return nil
  92. //error return err
  93. func CreateCustomMenu(m []byte) error {
  94. atoken, err := GetAccessToken()
  95. if err != nil {
  96. return err
  97. }
  98. url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s", atoken)
  99. if len(m) == 0 {
  100. m = menu //using default menu
  101. }
  102. return jsonPostRequest(url, m)
  103. }
  104. //CreateDefaultMenu build a menu for wechat window
  105. //
  106. func CreateDefaultMenu() error {
  107. var b []byte
  108. return CreateCustomMenu(b)
  109. }
  110. //jsonPostRequest perform http post request with json body
  111. // url is the url to post to
  112. // jsonBody is the payload in http post request
  113. func jsonPostRequest(url string, jsonBody []byte) error {
  114. req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonBody))
  115. if err != nil {
  116. return err
  117. }
  118. req.Header.Set("X-Custom-Header", "Patrick Sun")
  119. req.Header.Set("Content-Type", "application/json")
  120. client := &http.Client{}
  121. resp, err := client.Do(req)
  122. if err != nil {
  123. return err
  124. }
  125. defer resp.Body.Close()
  126. fmt.Println("response Status:", resp.Status)
  127. fmt.Println("response Headers:", resp.Header)
  128. body, _ := ioutil.ReadAll(resp.Body)
  129. fmt.Println("response Body:", string(body))
  130. return nil
  131. }
  132. func GetMenu() {
  133. }