提交 7ad8686c authored 作者: zhanglibo's avatar zhanglibo

快递鸟

上级 7a87507d
package kdniao
import (
"context"
"github.com/gogf/gf/crypto/gmd5"
"github.com/gogf/gf/encoding/gbase64"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/text/gregex"
"time"
)
type Config struct {
AppKey string
API string
EBusinessID string
}
var server *Config
const PkgName = "kdniao"
const CacheKey = "kdniao:token"
func New(req *Config) {
server = req
return
}
type CommonReq struct {
RequestType string `json:"RequestType"`
EBusinessID string `json:"EBusinessID"`
DataType string `json:"DataType"` //请求、返回数据类型:2-json;
RequestData interface{} `json:"RequestData"`
DataSign string `json:"DataSign"`
}
func post(ctx context.Context, method string, RequestType string, req interface{}) (res string, err error) {
Start := gtime.TimestampMilli()
var params = CommonReq{
RequestType: RequestType,
EBusinessID: server.EBusinessID,
DataType: "2",
RequestData: gjson.New(req).MustToJsonString(),
DataSign: sign(req),
}
Request := g.Client().ContentType("application/x-www-form-urlencoded; charset=utf-8")
Request.Timeout(3 * time.Second)
resp, err := Request.Post(server.API+method, params)
defer func() {
_ = resp.Close()
ctx = context.WithValue(ctx, "Method", "POST")
ctx = context.WithValue(ctx, "URI", method)
if err != nil {
g.Log().Ctx(ctx).Infof("参数【%v】错误【%v】响应时间【%v】", gjson.New(params).MustToJsonString(), err.Error(), gtime.TimestampMilli()-Start)
} else {
g.Log().Ctx(ctx).Cat(PkgName).Infof("参数【%v】响应【%v】响应时间【%v】", gjson.New(params).MustToJsonString(), res, gtime.TimestampMilli()-Start)
}
}()
res = resp.ReadAllString()
res, _ = gregex.ReplaceString(`\s`, "", res)
return
}
func sign(req interface{}) string {
return gbase64.EncodeString(gmd5.MustEncryptString(gjson.New(req).MustToJsonString() + server.AppKey))
}
package kdniao
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type deliverKdniao struct {
}
var Deliver = deliverKdniao{}
type TrackReq struct {
CustomerName string `json:"CustomerName"`
DeliverNo string `json:"LogisticCode"`
Code string `json:"ShipperCode"`
}
type DeliverTrackRes struct {
EBusinessID string `json:"EBusinessID"`
ShipperCode string `json:"ShipperCode"`
LogisticCode string `json:"LogisticCode"`
State string `json:"State"`
StateEx string `json:"StateEx"`
Location string `json:"Location"`
Traces []struct {
Action string `json:"Action"`
AcceptStation string `json:"AcceptStation"`
AcceptTime string `json:"AcceptTime"`
Location string `json:"Location"`
} `json:"Traces"`
DeliveryMan string `json:"DeliveryMan"`
DeliveryManTel string `json:"DeliveryManTel"`
Success bool `json:"Success"`
}
//Track 物流轨迹
func (*deliverKdniao) Track(ctx context.Context, req TrackReq) (res *DeliverTrackRes, err error) {
const requestType string = "8001"
url := "Ebusiness/EbusinessOrderHandle.aspx"
result, err := post(ctx, url, requestType, req)
_ = gjson.New(result).Scan(&res)
return
}
type DeliverParseRes struct {
LogisticCode string `json:"LogisticCode"`
Shippers []struct {
ShipperName string `json:"ShipperName"`
ShipperCode string `json:"ShipperCode"`
} `json:"Shippers"`
EBusinessID string `json:"EBusinessID"`
Code string `json:"Code"`
Success bool `json:"Success"`
}
//Parse 单号识别
func (*deliverKdniao) Parse(ctx context.Context, req string) (res *DeliverParseRes, err error) {
const requestType string = "2002"
url := "Ebusiness/EbusinessOrderHandle.aspx"
result, err := post(ctx, url, requestType, g.Map{
"LogisticCode": req,
})
_ = gjson.New(result).Scan(&res)
return
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论