diff --git a/accessToken.go b/accessToken.go new file mode 100644 index 0000000..ebcd2be --- /dev/null +++ b/accessToken.go @@ -0,0 +1,100 @@ +// +// {"access_token":"s0wf65p-KMzvYtH8qPu2qSX_EXLE2NaBgFHl7MZwedc7Kv_hdO0FG1QeUmBYJAGmQqJinPwFr67MRZwJee4rDnGVwhbuIfKs29N4ZJSXFP8fbAheuas08UuRe13UsdCtWSMcAFAGCW","expires_in":7200} +// +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" + "time" +) + +//SaveToPath : where the authtoken json file is stored +const SaveToPath = "/tmp/wechat_hitxy_token" + +type authToken struct { + AccessToken string `json:"access_token"` + ExpireIn int64 `json:"expires_in"` + Time time.Time `json:"created_at"` +} + +func main2() { + e, _ := renewAuthtoken() + t, _ := readTokenFromFile("/tmp/wechat_hitxy_token") + fmt.Println(isAuthTokenExpired(t), e) +} + +func isAuthTokenExpired(t authToken) bool { + seconds := fmt.Sprintf("%ds", t.ExpireIn) //7200s + duration, _ := time.ParseDuration(seconds) + expire := t.Time.Add(duration) + return time.Now().After(expire) +} + +func writeTokenToFile(body []byte, path string) { + log.Printf("writing authtoke to %s\r\n", path) + ioutil.WriteFile(path, body, 0600) +} + +func readTokenFromFile(path string) (authToken, error) { + var m authToken + log.Printf("read authtoke from %s\r\n", path) + body, err := ioutil.ReadFile(path) + json.Unmarshal(body, &m) + return m, err +} + +func renewAuthtoken() (authToken, error) { + //url := "http://vimeo.com/api/v2/brad/info.json" + url := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx876e233fde456b7b&secret=4a91aa328569b10a9fb97adeb8b0af58" + var myClient = &http.Client{Timeout: 20 * time.Second} + r, err := myClient.Get(url) + if err != nil { + return authToken{}, err + } + defer r.Body.Close() + + var t authToken + err = json.NewDecoder(r.Body).Decode(&t) + + if err != nil { + return authToken{}, err + } + + t.Time = time.Now() + b, _ := json.Marshal(&t) + writeTokenToFile(b, SaveToPath) + return t, nil +} + +//debugged http response +func dummy() { + var body []byte + var response *http.Response + var request *http.Request + url := "http://vimeo.com/api/v2/brad/info.json" + + request, err := http.NewRequest("GET", url, nil) + if err == nil { + request.Header.Add("Content-Type", "application/json") + //debug(httputil.DumpRequestOut(request, true)) + response, err = (&http.Client{}).Do(request) + } + + if err == nil { + defer response.Body.Close() + //debug(httputil.DumpResponse(response, true)) + body, err = ioutil.ReadAll(response.Body) + //json.NewDecoder(response.Body).Decode(m) + } + + if err == nil { + writeTokenToFile(body, "/tmp/wechat_hitxy_token") + //m.Time = time.Now() + } else { + log.Fatalf("ERROR: %s", err) + } +} diff --git a/debug b/debug new file mode 100755 index 0000000..7f3426e Binary files /dev/null and b/debug differ diff --git a/listen.go b/listen.go deleted file mode 100644 index 76919ad..0000000 --- a/listen.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "fmt" - "net/http" - "net/url" -) - -func handler(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) - rq := r.URL.RawQuery - m, _ := url.ParseQuery(rq) - for index, element := range m { - fmt.Fprintf(w, "
%s => %s", index, element) - } - // fmt.Fprintf(w, m["k"][0]); -} - -func wechat_auth_setup_handler(w http.ResponseWriter, r *http.Request) { - rq := r.URL.RawQuery - m, _ := url.ParseQuery(rq) - fmt.Fprintf(w, m["echostr"][0]) -} - -func main() { - http.HandleFunc("/", handler) - http.HandleFunc("/api", wechat_auth_setup_handler) - //http.ListenAndServe("127.0.0.1:65500", nil) - http.ListenAndServe(":65500", nil) -} diff --git a/main.go b/main.go index a3ebeeb..7e1b2e6 100644 --- a/main.go +++ b/main.go @@ -1,109 +1,42 @@ -// -// {"access_token":"s0wf65p-KMzvYtH8qPu2qSX_EXLE2NaBgFHl7MZwedc7Kv_hdO0FG1QeUmBYJAGmQqJinPwFr67MRZwJee4rDnGVwhbuIfKs29N4ZJSXFP8fbAheuas08UuRe13UsdCtWSMcAFAGCW","expires_in":7200} -// package main import ( - "encoding/json" "fmt" - "io/ioutil" "log" "net/http" "net/http/httputil" - "time" + "net/url" ) -//SaveToPath : where the authtoken json file is stored -const SaveToPath = "/tmp/wechat_hitxy_token" - -type authToken struct { - AccessToken string `json:"access_token"` - ExpireIn int64 `json:"expires_in"` - Time time.Time `json:"created_at"` -} - -func main2() { - e, _ := renewAuthtoken() - t, _ := readTokenFromFile("/tmp/wechat_hitxy_token") - fmt.Println(isAuthTokenExpired(t), e) -} - -func debug(data []byte, err error) { - if err == nil { - fmt.Printf("%s\n\n", data) - } else { - log.Fatalf("%s\n\n", err) +func handler(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) + rq := r.URL.RawQuery + m, _ := url.ParseQuery(rq) + for index, element := range m { + fmt.Fprintf(w, "
%s => %s", index, element) } + fmt.Fprintf(w, m["k"][0]) + logRequestDebug(httputil.DumpRequest(r, true)) } -func isAuthTokenExpired(t authToken) bool { - seconds := fmt.Sprintf("%ds", t.ExpireIn) //7200s - duration, _ := time.ParseDuration(seconds) - expire := t.Time.Add(duration) - return time.Now().After(expire) -} - -func writeTokenToFile(body []byte, path string) { - log.Printf("writing authtoke to %s\r\n", path) - ioutil.WriteFile(path, body, 0600) +func apiV1Main(w http.ResponseWriter, r *http.Request) { + logRequestDebug(httputil.DumpRequest(r, true)) + rq := r.URL.RawQuery + m, _ := url.ParseQuery(rq) + fmt.Fprintf(w, m["echostr"][0]) } -func readTokenFromFile(path string) (authToken, error) { - var m authToken - log.Printf("read authtoke from %s\r\n", path) - body, err := ioutil.ReadFile(path) - json.Unmarshal(body, &m) - return m, err +func main() { + http.HandleFunc("/", handler) + http.HandleFunc("/api", apiV1Main) + //http.ListenAndServe("127.0.0.1:65500", nil) + http.ListenAndServe(":65500", nil) } -func renewAuthtoken() (authToken, error) { - //url := "http://vimeo.com/api/v2/brad/info.json" - url := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx876e233fde456b7b&secret=4a91aa328569b10a9fb97adeb8b0af58" - var myClient = &http.Client{Timeout: 20 * time.Second} - r, err := myClient.Get(url) - if err != nil { - return authToken{}, err - } - defer r.Body.Close() - - var t authToken - err = json.NewDecoder(r.Body).Decode(&t) - - if err != nil { - return authToken{}, err - } - - t.Time = time.Now() - b, _ := json.Marshal(&t) - writeTokenToFile(b, SaveToPath) - return t, nil -} - -//debugged http response -func dummy() { - var body []byte - var response *http.Response - var request *http.Request - url := "http://vimeo.com/api/v2/brad/info.json" - - request, err := http.NewRequest("GET", url, nil) +func logRequestDebug(data []byte, err error) { if err == nil { - request.Header.Add("Content-Type", "application/json") - debug(httputil.DumpRequestOut(request, true)) - response, err = (&http.Client{}).Do(request) - } - - if err == nil { - defer response.Body.Close() - debug(httputil.DumpResponse(response, true)) - body, err = ioutil.ReadAll(response.Body) - //json.NewDecoder(response.Body).Decode(m) - } - - if err == nil { - writeTokenToFile(body, "/tmp/wechat_hitxy_token") - //m.Time = time.Now() + fmt.Printf("%s\n\n", data) } else { - log.Fatalf("ERROR: %s", err) + log.Fatalf("%s\n\n", err) } }