commit
930d551962
@ -0,0 +1,3 @@
|
|||||||
|
.idea
|
||||||
|
test
|
||||||
|
*_test.go
|
@ -0,0 +1,47 @@
|
|||||||
|
package auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"git.oa00.com/go/jcook-sdk/util/http"
|
||||||
|
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
PAppKey = "app_key"
|
||||||
|
PAppSecret = "app_secret"
|
||||||
|
PRefreshToken = "refresh_token"
|
||||||
|
Url = "https://open-oauth.jd.com/oauth2/refresh_token"
|
||||||
|
PGrantType = "grant_type"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Bearer struct {
|
||||||
|
AccessToken string `json:"access_token"`
|
||||||
|
ExpiresIn uint `json:"expires_in"`
|
||||||
|
RefreshToken string `json:"refresh_token"`
|
||||||
|
Scope string `json:"scope"`
|
||||||
|
UID string `json:"uid"`
|
||||||
|
Time int64 `json:"time"`
|
||||||
|
TokenType string `json:"token_type"`
|
||||||
|
Code uint `json:"code"`
|
||||||
|
Xid string `json:"xid"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func RefreshToken(appKey string, appSecret string, token string) (*Bearer, error) {
|
||||||
|
value := url.Values{}
|
||||||
|
value.Set(PAppKey, appKey)
|
||||||
|
value.Set(PAppSecret, appSecret)
|
||||||
|
value.Set(PRefreshToken, token)
|
||||||
|
value.Set(PGrantType, "refresh_token")
|
||||||
|
data, err := http.JGet(Url, value, nil)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var b Bearer
|
||||||
|
if err = json.Unmarshal(data, &b); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &b, nil
|
||||||
|
}
|
@ -0,0 +1,100 @@
|
|||||||
|
package mq
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"git.oa00.com/go/jcook-sdk/util/http"
|
||||||
|
"git.oa00.com/go/jcook-sdk/util/security"
|
||||||
|
"net/url"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const maxSize = "32"
|
||||||
|
const autoAck = "false"
|
||||||
|
|
||||||
|
const (
|
||||||
|
PTopic = "topic"
|
||||||
|
PConsumerGroupID = "consumerGroupId"
|
||||||
|
PSize = "size"
|
||||||
|
PAck = "ack"
|
||||||
|
PAccessKey = "accessKey"
|
||||||
|
PDateTime = "dateTime"
|
||||||
|
PSignature = "signature"
|
||||||
|
PToken = "token"
|
||||||
|
PAckAction = "ackAction"
|
||||||
|
PAckIndex = "ackIndex"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
AccessKey string
|
||||||
|
SecretKey string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(ak string, sk string) *Client {
|
||||||
|
return &Client{
|
||||||
|
AccessKey: ak,
|
||||||
|
SecretKey: sk,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type UrlBase interface {
|
||||||
|
GetTopicName() string
|
||||||
|
GetConsumerGroupID() string
|
||||||
|
GetEndPoint() string
|
||||||
|
}
|
||||||
|
|
||||||
|
func getUTCStr() string {
|
||||||
|
return time.Now().UTC().Format("2006-01-02T15:04:05Z")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) Pull(r UrlBase) ([]byte, error) {
|
||||||
|
mq := fmt.Sprintf("%s/%s/messages", http.FormatUrl(r.GetEndPoint(), false), "v2")
|
||||||
|
value := url.Values{}
|
||||||
|
data := map[string]string{
|
||||||
|
PTopic: r.GetTopicName(),
|
||||||
|
PConsumerGroupID: r.GetConsumerGroupID(),
|
||||||
|
PSize: maxSize,
|
||||||
|
PAck: autoAck,
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range data {
|
||||||
|
value.Set(k, v)
|
||||||
|
}
|
||||||
|
t := getUTCStr()
|
||||||
|
data[PAccessKey] = c.AccessKey
|
||||||
|
data[PDateTime] = t
|
||||||
|
|
||||||
|
sign := security.Sha1OrderlyWithBase64(c.SecretKey, data)
|
||||||
|
|
||||||
|
header := map[string]string{
|
||||||
|
PAccessKey: c.AccessKey,
|
||||||
|
PDateTime: t,
|
||||||
|
PSignature: sign,
|
||||||
|
}
|
||||||
|
|
||||||
|
return http.JGet(mq, value, header)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) Ack(r UrlBase, index string, action string) ([]byte, error) {
|
||||||
|
ack := fmt.Sprintf("%s/%s/ack", http.FormatUrl(r.GetEndPoint(), false), "v2")
|
||||||
|
t := getUTCStr()
|
||||||
|
data := map[string]string{
|
||||||
|
PTopic: r.GetTopicName(),
|
||||||
|
PAccessKey: c.AccessKey,
|
||||||
|
PAckAction: action,
|
||||||
|
PAckIndex: index,
|
||||||
|
PConsumerGroupID: r.GetConsumerGroupID(),
|
||||||
|
PDateTime: t,
|
||||||
|
}
|
||||||
|
sign := security.Sha1OrderlyWithBase64(c.SecretKey, data)
|
||||||
|
|
||||||
|
header := map[string]string{
|
||||||
|
PAccessKey: c.AccessKey,
|
||||||
|
PDateTime: t,
|
||||||
|
PSignature: sign,
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonStr, _ := json.Marshal(&data)
|
||||||
|
|
||||||
|
return http.JPostJson(ack, jsonStr, header)
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package mq
|
||||||
|
|
||||||
|
type CtSkuChangeChannel struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t CtSkuChangeChannel) GetTopicName() string {
|
||||||
|
return "open_message_ct_sku_change_7cf1b0ca92a1d3a2ccdbc07ce014a2c7"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t CtSkuChangeChannel) GetConsumerGroupID() string {
|
||||||
|
return "open_message_408486475484"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t CtSkuChangeChannel) GetEndPoint() string {
|
||||||
|
return "jcq-shared-004-httpsrv-nlb-FI.jvessel-open-hb.jdcloud.com:8080"
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package mq
|
||||||
|
|
||||||
|
type TestChannel struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t TestChannel) GetTopicName() string {
|
||||||
|
return "open_message_internet_test"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t TestChannel) GetConsumerGroupID() string {
|
||||||
|
return "open_message_20210625"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t TestChannel) GetEndPoint() string {
|
||||||
|
return "jcq-internet-001-httpsrv-nlb-FI.jvessel-open-hb.jdcloud.com:8080"
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package rest
|
||||||
|
|
||||||
|
// GetAddressRequest 地址转换请求
|
||||||
|
type GetAddressRequest struct {
|
||||||
|
Uname string `json:"uname"`
|
||||||
|
Province string `json:"province"`
|
||||||
|
City string `json:"city"`
|
||||||
|
Street string `json:"street"`
|
||||||
|
Town string `json:"town"`
|
||||||
|
Address string `json:"address"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAddressRequest) GetApiName() string {
|
||||||
|
return "jingdong.jingdong.ks.getJDAddress"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAddressRequest) GetRespName() string {
|
||||||
|
return "jingdong_jingdong_ks_getJDAddress_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAddressRequest) GetRespObj() interface{} {
|
||||||
|
return GetAddressResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAddressResponse 返回参数.
|
||||||
|
type GetAddressResponse struct {
|
||||||
|
Response struct {
|
||||||
|
Message string `json:"message"`
|
||||||
|
Result GetAddressParams `json:"result"`
|
||||||
|
Code string `json:"code"`
|
||||||
|
}
|
||||||
|
Code string `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetAddressParams struct {
|
||||||
|
Address string `json:"address"`
|
||||||
|
TownID uint `json:"townid"`
|
||||||
|
ProvinceID uint `json:"provinceid"`
|
||||||
|
CityID uint `json:"cityid"`
|
||||||
|
StreetID uint `json:"streetid"`
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// GetAfsAddressRequest 获取售后回寄地址.
|
||||||
|
type GetAfsAddressRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
LogisticsAddressParam LogisticsAddressParam `json:"logisticsAddressParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type LogisticsAddressParam struct {
|
||||||
|
AfsServiceID uint `json:"afsServiceId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAfsAddressRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.logistics.getLogisticsAddress"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAfsAddressRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_logistics_getLogisticsAddress_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAfsAddressRequest) GetRespObj() interface{} {
|
||||||
|
return AddressResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddressResponse 返回参数.
|
||||||
|
type AddressResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data AddressParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddressParams struct {
|
||||||
|
Address string `json:"address"`
|
||||||
|
ContactsZipCode string `json:"contactsZipCode"`
|
||||||
|
ContactsName string `json:"ContactsName"`
|
||||||
|
ContactsMobile string `json:"ContactsMobile"`
|
||||||
|
}
|
@ -0,0 +1,91 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// QueryCanAfterSaleRequest 是否可以有售后.
|
||||||
|
type QueryCanAfterSaleRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
CanApplyInfoParam CanApplyInfoParam `json:"canApplyInfoParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CanApplyInfoParam struct {
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type canApplyType uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
CannotApply canApplyType = iota
|
||||||
|
CanApply
|
||||||
|
)
|
||||||
|
|
||||||
|
var canApplyTypeMap = map[canApplyType]string{
|
||||||
|
CannotApply: "不可申请",
|
||||||
|
CanApply: "可申请",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o canApplyType) String() string {
|
||||||
|
if value, ok := canApplyTypeMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type returnType uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
Return returnType = 10
|
||||||
|
Exchange returnType = 20
|
||||||
|
)
|
||||||
|
|
||||||
|
var returnTypeMap = map[returnType]string{
|
||||||
|
Return: "退货",
|
||||||
|
Exchange: "换货",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o returnType) String() string {
|
||||||
|
if value, ok := returnTypeMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryCanAfterSaleRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.operate.apply.getIsCanApplyInfo"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryCanAfterSaleRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_operate_apply_getIsCanApplyInfo_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryCanAfterSaleRequest) GetRespObj() interface{} {
|
||||||
|
return CanAfterSaleResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
//CanAfterSaleResponse 返回参数.
|
||||||
|
type CanAfterSaleResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data CanAfterSaleParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CanAfterSaleParams struct {
|
||||||
|
CanApply canApplyType `json:"canApply"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
AppliedNum uint `json:"appliedNum"`
|
||||||
|
CannotApplyTip string `json:"cannotApplyTip"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
AfsSupportedTypes []SupportParams `json:"afsSupportedTypes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SupportParams struct {
|
||||||
|
AfsTypeName string `json:"afsTypeName"`
|
||||||
|
AfsType returnType `json:"afsType"`
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// CancelAfsServiceDetailRequest 售后服务单取消.
|
||||||
|
type CancelAfsServiceDetailRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
CancelAfsServiceParam ServiceDetailParam `json:"cancelAfsServiceParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CancelAfsServiceDetailRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.servicenbill.cancelAfsService"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CancelAfsServiceDetailRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_servicenbill_cancelAfsService_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CancelAfsServiceDetailRequest) GetRespObj() interface{} {
|
||||||
|
return CancelAfsResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CancelAfsResponse 售后单创建返回.
|
||||||
|
type CancelAfsResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data CancelAfsParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type cancelState uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
CancelStateNot cancelState = iota + 1
|
||||||
|
CancelStateSuccess
|
||||||
|
CancelStateFail
|
||||||
|
)
|
||||||
|
|
||||||
|
var cancelStateMap = map[cancelState]string{
|
||||||
|
CancelStateNot: "不可取消",
|
||||||
|
CancelStateSuccess: "取消成功",
|
||||||
|
CancelStateFail: "取消失败",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o cancelState) String() string {
|
||||||
|
if value, ok := cancelStateMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type CancelAfsParams struct {
|
||||||
|
CancelState cancelState `json:"cancelState"`
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// CreateAfsRequest 售后单申请.
|
||||||
|
type CreateAfsRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
AfsApplyParam ApplyParam `json:"afsApplyParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SkuQuantityParam struct {
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
Quantity uint `json:"quantity"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ApplyParam struct {
|
||||||
|
ApplyReasonName string `json:"applyReasonName"`
|
||||||
|
ApplyReasonID uint `json:"applyReasonId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
ChannelAfsApplyID string `json:"channelAfsApplyId"`
|
||||||
|
AfsType returnType `json:"afsType"`
|
||||||
|
QuestionPic string `json:"questionPic"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
SkuQuantity SkuQuantityParam `json:"skuQuantity"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CreateAfsRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.operate.apply.createAfsApply"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CreateAfsRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_operate_apply_createAfsApply_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CreateAfsRequest) GetRespObj() interface{} {
|
||||||
|
return CreateAfsResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateAfsResponse 售后单创建返回.
|
||||||
|
type CreateAfsResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data CreateAfsParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CreateAfsParams struct {
|
||||||
|
AfsApplyID uint `json:"afsApplyId"`
|
||||||
|
ChannelAfsApplyID string `json:"channelAfsApplyId"`
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// GetAfsServiceDetailRequest 获取售后详情.
|
||||||
|
type GetAfsServiceDetailRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
AfsServiceDetailParam ServiceDetailParam `json:"afsServiceDetailParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServiceDetailParam struct {
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
AfsServiceID uint `json:"afsServiceId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAfsServiceDetailRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.servicenbill.getAfsServiceDetail"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAfsServiceDetailRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_servicenbill_getAfsServiceDetail_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetAfsServiceDetailRequest) GetRespObj() interface{} {
|
||||||
|
return GetAfsResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAfsResponse 售后单查询返回.
|
||||||
|
type GetAfsResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data GetAfsParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetAfsParams struct {
|
||||||
|
ProcessResult uint `json:"processResult"`
|
||||||
|
CustomerName string `json:"customerName"`
|
||||||
|
ApplyReasonID uint `json:"applyReasonId"`
|
||||||
|
ApplyReasonName string `json:"applyReasonName"`
|
||||||
|
ApproveResult uint `json:"approveResult"`
|
||||||
|
AfsApplyTime string `json:"afsApplyTime"`
|
||||||
|
ApproveResultName string `json:"approveResultName"`
|
||||||
|
ProcessResultName string `json:"processResultName"`
|
||||||
|
AfsType returnType `json:"afsType"`
|
||||||
|
ReturnWareType uint `json:"returnWareType"`
|
||||||
|
CustomerMobile string `json:"customerMobile"`
|
||||||
|
QuestionPic string `json:"questionPic"`
|
||||||
|
ApproveNotes string `json:"approveNotes"`
|
||||||
|
ApprovedDate string `json:"approvedDate"`
|
||||||
|
CustomerEmail string `json:"customerEmail"`
|
||||||
|
ProcessedDate string `json:"processedDate"`
|
||||||
|
AfsApplyID uint `json:"afsApplyId"`
|
||||||
|
AfsTypeName string `json:"afsTypeName"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
AfsServiceState uint `json:"afsServiceState"`
|
||||||
|
AfsServiceID uint `json:"afsServiceId"`
|
||||||
|
NewOrderID uint `json:"newOrderId"`
|
||||||
|
AfsServiceStep uint `json:"afsServiceStep"`
|
||||||
|
AfsServiceStateName string `json:"afsServiceStateName"`
|
||||||
|
ProcessNotes string `json:"processNotes"`
|
||||||
|
AfsServiceStepName string `json:"afsServiceStepName"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
SkuQuantity SkuQuantity `json:"skuQuantity"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SkuQuantity struct {
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
Quantity uint `json:"quantity"`
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// PostBackLogisticsBillRequest 上传物流.
|
||||||
|
type PostBackLogisticsBillRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
LogisticsBillParam LogisticsBillParam `json:"logisticsBillParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type LogisticsBillParam struct {
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
AfsServiceID uint `json:"afsServiceId"`
|
||||||
|
LogisticsCompany string `json:"logisticsCompany"`
|
||||||
|
WaybillCode string `json:"waybillCode"`
|
||||||
|
SendGoodsDate string `json:"sendGoodsDate"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o PostBackLogisticsBillRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.logistics.postBackLogisticsBillParam"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o PostBackLogisticsBillRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_logistics_postBackLogisticsBillParam_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o PostBackLogisticsBillRequest) GetRespObj() interface{} {
|
||||||
|
return PostBackLogisticsBillResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PostBackLogisticsBillResponse 售后单创建返回.
|
||||||
|
type PostBackLogisticsBillResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data PostBackLogisticsBillParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PostBackLogisticsBillParams struct {
|
||||||
|
PostBackResult bool `json:"postBackResult"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package afs
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
type ApplyReasonParam struct {
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
AfsType returnType `json:"afsType"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryAfterSaleReasonRequest 查询售后原因.
|
||||||
|
type QueryAfterSaleReasonRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
ApplyReasonParam ApplyReasonParam `json:"applyReasonParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryAfterSaleReasonRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.afs.operate.apply.getApplyReason"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryAfterSaleReasonRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_afs_operate_apply_getApplyReason_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryAfterSaleReasonRequest) GetRespObj() interface{} {
|
||||||
|
return ReasonResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReasonResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data []ReasonParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReasonParams struct {
|
||||||
|
ApplyReasonName string `json:"applyReasonName"`
|
||||||
|
ApplyReasonID uint `json:"applyReasonId"`
|
||||||
|
NeedUploadPic bool `json:"needUploadPic"`
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
package rest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"git.oa00.com/go/jcook-sdk/util/http"
|
||||||
|
"git.oa00.com/go/jcook-sdk/util/security"
|
||||||
|
"github.com/mitchellh/mapstructure"
|
||||||
|
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Requester interface {
|
||||||
|
GetApiName() string
|
||||||
|
GetRespObj() interface{}
|
||||||
|
GetRespName() string
|
||||||
|
}
|
||||||
|
|
||||||
|
const UnKnow = "UnKnow"
|
||||||
|
|
||||||
|
type Address struct {
|
||||||
|
CityID uint `json:"cityId"`
|
||||||
|
CountyID uint `json:"countyId"`
|
||||||
|
ProvinceID uint `json:"provinceId"`
|
||||||
|
TownID uint `json:"townId"`
|
||||||
|
FullAddress string `json:"fullAddress"`
|
||||||
|
AddressDetail string `json:"addressDetail"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CtpProtocol struct {
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
TraceID string `json:"traceId"`
|
||||||
|
OpName string `json:"opName"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Response struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data interface{} `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
PAppKey = "app_key"
|
||||||
|
PApi = "method"
|
||||||
|
PAccessToken = "access_token"
|
||||||
|
PVersion = "v"
|
||||||
|
PFormat = "format"
|
||||||
|
PTimestamp = "timestamp"
|
||||||
|
PSign = "sign"
|
||||||
|
PJsonParamKey = "360buy_param_json"
|
||||||
|
PCode = "code"
|
||||||
|
PSubCode = "sub_code"
|
||||||
|
PMsg = "msg"
|
||||||
|
PSubMsg = "sub_msg"
|
||||||
|
Rest = "https://api.jd.com/routerjson"
|
||||||
|
Version = "2.0"
|
||||||
|
Format = "json"
|
||||||
|
ResponseSuffix = "_responce"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
AppKey string
|
||||||
|
AppSecret string
|
||||||
|
AccessKey string
|
||||||
|
OpName string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(appKey string, AppSecret string, AccessKey string, OpName string) *Client {
|
||||||
|
return &Client{
|
||||||
|
AppKey: appKey,
|
||||||
|
AppSecret: AppSecret,
|
||||||
|
AccessKey: AccessKey,
|
||||||
|
OpName: OpName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) Exec(r Requester) (interface{}, error) {
|
||||||
|
j, _ := json.Marshal(&r)
|
||||||
|
jsonParams := string(j)
|
||||||
|
t := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
data := map[string]string{
|
||||||
|
PAppKey: c.AppKey,
|
||||||
|
PApi: r.GetApiName(),
|
||||||
|
PAccessToken: c.AccessKey,
|
||||||
|
PVersion: Version,
|
||||||
|
PFormat: Format,
|
||||||
|
PTimestamp: t,
|
||||||
|
PJsonParamKey: jsonParams,
|
||||||
|
}
|
||||||
|
|
||||||
|
sign := security.Md5OrderlyWithSecret(c.AppSecret, data)
|
||||||
|
data[PSign] = sign
|
||||||
|
|
||||||
|
params := url.Values{}
|
||||||
|
|
||||||
|
for key, value := range data {
|
||||||
|
params.Add(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := http.JGet(Rest, params, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !strings.Contains(string(resp), r.GetRespName()) {
|
||||||
|
return nil, fmt.Errorf("system err: %s", string(resp))
|
||||||
|
}
|
||||||
|
|
||||||
|
var temp map[string]interface{}
|
||||||
|
err = json.Unmarshal(resp, &temp)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
fmt.Println(temp)
|
||||||
|
result := temp[r.GetRespName()]
|
||||||
|
response := r.GetRespObj()
|
||||||
|
if err = mapstructure.Decode(result, &response); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return response, err
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package logisitics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetFeeRequest 获取物流费用请求.
|
||||||
|
type GetFeeRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"protocol"`
|
||||||
|
ApiFreightFeeParam ApiFreightFeeParam `json:"apiFreightFeeParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SkuInfo struct {
|
||||||
|
SkuPrice float64 `json:"skuPrice"`
|
||||||
|
SkuID string `json:"skuId"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
Quantity uint `json:"quantity"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ApiFreightFeeParam struct {
|
||||||
|
Address rest.Address `json:"address"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
PaymentType uint `json:"paymentType"`
|
||||||
|
OrderFee float64 `json:"orderFee"`
|
||||||
|
SkuList []SkuInfo `json:"skuList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetFeeRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.getFreightFee"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetFeeRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_getFreightFee_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetFeeRequest) GetRespObj() interface{} {
|
||||||
|
return GetFeeResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFeeResponse 获取物流费用
|
||||||
|
type GetFeeResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data GetFeeParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetFeeParams struct {
|
||||||
|
FreightFee float64 `json:"freightFee"`
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package logisitics
|
||||||
|
|
||||||
|
// GetLogisticsRequest 获取物流轨迹.
|
||||||
|
type GetLogisticsRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetLogisticsRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.getLogistics"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetLogisticsRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_getLogistics_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetLogisticsRequest) GetRespObj() interface{} {
|
||||||
|
return GetLogisticsResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetLogisticsResponse 获取物流轨迹返回.
|
||||||
|
type GetLogisticsResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data []GetLogisticsParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetLogisticsParams struct {
|
||||||
|
LogisticsName string `json:"logisticsName"`
|
||||||
|
WaybillCode string `json:"waybillCode"`
|
||||||
|
OperatorNodeList []OperatorNode `json:"operatorNodeList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type OperatorNode struct {
|
||||||
|
Content string `json:"content"`
|
||||||
|
GroupState string `json:"groupState"`
|
||||||
|
ScanState string `json:"scanState"`
|
||||||
|
MsgTime string `json:"msgTime"`
|
||||||
|
SystemOperator string `json:"systemOperator"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
package logisitics
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// GetMethodRequest 获取物流方法.
|
||||||
|
type GetMethodRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"protocol"`
|
||||||
|
ApiShipmentTypeParam ApiShipmentTypeParam `json:"apiShipmentTypeParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ApiShipmentTypeParam struct {
|
||||||
|
Address rest.Address `json:"address"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
PaymentType uint `json:"paymentType"`
|
||||||
|
SkuList []SkuInfo `json:"skuList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetMethodRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.getShipmentType"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetMethodRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_getShipmentType_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetMethodRequest) GetRespObj() interface{} {
|
||||||
|
return GetMethodResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMethodResponse 获取物流轨迹返回.
|
||||||
|
type GetMethodResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data GetMethodParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type shipmentType uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
JdSelf shipmentType = iota + 1
|
||||||
|
JdOther
|
||||||
|
Third
|
||||||
|
Normal
|
||||||
|
NotSupport = 9
|
||||||
|
)
|
||||||
|
|
||||||
|
var shipmentTypeMap = map[shipmentType]string{
|
||||||
|
JdSelf: "京东配送",
|
||||||
|
JdOther: "京配转三方配送",
|
||||||
|
Third: "第三方配送",
|
||||||
|
Normal: "普通快递配送",
|
||||||
|
NotSupport: "不支持配送",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o shipmentType) String() string {
|
||||||
|
if value, ok := shipmentTypeMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetMethodParams struct {
|
||||||
|
ShipmentType shipmentType `json:"shipmentType"`
|
||||||
|
ShipmentInfoList []ShipmentInfoParams `json:"shipmentInfoList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShipmentInfoParams struct {
|
||||||
|
SkuID string `json:"skuId"`
|
||||||
|
ShipmentDetail ShipmentDetailParams `json:"shipmentDetail"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShipmentDetailParams struct {
|
||||||
|
ShipmentType shipmentType `json:"shipmentType"`
|
||||||
|
AttachmentList []Attachment `json:"attachmentList"`
|
||||||
|
GiftList []Gift `json:"giftList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Attachment struct {
|
||||||
|
SkuID string `json:"skuId"`
|
||||||
|
ShipmentType shipmentType `json:"shipmentType"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Gift struct {
|
||||||
|
SkuID string `json:"skuId"`
|
||||||
|
ShipmentType shipmentType `json:"shipmentType"`
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// GetSkuStockRequest 获取库存状态.
|
||||||
|
type GetSkuStockRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
StockStateParam StockStateParam `json:"stockStateParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SkuQuantity struct {
|
||||||
|
Quantity uint `json:"quantity"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type StockStateParam struct {
|
||||||
|
Address rest.Address `json:"address"`
|
||||||
|
SkuQuantityList []SkuQuantity `json:"skuQuantityList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuStockRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.ware.stock.queryAreaStockState"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuStockRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_ware_stock_queryAreaStockState_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuStockRequest) GetRespObj() interface{} {
|
||||||
|
return GetSkuStockResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSkuStockResponse 库存状态返回.
|
||||||
|
type GetSkuStockResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
StockStateList []StockState `json:"stockStateList"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type areaStockState uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
SoldOut areaStockState = iota
|
||||||
|
SoldIn
|
||||||
|
StockIng
|
||||||
|
)
|
||||||
|
|
||||||
|
var areaStockStateMap = map[areaStockState]string{
|
||||||
|
SoldOut: "无库存",
|
||||||
|
SoldIn: "有库存",
|
||||||
|
StockIng: "采购中",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o areaStockState) String() string {
|
||||||
|
if value, ok := areaStockStateMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type StockState struct {
|
||||||
|
AreaStockState areaStockState `json:"areaStockState"`
|
||||||
|
LeadTime string `json:"leadTime"`
|
||||||
|
SkuQuantity SkuQuantity `json:"skuQuantity"`
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
// QueryInvoiceInfoRequest 查询发票详情.
|
||||||
|
type QueryInvoiceInfoRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryInvoiceInfoRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.finance.getInvoiceDetail"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryInvoiceInfoRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_finance_getInvoiceDetail_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryInvoiceInfoRequest) GetRespObj() interface{} {
|
||||||
|
return QueryInvoiceInfoResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryInvoiceInfoResponse 查询发票详情.
|
||||||
|
type QueryInvoiceInfoResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data []InvoiceDetail `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type InvoiceDetail struct {
|
||||||
|
Valid string `json:"valid"`
|
||||||
|
TaxRate float64 `json:"taxRate"`
|
||||||
|
UpdateTime string `json:"updateTime"`
|
||||||
|
Remark string `json:"remark"`
|
||||||
|
IvcCode string `json:"ivcCode"`
|
||||||
|
IvcContentType uint `json:"ivcContentType"`
|
||||||
|
IvcTitle string `json:"ivcTitle"`
|
||||||
|
IvcContentName string `json:"ivcContentName"`
|
||||||
|
FileUrl string `json:"fileUrl"`
|
||||||
|
ExpandColumn string `json:"expandColumn"`
|
||||||
|
IvcTime string `json:"ivcTime"`
|
||||||
|
IvcNo string `json:"ivcNo"`
|
||||||
|
IvcType uint `json:"ivcType"`
|
||||||
|
TotalTaxPrice float64 `json:"totalTaxPrice"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
TotalPrice float64 `json:"totalPrice"`
|
||||||
|
InvoiceSkuDetailList []InvoiceSkuDetail `json:"invoiceSkuDetailList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type InvoiceSkuDetail struct {
|
||||||
|
IvcSkuName string `json:"ivcSkuName"`
|
||||||
|
Unit string `json:"unit"`
|
||||||
|
Num uint `json:"num"`
|
||||||
|
Price float64 `json:"price"`
|
||||||
|
TaxRate float64 `json:"taxRate"`
|
||||||
|
IvcPrice float64 `json:"ivcPrice"`
|
||||||
|
Isn string `json:"isn"`
|
||||||
|
IvcNum uint `json:"ivcNum"`
|
||||||
|
SkuId string `json:"skuId"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// CancelOrderRequest 取消订单.
|
||||||
|
type CancelOrderRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
CancelReasonCode uint `json:"cancelReasonCode"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CancelOrderRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.cancelOrder"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CancelOrderRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_cancelOrder_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o CancelOrderRequest) GetRespObj() interface{} {
|
||||||
|
return CancelOrderResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CancelOrderResponse 取消订单返回.
|
||||||
|
type CancelOrderResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data CancelParam `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type cancelStatus uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
CancelFail cancelStatus = 1
|
||||||
|
CancelSuccess cancelStatus = 3
|
||||||
|
)
|
||||||
|
|
||||||
|
var cancelStatusMap = map[cancelStatus]string{
|
||||||
|
CancelFail: "取消失败",
|
||||||
|
CancelSuccess: "取消成功",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o cancelStatus) String() string {
|
||||||
|
if value, ok := cancelStatusMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type CancelParam struct {
|
||||||
|
CancelStatus cancelStatus `json:"cancelStatus"`
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
// ConfirmOrderRequest 确认收货请求.
|
||||||
|
type ConfirmOrderRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ClientPort string `json:"clientPort"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
ClientIp string `json:"clientIp"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o ConfirmOrderRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.confirmDelivery"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o ConfirmOrderRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_confirmDelivery_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o ConfirmOrderRequest) GetRespObj() interface{} {
|
||||||
|
return ConfirmOrderResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConfirmOrderResponse 确认收货返回.
|
||||||
|
type ConfirmOrderResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
@ -0,0 +1,140 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// QueryOrderDetailRequest 订单详细.
|
||||||
|
type QueryOrderDetailRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
TraceID string `json:"traceId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
ClientIp string `json:"clientIp"`
|
||||||
|
ClientPort string `json:"clientPort"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryOrderDetailRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.getOrderDetail"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryOrderDetailRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_getOrderDetail_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryOrderDetailRequest) GetRespObj() interface{} {
|
||||||
|
return QueryOrderDetailResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryOrderDetailResponse 订单详情.
|
||||||
|
type QueryOrderDetailResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data Detail `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Detail struct {
|
||||||
|
SkuList []SkuDetailParam `json:"skuList"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
BaseOrderInfo BaseOrder `json:"baseOrderInfo"`
|
||||||
|
OrderRelationFee RelateFee `json:"orderRelationFee"`
|
||||||
|
Shipment ShipmentParam `json:"shipment"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShipmentParam struct {
|
||||||
|
ShipmentType uint `json:"shipmentType"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RelateFee struct {
|
||||||
|
ShouldPaymentFee float64 `json:"shouldPaymentFee"`
|
||||||
|
FreightFee float64 `json:"freightFee"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SkuDetailParam struct {
|
||||||
|
ImgUrl string `json:"imgUrl"`
|
||||||
|
Weight float64 `json:"weight"`
|
||||||
|
Color string `json:"color"`
|
||||||
|
CategoryID uint `json:"categoryId"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
ShouldPrice float64 `json:"shouldPrice"`
|
||||||
|
Quantity uint `json:"Quantity"`
|
||||||
|
Bulk float64 `json:"bulk"`
|
||||||
|
SkuGiftType uint `json:"skuGiftType"`
|
||||||
|
MainSkuID uint `json:"mainSkuId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type status int
|
||||||
|
|
||||||
|
const (
|
||||||
|
Submit status = 0
|
||||||
|
WaitPay = 1
|
||||||
|
IsPay = 4
|
||||||
|
WaitPrint = 6
|
||||||
|
Pick = 7
|
||||||
|
OutOfStock = 8
|
||||||
|
WaitConfirm = 15
|
||||||
|
UserReject = 16
|
||||||
|
Lock = 20
|
||||||
|
Cancel = -100
|
||||||
|
)
|
||||||
|
|
||||||
|
var statusMap = map[status]string{
|
||||||
|
Submit: "提单成功",
|
||||||
|
WaitPay: "等待付款",
|
||||||
|
IsPay: "已支付",
|
||||||
|
WaitPrint: "待打印",
|
||||||
|
Pick: "拣货完成",
|
||||||
|
OutOfStock: "出库完成",
|
||||||
|
WaitConfirm: "待用户确认收货",
|
||||||
|
UserReject: "用户拒收",
|
||||||
|
Lock: "订单锁定",
|
||||||
|
Cancel: "已取消",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o status) String() string {
|
||||||
|
if value, ok := statusMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type typeState int8
|
||||||
|
|
||||||
|
const (
|
||||||
|
Self typeState = iota
|
||||||
|
Shop
|
||||||
|
Factory
|
||||||
|
Other = 99
|
||||||
|
)
|
||||||
|
|
||||||
|
var typeMap = map[typeState]string{
|
||||||
|
Self: "京东自营订单或混单",
|
||||||
|
Shop: "商家自发货订单",
|
||||||
|
Factory: "厂直订单",
|
||||||
|
Other: "其他订单",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o typeState) String() string {
|
||||||
|
if value, ok := typeMap[o]; !ok {
|
||||||
|
return rest.UnKnow
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type BaseOrder struct {
|
||||||
|
RootOrderID uint `json:"rootOrderId"`
|
||||||
|
OrderStatus status `json:"orderStatus"`
|
||||||
|
SubmitTime int64 `json:"submitTime"`
|
||||||
|
CompleteTime string `json:"completeTime"`
|
||||||
|
PayTime int64 `json:"payTime"`
|
||||||
|
OutWarehouseTime string `json:"outWarehouseTime"`
|
||||||
|
PaymentType uint `json:"PaymentType"`
|
||||||
|
Remark string `json:"remark"`
|
||||||
|
OrderType typeState `json:"orderType"`
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
// QueryPayInfoRequest 查看支付详情.
|
||||||
|
type QueryPayInfoRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryPayInfoRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.getOrderPayInfo"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryPayInfoRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_getOrderPayInfo_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryPayInfoRequest) GetRespObj() interface{} {
|
||||||
|
return QueryPayInfoResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryPayInfoResponse 查看支付返回.
|
||||||
|
type QueryPayInfoResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data PayInfoParam `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PayInfoParam struct {
|
||||||
|
RefundDetailList []RefundDetail `json:"refundDetailList"`
|
||||||
|
RefundTotalFee float64 `json:"refundTotalFee"`
|
||||||
|
RootOrderID uint `json:"rootOrderId"`
|
||||||
|
PaidInDetailList []PaidDetail `json:"paidInDetailList"`
|
||||||
|
ChannelOrderID string `json:"channelOrderId"`
|
||||||
|
FreightFee float64 `json:"freightFee"`
|
||||||
|
PaidInTotalFee float64 `json:"paidInTotalFee"`
|
||||||
|
OrderFee float64 `json:"orderFee"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RefundDetail struct {
|
||||||
|
RefundFee float64 `json:"refundFee"`
|
||||||
|
RefundType uint `json:"refundType"`
|
||||||
|
RefundTime string `json:"refundTime"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PaidDetail struct {
|
||||||
|
PaidInType uint `json:"paidInType"`
|
||||||
|
PaidInTime string `json:"paidInTime"`
|
||||||
|
PaidInFee float64 `json:"paidInFee"`
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
// PushOrderRequest 推送订单.
|
||||||
|
type PushOrderRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o PushOrderRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.pushOrder"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o PushOrderRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_pushOrder_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o PushOrderRequest) GetRespObj() interface{} {
|
||||||
|
return PushOrderResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PushOrderResponse 推送订单返回.
|
||||||
|
type PushOrderResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
// QueryOrderIDRequest 反查询orderId.
|
||||||
|
type QueryOrderIDRequest struct {
|
||||||
|
CustomerID uint `json:"customerId"`
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
TraceID string `json:"traceId"`
|
||||||
|
AppKey string `json:"appKey"`
|
||||||
|
ChannelOrderID string `json:"channelOrderId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryOrderIDRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.querySubmitOrder"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryOrderIDRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_querySubmitOrder_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o QueryOrderIDRequest) GetRespObj() interface{} {
|
||||||
|
return QueryOrderIDResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryOrderIDResponse 反查询orderId.
|
||||||
|
type QueryOrderIDResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data QueryOrderIDParam `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type QueryOrderIDParam struct {
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
ChannelOrderID string `json:"channelOrderId"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
@ -0,0 +1,106 @@
|
|||||||
|
package order
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SubmitOrderRequest 提交order.
|
||||||
|
type SubmitOrderRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"protocol"`
|
||||||
|
OrderParam Param `json:"param"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Param struct {
|
||||||
|
ChannelOrderID string `json:"channelOrderId"`
|
||||||
|
Pin string `json:"pin"`
|
||||||
|
ProductList []ProductParam `json:"productList"`
|
||||||
|
OrderFee float64 `json:"orderFee"`
|
||||||
|
FreightFee float64 `json:"freightFee"`
|
||||||
|
Address rest.Address `json:"address"`
|
||||||
|
Receiver ReceiverParam `json:"receiver"`
|
||||||
|
PaymentType uint `json:"paymentType"`
|
||||||
|
ShipmentType uint `json:"shipmentType"`
|
||||||
|
ChannelOrderSource string `json:"channelOrderSource"`
|
||||||
|
SendGoods uint `json:"sendGoods"`
|
||||||
|
UserIp string `json:"userIp"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProductParam struct {
|
||||||
|
MainSku SkuParam `json:"mainSku"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SkuParam struct {
|
||||||
|
SkuID string `json:"skuId"`
|
||||||
|
SkuPrice float64 `json:"skuPrice"`
|
||||||
|
Quantity uint `json:"quantity"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReceiverParam struct {
|
||||||
|
ReceiverName string `json:"receiverName"`
|
||||||
|
ReceiverMobile string `json:"receiverMobile"`
|
||||||
|
ReceiverEmail string `json:"receiverEmail"`
|
||||||
|
ZipCode string `json:"zipCode"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type VatAddressParam struct {
|
||||||
|
VatProvinceID uint `json:"vatProvinceId"`
|
||||||
|
VatCityID uint `json:"vatCityId"`
|
||||||
|
VatCountyID uint `json:"vatCountyId"`
|
||||||
|
VatTownID uint `json:"vatTownId"`
|
||||||
|
VatFullAddress string `json:"vatFullAddress"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type VatInvoiceParam struct {
|
||||||
|
CompanyName string `json:"companyName"`
|
||||||
|
Code string `json:"code"`
|
||||||
|
RegAddr string `json:"regAddr"`
|
||||||
|
RegPhone string `json:"regPhone"`
|
||||||
|
RegBank string `json:"regBank"`
|
||||||
|
RegBankAccount string `json:"regBankAccount"`
|
||||||
|
ConsigneeName string `json:"consigneeName"`
|
||||||
|
ConsigneeMobile string `json:"consigneeMobile"`
|
||||||
|
VatAddress VatAddressParam `json:"vatAddress"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ElectronicInvoiceParam struct {
|
||||||
|
SelectedInvoiceTitle string `json:"selectedInvoiceTitle"`
|
||||||
|
ElectCompanyName string `json:"electCompanyName"`
|
||||||
|
ElectCode string `json:"electCode"`
|
||||||
|
InvoiceConsigneeEmail string `json:"invoiceConsigneeEmail"`
|
||||||
|
InvoiceConsigneePhone string `json:"invoiceConsigneePhone"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type InvoiceParam struct {
|
||||||
|
InvoiceType uint `json:"invoiceType"`
|
||||||
|
VatInvoice VatInvoiceParam `json:"vatInvoice"`
|
||||||
|
ElectronicInvoice ElectronicInvoiceParam `json:"electronicInvoice"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o SubmitOrderRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.order.submitOrder"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o SubmitOrderRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_order_submitOrder_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o SubmitOrderRequest) GetRespObj() interface{} {
|
||||||
|
return SubmitOrderResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubmitOrderResponse 提交订单返回.
|
||||||
|
type SubmitOrderResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data SubmitOrderParam `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SubmitOrderParam struct {
|
||||||
|
ChannelID uint `json:"channelId"`
|
||||||
|
ChannelOrderID string `json:"channelOrderId"`
|
||||||
|
OrderID uint `json:"orderId"`
|
||||||
|
}
|
@ -0,0 +1,142 @@
|
|||||||
|
package sku
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// GetSkuDetailRequest 获取sku详情.
|
||||||
|
type GetSkuDetailRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
SkuDetailParam DetailParam `json:"skuDetailParam"`
|
||||||
|
}
|
||||||
|
type DetailParam struct {
|
||||||
|
DetailAssemblyType uint `json:"detailAssemblyType"`
|
||||||
|
SkuIDSet []uint `json:"skuIdSet"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuDetailRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.ware.sku.getSkuDetail"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuDetailRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_ware_sku_getSkuDetail_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuDetailRequest) GetRespObj() interface{} {
|
||||||
|
return GetSkuDetailResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSkuDetailResponse 获取物流轨迹返回.
|
||||||
|
type GetSkuDetailResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Data []GetSkuDetailParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetSkuDetailParams struct {
|
||||||
|
ImageInfos []ImageBase `json:"imageInfos"`
|
||||||
|
WReadMe string `json:"wReadMe"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
Specifications []Specification `json:"specifications"`
|
||||||
|
ExtAtts []Attr `json:"extAtts"`
|
||||||
|
SkuBaseInfo Base `json:"skuBaseInfo"`
|
||||||
|
SkuBigFieldInfo BigFieldInfo `json:"skuBigFieldInfo"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BigFieldInfo struct {
|
||||||
|
PcWDis string `json:"pcWdis"`
|
||||||
|
PcHtmlContent string `json:"pcHtmlContent"`
|
||||||
|
PcJsContent string `json:"pcJsContent"`
|
||||||
|
PcCssContent string `json:"pcCssContent"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Specification struct {
|
||||||
|
GroupName string `json:"groupName"`
|
||||||
|
Attributes []Attr `json:"attributes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Attr struct {
|
||||||
|
AttName string `json:"attName"`
|
||||||
|
ValNames []string `json:"valNames"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ImageBase struct {
|
||||||
|
Path string `json:"path"`
|
||||||
|
Features string `json:"features"`
|
||||||
|
OrderSort uint `json:"orderSort"`
|
||||||
|
IsPrimary uint `json:"isPrimary"`
|
||||||
|
Position string `json:"position"`
|
||||||
|
Type uint `json:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Base struct {
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
VenderName string `json:"venderName"`
|
||||||
|
ShopName string `json:"shopName"`
|
||||||
|
CategoryID1 uint `json:"categoryId1"`
|
||||||
|
CategoryID2 uint `json:"categoryId2"`
|
||||||
|
CategoryID uint `json:"categoryId"`
|
||||||
|
Length float64 `json:"length"`
|
||||||
|
Width float64 `json:"Width"`
|
||||||
|
Height float64 `json:"Height"`
|
||||||
|
PackageType string `json:"packageType"`
|
||||||
|
Model string `json:"model"`
|
||||||
|
Color string `json:"color"`
|
||||||
|
ColorSequence string `json:"colorSequence"`
|
||||||
|
UpcCode string `json:"upcCode"`
|
||||||
|
Size string `json:"size"`
|
||||||
|
SizeSequence string `json:"sizeSequence"`
|
||||||
|
Unit string `json:"unit"`
|
||||||
|
Warranty string `json:"warranty"`
|
||||||
|
ShelfLife string `json:"shelfLife"`
|
||||||
|
Delivery string `json:"delivery"`
|
||||||
|
PlaceOfProduction string `json:"placeOfProduction"`
|
||||||
|
Tax string `json:"tax"`
|
||||||
|
ProductID uint `json:"productId"`
|
||||||
|
SkuStatus uint `json:"skuStatus"`
|
||||||
|
Yn uint `json:"yn"`
|
||||||
|
Fare uint `json:"fare"`
|
||||||
|
CategoryName1 string `json:"categoryName1"`
|
||||||
|
CategoryName2 string `json:"categoryName2"`
|
||||||
|
CategoryName string `json:"categoryName"`
|
||||||
|
SkuInfoType uint `json:"skuInfoType"`
|
||||||
|
BookSkuBaseInfo BookSkuBase `json:"bookSkuBaseInfo"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BookSkuBase struct {
|
||||||
|
SizeAndHeight string `json:"sizeAndHeight"`
|
||||||
|
MarketPrice string `json:"marketPrice"`
|
||||||
|
PackNum string `json:"packNum"`
|
||||||
|
Language string `json:"language"`
|
||||||
|
Remarker string `json:"remarker"`
|
||||||
|
AttachmentNum string `json:"attachmentNum"`
|
||||||
|
ChinaCatalog string `json:"chinaCatalog"`
|
||||||
|
ForeignBookName string `json:"foreignBookName"`
|
||||||
|
Pages string `json:"pages"`
|
||||||
|
ISBN string `json:"ISBN"`
|
||||||
|
Attachment string `json:"attachment"`
|
||||||
|
Compile string `json:"compile"`
|
||||||
|
Proofreader string `json:"proofreader"`
|
||||||
|
Publishers string `json:"publishers"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
Brand string `json:"brand"`
|
||||||
|
Letters string `json:"letters"`
|
||||||
|
PublishTime string `json:"publishTime"`
|
||||||
|
BatchNo string `json:"batchNo"`
|
||||||
|
Author string `json:"author"`
|
||||||
|
ISSN string `json:"ISSN"`
|
||||||
|
Format string `json:"format"`
|
||||||
|
Drawer string `json:"drawer"`
|
||||||
|
BookName string `json:"bookName"`
|
||||||
|
BarCode string `json:"barCode"`
|
||||||
|
PicNo string `json:"picNo"`
|
||||||
|
Transfer string `json:"transfer"`
|
||||||
|
PrintNo string `json:"printNo"`
|
||||||
|
PackageStr string `json:"packageStr"`
|
||||||
|
PublishNo string `json:"publishNo"`
|
||||||
|
Series string `json:"series"`
|
||||||
|
Editer string `json:"editer"`
|
||||||
|
PrintTime string `json:"printTime"`
|
||||||
|
Photography string `json:"photography"`
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package sku
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
type ApiSkuListParam struct {
|
||||||
|
ScrollID string `json:"scrollId"`
|
||||||
|
SkuStatus uint `json:"skuStatus"`
|
||||||
|
PageSize uint `json:"pageSize"`
|
||||||
|
}
|
||||||
|
type GetSkuRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
ApiSkuListParam ApiSkuListParam `json:"apiSkuListParam"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.ware.sku.getSkuList"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_ware_sku_getSkuList_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuRequest) GetRespObj() interface{} {
|
||||||
|
return ListResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type EntryParams struct {
|
||||||
|
CategoryName2 string `json:"categoryName2"`
|
||||||
|
CategoryName1 string `json:"categoryName1"`
|
||||||
|
CategoryID uint `json:"categoryId"`
|
||||||
|
SkuName string `json:"skuName"`
|
||||||
|
BrandID uint `json:"brandId"`
|
||||||
|
BrandName string `json:"brandName"`
|
||||||
|
Modified int64 `json:"modified"`
|
||||||
|
ImgUrl string `json:"imgUrl"`
|
||||||
|
CategoryName string `json:"categoryName"`
|
||||||
|
CategoryId1 uint `json:"categoryId1"`
|
||||||
|
CategoryId2 uint `json:"categoryId2"`
|
||||||
|
Created int64 `json:"created"`
|
||||||
|
SkuStatus uint `json:"skuStatus"`
|
||||||
|
SkuID uint `json:"skuId"`
|
||||||
|
EnBrandName string `json:"enBrandName"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListParams struct {
|
||||||
|
ScrollID string `json:"scrollId"`
|
||||||
|
Total uint `json:"total"`
|
||||||
|
Entries []EntryParams `json:"entries"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListResponse struct {
|
||||||
|
Code string `json:"code"`
|
||||||
|
Result struct {
|
||||||
|
Data ListParams `json:"data"`
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package sku
|
||||||
|
|
||||||
|
import "git.oa00.com/go/jcook-sdk/api/rest"
|
||||||
|
|
||||||
|
// GetSkuPriceRequest 请求sku价格.
|
||||||
|
type GetSkuPriceRequest struct {
|
||||||
|
CtpProtocol rest.CtpProtocol `json:"ctpProtocol"`
|
||||||
|
SkuPriceInfoParam PriceParam `json:"skuPriceInfoParam"`
|
||||||
|
}
|
||||||
|
type PriceParam struct {
|
||||||
|
SkuIDSet []uint `json:"skuIdSet"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuPriceRequest) GetApiName() string {
|
||||||
|
return "jingdong.ctp.ware.price.getSkuPriceInfoList"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuPriceRequest) GetRespName() string {
|
||||||
|
return "jingdong_ctp_ware_price_getSkuPriceInfoList_responce"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o GetSkuPriceRequest) GetRespObj() interface{} {
|
||||||
|
return GetSkuPriceResponse{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSkuPriceResponse 请求sku价格返回
|
||||||
|
type GetSkuPriceResponse struct {
|
||||||
|
Result struct {
|
||||||
|
ErrCode uint `json:"errCode"`
|
||||||
|
ErrMsg string `json:"errMsg"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Data PriceDetail `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
type PriceDetail struct {
|
||||||
|
SkuPriceList []Price `json:"skuPriceList"`
|
||||||
|
CustomerId uint `json:"customerId"`
|
||||||
|
ChannelId uint `json:"channelId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Price struct {
|
||||||
|
ErrorMessage string `json:"errorMessage"`
|
||||||
|
SkuPrice float64 `json:"skuPrice"`
|
||||||
|
SkuId uint `json:"skuId"`
|
||||||
|
IsSuccess bool `json:"isSuccess"`
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
module git.oa00.com/go/jcook-sdk
|
||||||
|
|
||||||
|
go 1.16
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/mitchellh/mapstructure v1.4.1
|
||||||
|
github.com/stretchr/testify v1.7.0
|
||||||
|
)
|
@ -0,0 +1,13 @@
|
|||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
|
||||||
|
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
@ -0,0 +1,66 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
client = &http.Client{}
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func FormatUrl(endPoint string, isHttps bool) string {
|
||||||
|
if isHttps {
|
||||||
|
return fmt.Sprintf("https://%s", endPoint)
|
||||||
|
} else {
|
||||||
|
return fmt.Sprintf("http://%s", endPoint)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func JGet(url string, params url.Values, header map[string]string) ([]byte, error) {
|
||||||
|
req, _ := http.NewRequest("GET", url, nil)
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
req.URL.RawQuery = params.Encode()
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return []byte(""), err
|
||||||
|
}
|
||||||
|
defer func(Body io.ReadCloser) {
|
||||||
|
err = Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
}(resp.Body)
|
||||||
|
|
||||||
|
return io.ReadAll(resp.Body)
|
||||||
|
}
|
||||||
|
|
||||||
|
func JPostJson(url string, jsonStr []byte, header map[string]string) ([]byte, error) {
|
||||||
|
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return []byte(""), err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func(Body io.ReadCloser) {
|
||||||
|
err = Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
}(resp.Body)
|
||||||
|
|
||||||
|
return io.ReadAll(resp.Body)
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package security
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Md5OrderlyWithSecret(secret string, data map[string]string) string {
|
||||||
|
h := md5.New()
|
||||||
|
|
||||||
|
var order []string
|
||||||
|
|
||||||
|
for key, _ := range data{
|
||||||
|
order = append(order, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(order)
|
||||||
|
|
||||||
|
h.Write([]byte(secret))
|
||||||
|
|
||||||
|
for _, value := range order{
|
||||||
|
h.Write([]byte(fmt.Sprintf("%s%s", value, data[value])))
|
||||||
|
}
|
||||||
|
|
||||||
|
h.Write([]byte(secret))
|
||||||
|
|
||||||
|
return strings.ToUpper(hex.EncodeToString(h.Sum(nil)))
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package security
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha1"
|
||||||
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func map2str(data map[string]string, sep string) string {
|
||||||
|
var temp []string
|
||||||
|
|
||||||
|
for key, _ := range data {
|
||||||
|
temp = append(temp, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(temp)
|
||||||
|
|
||||||
|
var tt []string
|
||||||
|
for _, v := range temp {
|
||||||
|
tt = append(tt, fmt.Sprintf("%s=%s", v, data[v]))
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(tt, sep)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Sha1OrderlyWithBase64(secret string, data map[string]string) string {
|
||||||
|
h := hmac.New(sha1.New, []byte(secret))
|
||||||
|
|
||||||
|
str := map2str(data, "&")
|
||||||
|
|
||||||
|
h.Write([]byte(str))
|
||||||
|
|
||||||
|
return base64.StdEncoding.EncodeToString(h.Sum(nil))
|
||||||
|
}
|
Loading…
Reference in new issue