master
大虾 3 years ago
commit 930d551962

3
.gitignore vendored

@ -0,0 +1,3 @@
.idea
test
*_test.go

@ -0,0 +1 @@
``jcook-sdk对接开普勒云相关的接口``

@ -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…
Cancel
Save