|
|
@@ -0,0 +1,151 @@
|
|
|
+package tool_controller
|
|
|
+
|
|
|
+import (
|
|
|
+ "crypto/md5"
|
|
|
+ "encoding/hex"
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "fohow.com/apps"
|
|
|
+ "fohow.com/apps/models/express_model"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ "net/url"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+func (self *ToolController) GetExpressCompany() {
|
|
|
+ //请求地址
|
|
|
+ juheURL := "http://v.juhe.cn/exp/com"
|
|
|
+ //初始化参数
|
|
|
+ param := url.Values{}
|
|
|
+ //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
|
|
|
+ param.Set("key", express_model.JUHE_KEY)
|
|
|
+
|
|
|
+ //发送请求
|
|
|
+ var netReturn map[string]interface{}
|
|
|
+
|
|
|
+ data, err := Get(juheURL, param)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Errorf("请求失败,错误信息:\r\n%v", err)
|
|
|
+ } else {
|
|
|
+ json.Unmarshal(data, &netReturn)
|
|
|
+ if netReturn["error_code"].(float64) == 0 {
|
|
|
+ fmt.Printf("接口返回result字段是:\r\n%v", netReturn["result"])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, net := range netReturn["result"].([]interface{}) {
|
|
|
+
|
|
|
+ str := net.(map[string]interface{})
|
|
|
+ fmt.Printf("接口返回result字段是:\r\n%v", str)
|
|
|
+ expressCompany := express_model.GetCompanyByNo(str["no"].(string), false)
|
|
|
+ if expressCompany == nil {
|
|
|
+ new(express_model.ExpressCompany).Create(str["no"].(string), str["com"].(string))
|
|
|
+ }
|
|
|
+
|
|
|
+ /* for k1, v1 := range net.(map[string]interface{}) {
|
|
|
+ //expressCompany := express_model.GetCompanyByNo(v1.["no"], false)
|
|
|
+ //if expressCompany == nil {
|
|
|
+ // new(express_model.ExpressCompany).Create(k1, v1.(string))
|
|
|
+ //}
|
|
|
+
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+ fmt.Printf("netReturn:%v\n", netReturn)
|
|
|
+ type Ret struct {
|
|
|
+ Ret map[string]interface{} `json:"resp"`
|
|
|
+ }
|
|
|
+
|
|
|
+ self.Data["json"] = &Ret{Ret: netReturn}
|
|
|
+ self.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+//获取物流信息
|
|
|
+func (self *ToolController) GetExpressInfo() {
|
|
|
+
|
|
|
+ expressNo := self.GetString("express_no")
|
|
|
+ expressCode := self.GetString("express_code")
|
|
|
+ sign := self.GetString("sign")
|
|
|
+
|
|
|
+ if len(expressNo) <= 0 || len(expressCode) <= 0 || len(sign) <= 0 {
|
|
|
+ self.ReturnError(200, apps.ParamsError, "", nil)
|
|
|
+ }
|
|
|
+ //验证参数
|
|
|
+ md5Sign := GenExpressPassword(expressNo)
|
|
|
+ if strings.ToUpper(md5Sign) != strings.ToUpper(sign) {
|
|
|
+ self.ReturnError(200, apps.ValidParamsError, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ //请求地址
|
|
|
+ juheURL := "http://v.juhe.cn/exp/index"
|
|
|
+
|
|
|
+ //初始化参数
|
|
|
+ param := url.Values{}
|
|
|
+
|
|
|
+ //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
|
|
|
+ param.Set("com", expressCode) //需要查询的快递公司编号
|
|
|
+ param.Set("no", expressNo) //需要查询的订单号
|
|
|
+ param.Set("key", express_model.JUHE_KEY) //应用APPKEY(应用详细页查询)
|
|
|
+ param.Set("dtype", "json") //返回数据的格式,xml或json,默认json
|
|
|
+ var netReturn map[string]interface{}
|
|
|
+
|
|
|
+ //发送请求
|
|
|
+ data, err := Get(juheURL, param)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Errorf("请求失败,错误信息:\r\n%v", err)
|
|
|
+ } else {
|
|
|
+ json.Unmarshal(data, &netReturn)
|
|
|
+ /* if netReturn["error_code"].(float64) == 0 {
|
|
|
+ //fmt.Printf("接口返回result字段是:\r\n%v", netReturn["result"])
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+ type Ret struct {
|
|
|
+ Ret map[string]interface{} `json:"resp"`
|
|
|
+ }
|
|
|
+
|
|
|
+ self.Data["json"] = &Ret{Ret: netReturn}
|
|
|
+ self.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+// get 网络请求
|
|
|
+func Get(apiURL string, params url.Values) (rs []byte, err error) {
|
|
|
+ var Url *url.URL
|
|
|
+ Url, err = url.Parse(apiURL)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Printf("解析url错误:\r\n%v", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ //如果参数中有中文参数,这个方法会进行URLEncode
|
|
|
+ Url.RawQuery = params.Encode()
|
|
|
+ resp, err := http.Get(Url.String())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("err:", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ return ioutil.ReadAll(resp.Body)
|
|
|
+}
|
|
|
+
|
|
|
+// post 网络请求 ,params 是url.Values类型
|
|
|
+func Post(apiURL string, params url.Values) (rs []byte, err error) {
|
|
|
+ resp, err := http.PostForm(apiURL, params)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ return ioutil.ReadAll(resp.Body)
|
|
|
+}
|
|
|
+
|
|
|
+//根据用户快递单号和Tkey得到物流信息查询的密钥
|
|
|
+func GenExpressPassword(expressNo string) string {
|
|
|
+ md5CtxUsn := md5.New()
|
|
|
+ md5CtxUsn.Write([]byte(express_model.ZT_PASSWORD))
|
|
|
+ UsnCipherStr := md5CtxUsn.Sum(nil)
|
|
|
+ UsnMd5Pwd := hex.EncodeToString(UsnCipherStr)
|
|
|
+
|
|
|
+ md5CtxTkey := md5.New()
|
|
|
+ md5CtxTkey.Write([]byte(fmt.Sprintf("%s%s", UsnMd5Pwd, expressNo)))
|
|
|
+ TkeyCipherStr := md5CtxTkey.Sum(nil)
|
|
|
+ md5PwdTkey := hex.EncodeToString(TkeyCipherStr)
|
|
|
+
|
|
|
+ return md5PwdTkey[0:12]
|
|
|
+}
|