直接贴控制器方法,关键部分在代码中注释标出
func (c *OrderController) ShippingDetail() {
type ShippingResult struct {
LengthPre int `json:"lengthPre"`
ComCode string `json:"comCode"`
NoPre string `json:"noPre"`
NoCount int `json:"noCount"`
}
//express为前端传来的快递单号
express := c.GetString("express_order")
//GET请求查询快递单号所属公司,多家的话取第一家(请求链接中XXXX部分替换为你快递100中申请到的授权码key)
geturl := "http://www.kuaidi100.com/autonumber/auto?key=XXXXXXXXXXXX&num="+express
resp, err := http.Get(geturl)
if err != nil {
c.Ctx.WriteString("查询失败,请至快递公司官网自行查询"+err.Error())
c.StopRun()
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
//快递单号不存在
if string(body)=="[]"{
c.Ctx.WriteString("物流单号异常,请检查单号是否正确")
c.StopRun()
}
var result []ShippingResult
bodyErr := json.Unmarshal(body,&result)
//签名错误,API错误,请求超时等错误
if bodyErr != nil{
c.Ctx.WriteString("查询失败,请至快递公司官网自行查询"+bodyErr.Error())
c.StopRun()
}
//POST请求查询快递详情
//expressCompany为此快递单号