|
|
|
|
|
|
|
|
|
|
|
package main |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
"encoding/json" |
|
|
|
|
|
"net/http" |
|
|
|
|
|
"strconv" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
//WechatError when API call goes wrong, it shows error message |
|
|
|
|
|
type WechatError struct { |
|
|
|
|
|
ErrCode int64 `json:"errcode"` |
|
|
|
|
|
ErrMsg string `json:"errmsg"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//getWechatAPIError given an http body, try to decode json error |
|
|
|
|
|
// caller needs to makesure content type is json |
|
|
|
|
|
//return |
|
|
|
|
|
// the error strucutre, on success |
|
|
|
|
|
// err: if json decode encounters problem |
|
|
|
|
|
func getWechatAPIError(respBody string) (result WechatError, err error) { |
|
|
|
|
|
err = json.Unmarshal([]byte(respBody), &result) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//see if a http response is json response |
|
|
|
|
|
func isJSON(r *http.Response) bool { |
|
|
|
|
|
contentType := r.Header.Get("Content-Type") |
|
|
|
|
|
contentLen := r.Header.Get("Content-Length") |
|
|
|
|
|
len, _ := strconv.Atoi(contentLen) |
|
|
|
|
|
|
|
|
|
|
|
if contentType == "text/plain" || contentType == "text/json" { |
|
|
|
|
|
if len < 10240 { //less than 10K |
|
|
|
|
|
return true |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//To Do: test error message @todo |