提交 29eff638 authored 作者: gukai's avatar gukai

Merge branch 'aliNew'

package aliNew
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type addressAli struct {
}
var Address = addressAli{}
type AddressParseRes struct {
Result struct {
Address string `json:"address"`
AddressCode string `json:"addressCode"`
IsDefault bool `json:"isDefault"`
Latest bool `json:"latest"`
PostCode string `json:"postCode"`
} `json:"result"`
}
type AddressGetRes struct {
CommonRes
Result struct {
Code string `json:"code"`
Name string `json:"name"`
ParentCode string `json:"parentCode"`
Post string `json:"post"`
Children []string `json:"children"`
} `json:"result"`
}
type AddressGetChildRes struct {
CommonRes
Result []struct {
Code string `json:"code"`
Name string `json:"name"`
ParentCode string `json:"parentCode"`
} `json:"result"`
}
//Parse 根据地址解析地区码
func (s *addressAli) Parse(ctx context.Context, req string) (res *AddressParseRes, err error) {
method := "com.alibaba.trade/alibaba.trade.addresscode.parse"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"addressInfo": req,
})
_ = gjson.New(result).Scan(&res)
return
}
//Get 获取交易地址代码表详情
func (s *addressAli) Get(ctx context.Context, Code string) (res *AddressGetRes, err error) {
method := "com.alibaba.trade/alibaba.trade.addresscode.get"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"areaCode": Code,
"webSite": WebSite,
})
_ = gjson.New(result).Scan(&res)
return
}
//GetChild 获取交易地址的下一级信息
func (s *addressAli) GetChild(ctx context.Context, Code string) (res *AddressGetChildRes, err error) {
method := "com.alibaba.trade/alibaba.trade.addresscode.getchild"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"areaCode": Code,
"webSite": WebSite,
})
_ = gjson.New(result).Scan(&res)
return
}
差异被折叠。
package aliNew
import (
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type logisticsAli struct {
}
var Logistics = logisticsAli{}
type LogisticsInfosRes struct {
CommonRes
Result []struct {
Sender struct {
SenderName string `json:"senderName"`
SenderMobile string `json:"senderMobile"`
Encrypt string `json:"encrypt"`
SenderProvinceCode string `json:"senderProvinceCode"`
SenderCityCOde string `json:"senderCityC ode"`
SenderCountyCode string `json:"senderCountyCode"`
SenderAddress string `json:"senderAddress"`
SenderProvince string `json:"senderProvince"`
SenderCity string `json:"senderCity"`
SenderCounty string `json:"senderCounty"`
} `json:"sender"`
OrderEntryIds string `json:"orderEntryIds"`
LogisticsBillNo string `json:"logisticsBillNo"`
LogisticsId string `json:"logisticsId "`
Receiver struct {
ReceiverName string `json:"receiverName"`
ReceiverPhone string `json:"receiverPhone"`
ReceiverMobile string `json:"receiverMobile"`
Encrypt string `json:"encrypt"`
ReceiverProvinceCode string `json:"receiverProvinceCode"`
ReceiverCityCode string `json:"receiverCityCode"`
ReceiverCountyCode string `json:"receiverCountyCode"`
ReceiverAddresS string `json:"receiverAddres s"`
ReceiverProvince string `json:"receiverProvince"`
ReceiverCity string `json:"receiverCity"`
ReceiverCounty string `json:"receiverCounty"`
} `json:"receiver"`
LogisticsCompanyName string `json:"logisticsCompanyName"`
Status string `json:"status"`
SendGoods []struct {
GoodName string `json:"goodName"`
Quantity string `json:"quantity"`
Unit string `json:"unit"`
} `json:"sendGoods"`
Remarks string `json:"remarks"`
LogisticsCompanyId string `json:"logisticsCompanyId"`
} `json:"result"`
}
type LogisticsTraceRes struct {
CommonRes
LogisticsTrace []struct {
LogisticsId string `json:"logisticsId"`
OrderId int64 `json:"orderId"`
LogisticsBillNo string `json:"logisticsBillNo"`
LogisticsSteps []struct {
AcceptTime string `json:"acceptTime"`
Remark string `json:"remark"`
} `json:"logisticsSteps"`
} `json:"logisticsTrace"`
}
//Info 物流详情
func (*logisticsAli) Info(ctx context.Context, orderSn string) (res *LogisticsInfosRes, err error) {
method := "com.alibaba.logistics/alibaba.trade.getLogisticsInfos.buyerView"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"webSite": WebSite,
"orderId": orderSn,
})
_ = gjson.New(result).Scan(&res)
return
}
//Trace 物流轨迹
func (*logisticsAli) Trace(ctx context.Context, orderSn string) (res *LogisticsTraceRes, err error) {
method := "com.alibaba.logistics/alibaba.trade.getLogisticsTraceInfo.buyerView"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
"webSite": WebSite,
"orderId": orderSn,
})
_ = gjson.New(result).Scan(&res)
return
}
type LogisticsCompanyRes struct {
CommonRes
Result []LogisticsCompanyItem `json:"result"` //result
}
type LogisticsCompanyItem struct {
Id int64 `json:"id"`
CompanyName string `json:"companyName"` //物流公司名称
CompanyNo string `json:"companyNo"` // 物流公司编号
}
//Company 物流公司
func (s *logisticsAli) Company(ctx context.Context) (res *LogisticsCompanyRes, err error) {
method := "com.alibaba.logistics/alibaba.logistics.OpQueryLogisticCompanyList"
result, err := server.Post(ctx, method, g.Map{
"access_token": server.AccessToken,
})
_ = gjson.New(result).Scan(&res)
return
}
package aliNew
import (
"context"
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/util/gconv"
"sort"
"strings"
"time"
)
type Config struct {
Wsurl string
ApiUrl string
AppKey string
AppSecret string
AccessToken string
}
type CommonRes struct {
Success bool `json:"success"`
ErrorCode string `json:"errorCode"`
ErrorMessage string `json:"errorMessage"`
}
var server *Config
const PkgName = "aliNew"
const WebSite = "1688"
func New(config *Config) {
server = config
return
}
func (s *Config) CreateSign(signStr string) (sign string) {
//拼接参数
appSecret := []byte(s.AppSecret)
mac := hmac.New(sha1.New, appSecret)
mac.Write([]byte(signStr))
mdStr := hex.EncodeToString(mac.Sum(nil))
sign = strings.ToUpper(mdStr)
return
}
func (s *Config) sign(method string, param g.Map) g.Map {
var keys []string
mewparam := param
for k := range mewparam {
keys = append(keys, k)
}
sort.Strings(keys)
var signStr string
for _, v := range keys {
if v != "_aop_signature" {
signStr += v
signStr += gconv.String(mewparam[v])
}
}
//拼接参数
signStr = "param2/1/" + method + "/" + s.AppKey + signStr
param["_aop_signature"] = s.CreateSign(signStr)
return param
}
func (s *Config) Post(ctx context.Context, method string, params g.Map) (str string, err error) {
Start := gtime.TimestampMilli()
allparams := s.sign(method, params)
Url := s.ApiUrl + method + "/" + s.AppKey
Request := g.Client()
Request.SetHeader("Content-Type", "application/x-www-form-urlencoded")
resp, err := Request.Timeout(time.Second*5).Post(Url, allparams)
defer func() {
_ = resp.Close()
paramStr := gjson.New(params).MustToJsonString()
ctx = context.WithValue(ctx, "Method", "POST")
ctx = context.WithValue(ctx, "URI", Url)
if err != nil {
g.Log().Cat(PkgName).Ctx(ctx).Infof("参数【%v】错误【%v】响应时间【%v】", paramStr, err.Error(), gtime.TimestampMilli()-Start)
} else {
g.Log().Cat(PkgName).Ctx(ctx).Infof("参数【%v】响应【%v】响应时间【%v】", paramStr,str, gtime.TimestampMilli()-Start)
}
}()
str = resp.ReadAllString()
return
}
差异被折叠。
差异被折叠。
......@@ -18,6 +18,7 @@ const (
Itao = 15 //淘特
Hdh = 16 //会订货
TmNew = 17 //新版天猫
AliNew = 18//精选1688
)
var (
......@@ -91,6 +92,10 @@ func GetUpstreamList() (res interface{}, err error) {
"key": TmNew,
"name": GetUpstreamName(TmNew),
},
g.Map{
"key": AliNew,
"name": GetUpstreamName(AliNew),
},
}
return
}
......@@ -123,6 +128,8 @@ func GetUpstreamName(source int) string {
return "会订货"
case TmNew:
return "天猫精选"
case AliNew:
return "厂家直供"
default:
return "未知来源"
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论