| 
					
				 | 
			
			
				@@ -0,0 +1,110 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package wechat 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"bytes" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"encoding/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"errors" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"git.chuangxin1.com/cx/myth" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func checkErrorWithBody(msg myth.HTTPMessage) (body []byte, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if msg.StatusCode == 200 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var res ResponseMsg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		err = json.Unmarshal(msg.Body, &res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if res.ErrCode != 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				err = errors.New(res.ErrMsg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				body = msg.Body 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		err = errors.New(`HTTP StatusCode not 200`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func checkError(msg myth.HTTPMessage) (res Response, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if msg.StatusCode == 200 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		err = json.Unmarshal(msg.Body, &res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if res.ErrCode != 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				err = errors.New(res.ErrMsg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		err = errors.New(`HTTP StatusCode not 200`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func getJSON(uri string) (res Response, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var msg myth.HTTPMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if msg, err = myth.Get(uri, "", "", map[string]string{}); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	res, err = checkError(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func getBody(uri string) (body []byte, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var msg myth.HTTPMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if msg, err = myth.Get(uri, "", "", map[string]string{}); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	body, err = checkErrorWithBody(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func postXML(url string, data []byte) (res Response, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		msg     myth.HTTPMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		headers = make(map[string]string) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Accept-Encoding"] = "gzip, deflate, br" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Accept"] = "application/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Content-Type"] = "application/xml; charset=utf-8" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	res, err = checkError(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func postJSON(url string, data []byte) (res Response, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		msg     myth.HTTPMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		headers = make(map[string]string) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Accept-Encoding"] = "gzip, deflate, br" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Accept"] = "application/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Content-Type"] = "application/json; charset=utf-8" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	res, err = checkError(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func postJSONBody(uri string, data []byte) (body []byte, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		msg     myth.HTTPMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		headers = make(map[string]string) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Accept-Encoding"] = "gzip, deflate, br" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Accept"] = "application/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	headers["Content-Type"] = "application/json; charset=utf-8" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	msg, err = myth.Post(uri, "", "", headers, bytes.NewReader(data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	body, err = checkErrorWithBody(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |