Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

101 line
2.5KB

  1. //
  2. // {"access_token":"s0wf65p-KMzvYtH8qPu2qSX_EXLE2NaBgFHl7MZwedc7Kv_hdO0FG1QeUmBYJAGmQqJinPwFr67MRZwJee4rDnGVwhbuIfKs29N4ZJSXFP8fbAheuas08UuRe13UsdCtWSMcAFAGCW","expires_in":7200}
  3. //
  4. package main
  5. import (
  6. "encoding/json"
  7. "fmt"
  8. "io/ioutil"
  9. "log"
  10. "net/http"
  11. "time"
  12. )
  13. //SaveToPath : where the authtoken json file is stored
  14. const SaveToPath = "/tmp/wechat_hitxy_token"
  15. type authToken struct {
  16. AccessToken string `json:"access_token"`
  17. ExpireIn int64 `json:"expires_in"`
  18. Time time.Time `json:"created_at"`
  19. }
  20. func main2() {
  21. e, _ := renewAuthtoken()
  22. t, _ := readTokenFromFile("/tmp/wechat_hitxy_token")
  23. fmt.Println(isAuthTokenExpired(t), e)
  24. }
  25. func isAuthTokenExpired(t authToken) bool {
  26. seconds := fmt.Sprintf("%ds", t.ExpireIn) //7200s
  27. duration, _ := time.ParseDuration(seconds)
  28. expire := t.Time.Add(duration)
  29. return time.Now().After(expire)
  30. }
  31. func writeTokenToFile(body []byte, path string) {
  32. log.Printf("writing authtoke to %s\r\n", path)
  33. ioutil.WriteFile(path, body, 0600)
  34. }
  35. func readTokenFromFile(path string) (authToken, error) {
  36. var m authToken
  37. log.Printf("read authtoke from %s\r\n", path)
  38. body, err := ioutil.ReadFile(path)
  39. json.Unmarshal(body, &m)
  40. return m, err
  41. }
  42. func renewAuthtoken() (authToken, error) {
  43. //url := "http://vimeo.com/api/v2/brad/info.json"
  44. url := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx876e233fde456b7b&secret=4a91aa328569b10a9fb97adeb8b0af58"
  45. var myClient = &http.Client{Timeout: 20 * time.Second}
  46. r, err := myClient.Get(url)
  47. if err != nil {
  48. return authToken{}, err
  49. }
  50. defer r.Body.Close()
  51. var t authToken
  52. err = json.NewDecoder(r.Body).Decode(&t)
  53. if err != nil {
  54. return authToken{}, err
  55. }
  56. t.Time = time.Now()
  57. b, _ := json.Marshal(&t)
  58. writeTokenToFile(b, SaveToPath)
  59. return t, nil
  60. }
  61. //debugged http response
  62. func dummy() {
  63. var body []byte
  64. var response *http.Response
  65. var request *http.Request
  66. url := "http://vimeo.com/api/v2/brad/info.json"
  67. request, err := http.NewRequest("GET", url, nil)
  68. if err == nil {
  69. request.Header.Add("Content-Type", "application/json")
  70. //debug(httputil.DumpRequestOut(request, true))
  71. response, err = (&http.Client{}).Do(request)
  72. }
  73. if err == nil {
  74. defer response.Body.Close()
  75. //debug(httputil.DumpResponse(response, true))
  76. body, err = ioutil.ReadAll(response.Body)
  77. //json.NewDecoder(response.Body).Decode(m)
  78. }
  79. if err == nil {
  80. writeTokenToFile(body, "/tmp/wechat_hitxy_token")
  81. //m.Time = time.Now()
  82. } else {
  83. log.Fatalf("ERROR: %s", err)
  84. }
  85. }