選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

110 行
2.6KB

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