Compare commits
No commits in common. "e7efe490167e81ec41c5c3751598cd15ae1e6b1b" and "93aa6dd20f97dae0874f9fe726c6d091d5595e1d" have entirely different histories.
e7efe49016
...
93aa6dd20f
2
go.mod
2
go.mod
|
@ -14,7 +14,6 @@ require (
|
||||||
github.com/elastic/go-licenser v0.4.1 // indirect
|
github.com/elastic/go-licenser v0.4.1 // indirect
|
||||||
github.com/elastic/go-sysinfo v1.1.1 // indirect
|
github.com/elastic/go-sysinfo v1.1.1 // indirect
|
||||||
github.com/elastic/go-windows v1.0.1 // indirect
|
github.com/elastic/go-windows v1.0.1 // indirect
|
||||||
github.com/go-resty/resty/v2 v2.7.0 // indirect
|
|
||||||
github.com/golang/snappy v0.0.3 // indirect
|
github.com/golang/snappy v0.0.3 // indirect
|
||||||
github.com/jcchavezs/porto v0.4.0 // indirect
|
github.com/jcchavezs/porto v0.4.0 // indirect
|
||||||
github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect
|
github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect
|
||||||
|
@ -35,7 +34,6 @@ require (
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
||||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
|
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
|
||||||
golang.org/x/mod v0.5.1 // indirect
|
golang.org/x/mod v0.5.1 // indirect
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
|
|
||||||
golang.org/x/sys v0.0.0-20211102192858-4dd72447c267 // indirect
|
golang.org/x/sys v0.0.0-20211102192858-4dd72447c267 // indirect
|
||||||
golang.org/x/tools v0.1.7 // indirect
|
golang.org/x/tools v0.1.7 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -21,8 +21,6 @@ github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6
|
||||||
github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU=
|
github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU=
|
||||||
github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUtJm0=
|
github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUtJm0=
|
||||||
github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss=
|
github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss=
|
||||||
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
|
|
||||||
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
|
|
||||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
|
@ -148,8 +146,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
|
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
package jtexpress
|
|
||||||
|
|
||||||
const (
|
|
||||||
apiHostProd = "https://ylstandard.jtexpress.vn"
|
|
||||||
apiHostDev = "https://demo-ylstandard.jtexpress.vn"
|
|
||||||
|
|
||||||
apiPathEstimateFee = "/yuenan-interface-web/jtpos/inquiry!freight.action"
|
|
||||||
apiPathCreateOrder = "/yuenan-interface-web/order/orderAction!createOrder.action"
|
|
||||||
apiPathCancelOrder = "/yuenan-interface-web/order/orderAction!createOrder.action"
|
|
||||||
apiPathTrackingOrder = ""
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
statusSuccess = "true"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
msgTypeEstimateFee = "FREIGHTQUERY"
|
|
||||||
msgTypeCreateOrder = "ORDERCREATE"
|
|
||||||
msgTypeCancelOrder = "UPDATE"
|
|
||||||
)
|
|
|
@ -1,120 +0,0 @@
|
||||||
package jtexpress
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/md5"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/go-resty/resty/v2"
|
|
||||||
|
|
||||||
"git.selly.red/Selly-Modules/3pl/util/base64"
|
|
||||||
"git.selly.red/Selly-Modules/3pl/util/pjson"
|
|
||||||
)
|
|
||||||
|
|
||||||
func New(digestKey, companyID string, isProd, debug bool) *Client {
|
|
||||||
host := apiHostDev
|
|
||||||
if isProd {
|
|
||||||
host = apiHostProd
|
|
||||||
}
|
|
||||||
c := &Client{
|
|
||||||
DigestKey: digestKey,
|
|
||||||
EccompanyID: companyID,
|
|
||||||
IsProduction: isProd,
|
|
||||||
Debug: debug,
|
|
||||||
host: host,
|
|
||||||
httpClient: resty.New().SetDebug(debug),
|
|
||||||
}
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
type Client struct {
|
|
||||||
DigestKey string
|
|
||||||
EccompanyID string
|
|
||||||
IsProduction bool
|
|
||||||
Debug bool
|
|
||||||
host string
|
|
||||||
httpClient *resty.Client
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) EstimateFee(req *EstimateFeeReq) (r Response) {
|
|
||||||
path := c.host + apiPathEstimateFee
|
|
||||||
data := pjson.ToJSONString(req)
|
|
||||||
body := map[string]string{
|
|
||||||
"logistics_interface": data,
|
|
||||||
"data_digest": c.getDigest(data),
|
|
||||||
"msg_type": msgTypeEstimateFee,
|
|
||||||
"eccompanyid": c.EccompanyID,
|
|
||||||
}
|
|
||||||
r.Request.Body = pjson.ToBytes(body)
|
|
||||||
r.Request.URL = path
|
|
||||||
resp, err := c.httpClient.R().
|
|
||||||
SetMultipartFormData(body).
|
|
||||||
Post(path)
|
|
||||||
if err != nil {
|
|
||||||
r.Error = fmt.Errorf("jtepxress: request %s, err %v", path, err)
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
r.Response.StatusCode = resp.StatusCode()
|
|
||||||
r.Response.Body = resp.Body()
|
|
||||||
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) CancelOrder(req *CancelOrderReq) (r Response) {
|
|
||||||
path := c.host + apiPathCancelOrder
|
|
||||||
data := pjson.ToJSONString(req)
|
|
||||||
body := map[string]string{
|
|
||||||
"logistics_interface": data,
|
|
||||||
"data_digest": c.getDigest(data),
|
|
||||||
"msg_type": msgTypeCancelOrder,
|
|
||||||
"eccompanyid": c.EccompanyID,
|
|
||||||
}
|
|
||||||
r.Request.Body = pjson.ToBytes(body)
|
|
||||||
r.Request.URL = path
|
|
||||||
resp, err := c.httpClient.R().
|
|
||||||
SetMultipartFormData(body).
|
|
||||||
Post(path)
|
|
||||||
if err != nil {
|
|
||||||
r.Error = fmt.Errorf("jtepxress: request %s, err %v", path, err)
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Response.StatusCode = resp.StatusCode()
|
|
||||||
r.Response.Body = resp.Body()
|
|
||||||
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) CreateOrder(req *CreateOrderReq) (r Response) {
|
|
||||||
path := c.host + apiPathCreateOrder
|
|
||||||
data := pjson.ToJSONString(req)
|
|
||||||
body := map[string]string{
|
|
||||||
"logistics_interface": data,
|
|
||||||
"data_digest": c.getDigest(data),
|
|
||||||
"msg_type": msgTypeCreateOrder,
|
|
||||||
"eccompanyid": c.EccompanyID,
|
|
||||||
}
|
|
||||||
r.Request.Body = pjson.ToBytes(body)
|
|
||||||
r.Request.URL = path
|
|
||||||
|
|
||||||
resp, err := c.httpClient.R().
|
|
||||||
SetMultipartFormData(body).
|
|
||||||
Post(path)
|
|
||||||
if err != nil {
|
|
||||||
r.Error = fmt.Errorf("jtepxress: request %s, err %v", path, err)
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Response.StatusCode = resp.StatusCode()
|
|
||||||
r.Response.Body = resp.Body()
|
|
||||||
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) getDigest(data string) string {
|
|
||||||
s := data + c.DigestKey
|
|
||||||
h := md5.New()
|
|
||||||
|
|
||||||
io.WriteString(h, s)
|
|
||||||
return base64.Encode([]byte(fmt.Sprintf("%x", h.Sum(nil))))
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
package jtexpress
|
|
||||||
|
|
||||||
type EstimateFeeLocation struct {
|
|
||||||
Prov string `json:"prov"`
|
|
||||||
City string `json:"city"`
|
|
||||||
Area string `json:"area"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type EstimateFeeReq struct {
|
|
||||||
Cusname string `json:"cusname"` // = customerid
|
|
||||||
SelfAddress int `json:"selfAddress"`
|
|
||||||
ProductType string `json:"producttype"`
|
|
||||||
GoodsValue string `json:"goodsvalue"`
|
|
||||||
ItemsValue string `json:"itemsvalue"`
|
|
||||||
Weight string `json:"weight"`
|
|
||||||
Sender EstimateFeeLocation `json:"sender"`
|
|
||||||
Receiver EstimateFeeLocation `json:"receiver"`
|
|
||||||
Decs string `json:"decs"`
|
|
||||||
FeeType string `json:"feetype"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateOrderReq struct {
|
|
||||||
Eccompanyid string `json:"eccompanyid"`
|
|
||||||
Customerid string `json:"customerid"`
|
|
||||||
Txlogisticid string `json:"txlogisticid"`
|
|
||||||
Ordertype int `json:"ordertype"`
|
|
||||||
Servicetype int `json:"servicetype"`
|
|
||||||
SelfAddress int `json:"selfAddress"`
|
|
||||||
Special string `json:"special"`
|
|
||||||
Partsign string `json:"partsign"`
|
|
||||||
Sender CreateOrderLocation `json:"sender"`
|
|
||||||
Receiver CreateOrderLocation `json:"receiver"`
|
|
||||||
Createordertime string `json:"createordertime"`
|
|
||||||
Sendstarttime string `json:"sendstarttime"`
|
|
||||||
Sendendtime string `json:"sendendtime"`
|
|
||||||
Paytype string `json:"paytype"`
|
|
||||||
Itemsvalue string `json:"itemsvalue"`
|
|
||||||
Goodsvalue string `json:"goodsvalue"`
|
|
||||||
IsInsured string `json:"isInsured"`
|
|
||||||
Items []OrderItem `json:"items"`
|
|
||||||
Weight string `json:"weight"`
|
|
||||||
Volume string `json:"volume"`
|
|
||||||
Remark string `json:"remark"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateOrderLocation struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
Phone string `json:"phone"`
|
|
||||||
Mobile string `json:"mobile"`
|
|
||||||
Prov string `json:"prov"`
|
|
||||||
City string `json:"city"`
|
|
||||||
Area string `json:"area"`
|
|
||||||
Address string `json:"address"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OrderItem struct {
|
|
||||||
Itemname string `json:"itemname"`
|
|
||||||
EnglishName string `json:"englishName"`
|
|
||||||
Number string `json:"number"`
|
|
||||||
Itemvalue string `json:"itemvalue"`
|
|
||||||
Desc string `json:"desc"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CancelOrderReq struct {
|
|
||||||
Eccompanyid string `json:"eccompanyid"`
|
|
||||||
Customerid string `json:"customerid"`
|
|
||||||
Logisticproviderid string `json:"logisticproviderid"`
|
|
||||||
Fieldlist []CancelOrderFieldList `json:"fieldlist"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CancelOrderFieldList struct {
|
|
||||||
Txlogisticid string `json:"txlogisticid"`
|
|
||||||
Fieldname string `json:"fieldname"`
|
|
||||||
Fieldvalue string `json:"fieldvalue"`
|
|
||||||
Remark string `json:"remark"`
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
package jtexpress
|
|
||||||
|
|
||||||
type EstimateFeeItemRes struct {
|
|
||||||
ProductType string `json:"producttype"`
|
|
||||||
Price string `json:"price"`
|
|
||||||
CodFee string `json:"codfee"`
|
|
||||||
InsuranceFee string `json:"insurancefee"`
|
|
||||||
DiscountFee string `json:"discountFee"`
|
|
||||||
Success string `json:"success"`
|
|
||||||
Reason string `json:"reason"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type EstimateFeeRes struct {
|
|
||||||
LogisticProviderID string `json:"logisticproviderid"`
|
|
||||||
ResponseItems []*EstimateFeeItemRes `json:"responseitems"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateOrderRes struct {
|
|
||||||
LogisticProviderID string `json:"logisticproviderid"`
|
|
||||||
ResponseItems []*CreateOrderItemRes `json:"responseitems"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateOrderItemRes struct {
|
|
||||||
Billcode string `json:"billcode"`
|
|
||||||
CodFee string `json:"codFee"`
|
|
||||||
Code string `json:"code"`
|
|
||||||
DiscountFee string `json:"discountFee"`
|
|
||||||
DispatchSite string `json:"dispatchSite"`
|
|
||||||
InquiryFee string `json:"inquiryFee"`
|
|
||||||
Insurancefee string `json:"insurancefee"`
|
|
||||||
Reason string `json:"reason"`
|
|
||||||
Reportnewurl string `json:"reportnewurl"`
|
|
||||||
Reporturl string `json:"reporturl"`
|
|
||||||
ReporturlJT string `json:"reporturlJT"`
|
|
||||||
Success string `json:"success"`
|
|
||||||
Transport string `json:"transport"`
|
|
||||||
Txlogisticid string `json:"txlogisticid"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CancelOrderRes struct {
|
|
||||||
LogisticProviderID string `json:"logisticproviderid"`
|
|
||||||
ResponseItems []*CreateOrderItemRes `json:"responseitems"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Response struct {
|
|
||||||
Request RequestInfo
|
|
||||||
Response ResponseInfo
|
|
||||||
Error error
|
|
||||||
}
|
|
||||||
|
|
||||||
type ResponseInfo struct {
|
|
||||||
StatusCode int
|
|
||||||
Body []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
type RequestInfo struct {
|
|
||||||
Method string
|
|
||||||
URL string
|
|
||||||
Headers map[string]string
|
|
||||||
Body []byte
|
|
||||||
}
|
|
Loading…
Reference in New Issue