提交 3c081a12 authored 作者: 张立波's avatar 张立波

Merge remote-tracking branch 'origin/master'

package suning
import (
"context"
"encoding/base64"
"github.com/gogf/gf/crypto/gmd5"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/util/gconv"
"time"
)
var server *Config
//苏宁
const pkgName = "suning"
type Config struct {
AppKey string
AppSecret string
ApiUrl string
VersionNo string
ChannelCode string
}
func New(req *Config) {
server = req
return
}
/**
//let date = pm.request.headers.get("AppRequestTime");
let date = moment().format('YYYY-MM-DD HH:mm:ss');
let app_key = pm.request.headers.get("AppKey");
let api_version = pm.request.headers.get("VersionNo");
console.log(pm.request.body.raw);
let post_field = CryptoJS.enc.Base64.stringify( CryptoJS.enc.Utf8.parse(pm.request.body.raw));
//let post_field = CryptoJS.enc.Base64.stringify(pm.request.body.raw);
console.log(post_field);
var stringSignTemp = secret_key + method + date + app_key + api_version + post_field;
console.log(stringSignTemp);
let sign = CryptoJS.MD5(stringSignTemp).toString();
console.log(sign)
pm.request.headers.upsert({"key":"signInfo","value":sign});
*/
func sign(method string, date string, req string) string {
signString := server.AppSecret + method + date + server.AppKey + server.VersionNo + base64.StdEncoding.EncodeToString([]byte(req))
res := gmd5.MustEncryptString(signString)
return res
}
func post(ctx context.Context, method string, req interface{}) (res string, err error) {
Start := gtime.TimestampMilli()
reqMap := gconv.Map(req)
param := gjson.New(reqMap)
Url := server.ApiUrl
Request := g.Client()
now := time.Now()
formatted := now.Format("2006-01-02 15:04:05")
Request.SetHeader("Content-Type", "text/xml; charset=utf-8")
Request.SetHeader("AppMethod", method)
Request.SetHeader("AppRequestTime", formatted)
Request.SetHeader("Format", "json")
Request.SetHeader("AppKey", server.AppKey)
Request.SetHeader("VersionNo", server.VersionNo)
Request.SetHeader("User-Agent", "suning-sdk-php")
Request.SetHeader("Sdk-Version", "suning-sdk-php-beta0.1")
Request.SetHeader("signInfo", sign(method, formatted, param.MustToJsonString()))
resp, err := Request.Timeout(time.Second*10).Post(Url, param.MustToJsonString())
defer func() {
_ = resp.Close()
ctx = context.WithValue(ctx, "Method", "POST")
ctx = context.WithValue(ctx, "URI", Url)
if err != nil {
g.Log().Ctx(ctx).Cat(pkgName).Cat("error").Infof("参数【%v】错误【%v】响应时间【%v ms】", param.MustToJsonString(), err.Error(), gtime.TimestampMilli()-Start)
} else {
g.Log().Ctx(ctx).Cat(pkgName).Infof("参数【%v】响应【%v】响应时间【%v ms】", param.MustToJsonString(), res, gtime.TimestampMilli()-Start)
}
}()
res = resp.ReadAllString()
return
}
package suning
import (
"context"
"encoding/json"
)
//
type GoodsListReq struct {
SnRequest struct {
SnBody struct {
QueryProdpool struct {
ChannelCode string `json:"channelCode"`
PageNo string `json:"pageNo"`
PageSize string `json:"pageSize"`
StartTime string `json:"startTime"`
EndTime string `json:"endTime"`
} `json:"queryProdpool"`
} `json:"sn_body"`
} `json:"sn_request"`
}
//
type GoodsListRes struct {
SnResponseContent struct {
SnHead struct {
TotalSize int `json:"totalSize"`
PageTotal int `json:"pageTotal"`
PageNo int `json:"pageNo"`
ReturnMessage string `json:"returnMessage"`
} `json:"sn_head"`
SnBody struct {
QueryProdpool []struct {
SpuId string `json:"spuId"`
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
} `json:"queryProdpool"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取商品列表
func GetGoodsList(ctx context.Context, page, pageSize, startTime, endTime string) (res GoodsListRes, err error) {
params := GoodsListReq{}
params.SnRequest.SnBody.QueryProdpool.ChannelCode = server.ChannelCode
params.SnRequest.SnBody.QueryProdpool.PageNo = page
params.SnRequest.SnBody.QueryProdpool.PageSize = pageSize
params.SnRequest.SnBody.QueryProdpool.StartTime = startTime
params.SnRequest.SnBody.QueryProdpool.StartTime = startTime
params.SnRequest.SnBody.QueryProdpool.EndTime = endTime
result, err := post(ctx, "suning.sngoods.prodpool.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type GoodsDetailReq struct {
SnRequest struct {
SnBody struct {
GetProddetail struct {
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
} `json:"getProddetail"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsDetailRes struct {
SnResponseContent struct {
SnBody struct {
GetProddetail struct {
Catalogue []struct {
CatalogId string `json:"catalogId"`
CategoryId string `json:"categoryId"`
CategoryLevel string `json:"categoryLevel"`
CategoryName string `json:"categoryName"`
ParentCategoryId string `json:"parentCategoryId"`
} `json:"catalogue"`
Introduction string `json:"introduction"`
Point string `json:"point"`
ProdParams struct {
Desc []struct {
CoreFlag string `json:"coreFlag"`
SnparameterCode string `json:"snparameterCode"`
SnparameterSequence string `json:"snparameterSequence"`
SnparameterVal string `json:"snparameterVal"`
Snparameterdesc string `json:"snparameterdesc"`
SnparametersCode string `json:"snparametersCode"`
SnparametersDesc string `json:"snparametersDesc"`
Snsequence string `json:"snsequence"`
} `json:"desc"`
} `json:"prodParams"`
SkuId string `json:"skuId"`
} `json:"getProddetail"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取商品详情
func GetGoodsDetail(ctx context.Context, skuId, supplierCode string) (res GoodsDetailRes, err error) {
params := GoodsDetailReq{}
params.SnRequest.SnBody.GetProddetail.SkuId = skuId
params.SnRequest.SnBody.GetProddetail.SupplierCode = supplierCode
result, err := post(ctx, "suning.sngoods.proddetail.get", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type GoodsBaseDetailReq struct {
SnRequest struct {
SnBody struct {
GetProdbasicdetail struct {
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
} `json:"getProdbasicdetail"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsBaseDetailRes struct {
SnResponseContent struct {
SnBody struct {
GetProdbasicdetail struct {
Image string `json:"image"`
BrandName string `json:"brandName"`
Length string `json:"length"`
CatalogCode string `json:"catalogCode"`
Weight string `json:"weight"`
BuName string `json:"buName"`
CmmdtyModel string `json:"cmmdtyModel"`
CatalogName string `json:"catalogName"`
Volume string `json:"volume"`
SizeAttribute int `json:"sizeAttribute"`
ProductArea string `json:"productArea"`
BrandId string `json:"brandId"`
Name string `json:"name"`
Width string `json:"width"`
SkuId string `json:"skuId"`
Height string `json:"height"`
} `json:"getProdbasicdetail"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取商品基本信息
func GetGoodsBaseDetail(ctx context.Context, skuId, supplierCode string) (res GoodsBaseDetailRes, err error) {
params := GoodsBaseDetailReq{}
params.SnRequest.SnBody.GetProdbasicdetail.SkuId = skuId
params.SnRequest.SnBody.GetProdbasicdetail.SupplierCode = supplierCode
result, err := post(ctx, "suning.sngoods.prodbasicdetail.get", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type GoodsDetailImageReq struct {
SnRequest struct {
SnBody struct {
QueryProdimage struct {
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
} `json:"queryProdimage"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsDetailImageRes struct {
SnResponseContent struct {
SnBody struct {
QueryProdimage struct {
Urls []struct {
Path string `json:"path"`
PictureLocation string `json:"pictureLocation"`
} `json:"urls"`
SkuId string `json:"skuId"`
} `json:"queryProdimage"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取商品图片
func GetGoodsDetailImage(ctx context.Context, skuId, supplierCode string) (res GoodsDetailImageRes, err error) {
params := GoodsDetailImageReq{}
params.SnRequest.SnBody.QueryProdimage.SkuId = skuId
params.SnRequest.SnBody.QueryProdimage.SupplierCode = supplierCode
result, err := post(ctx, "suning.sngoods.prodimage.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type MinOrderSkus struct {
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
}
type GoodsMinOrderQuantityReq struct {
SnRequest struct {
SnBody struct {
QueryMinorderquantity struct {
Skus []*MinOrderSkus `json:"skus"`
} `json:"queryMinorderquantity"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsMinOrderQuantityRes struct {
SnResponseContent struct {
SnBody struct {
QueryMinorderquantity struct {
Skus []struct {
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
MinNum string `json:"minNum"`
} `json:"skus"`
} `json:"queryMinorderquantity"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 查询商品最小起订量
func GetMinOrderQuantity(ctx context.Context, req []*MinOrderSkus) (res GoodsMinOrderQuantityRes, err error) {
params := GoodsMinOrderQuantityReq{}
params.SnRequest.SnBody.QueryMinorderquantity.Skus = req
result, err := post(ctx, "suning.sngoods.minorderquantity.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type GoodsPassPartProductInfoReq struct {
SnRequest struct {
SnBody struct {
QueryPasspartproductinfo struct {
SpuId string `json:"spuId"`
SupplierCode string `json:"supplierCode"`
} `json:"queryPasspartproductinfo"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsPassPartProductInfoRes struct {
SnResponseContent struct {
SnBody struct {
QueryPasspartproductinfo struct {
Data struct {
SpuId string `json:"spuId"`
SupplierCode string `json:"supplierCode"`
ProductList []struct {
CharacterValueId string `json:"characterValueId"`
ItemName string `json:"itemName"`
CharacterValueDisplayName string `json:"characterValueDisplayName"`
CharacterId string `json:"characterId"`
SkuId string `json:"skuId"`
CharacterDisplayName string `json:"characterDisplayName"`
} `json:"productList"`
} `json:"data"`
} `json:"queryPasspartproductinfo"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
//获取通子码商品信息
func GetGoodsPassPartProductInfo(ctx context.Context, spuId, supplierCode string) (res GoodsPassPartProductInfoRes, err error) {
params := GoodsPassPartProductInfoReq{}
params.SnRequest.SnBody.QueryPasspartproductinfo.SpuId = spuId
params.SnRequest.SnBody.QueryPasspartproductinfo.SupplierCode = supplierCode
result, err := post(ctx, "suning.sngoods.passpartproductinfo.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
package suning
import (
"context"
"encoding/json"
)
type CmmdtyInfoList struct {
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
}
type GoodsListPriceReq struct {
SnRequest struct {
SnBody struct {
QueryListpageprice struct {
CityCode string `json:"cityCode"`
CmmdtyInfoList []*CmmdtyInfoList `json:"cmmdtyInfoList"`
ChannelCode string `json:"channelCode"`
} `json:"queryListpageprice"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsListPriceRes struct {
SnResponseContent struct {
SnBody struct {
QueryListpageprice struct {
Data []struct {
ReturnCode string `json:"returnCode"`
ReturnMsg string `json:"returnMsg"`
DeliveryMode string `json:"deliveryMode"`
CityCode string `json:"cityCode"`
Price string `json:"price"`
NetPrice string `json:"netPrice"`
State string `json:"state"`
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
} `json:"data"`
} `json:"queryListpageprice"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 列表页查询价格库存
func GetGoodsListPrice(ctx context.Context, goodsList []*CmmdtyInfoList, cityCode string) (res GoodsListPriceRes, err error) {
params := GoodsListPriceReq{}
params.SnRequest.SnBody.QueryListpageprice.CmmdtyInfoList = goodsList
params.SnRequest.SnBody.QueryListpageprice.CityCode = cityCode
params.SnRequest.SnBody.QueryListpageprice.ChannelCode = server.ChannelCode
result, err := post(ctx, "suning.sngoods.listpageprice.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type CmmdtyCatInfoList struct {
Num string `json:"num"`
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
}
type GoodsCatPriceReq struct {
SnRequest struct {
SnBody struct {
QueryShoppingcartprice struct {
RegionCode string `json:"regionCode"`
CityCode string `json:"cityCode"`
CmmdtyInfoList []*CmmdtyCatInfoList `json:"cmmdtyInfoList"`
ChannelCode string `json:"channelCode"`
} `json:"queryShoppingcartprice"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type GoodsCatPriceRes struct {
SnResponseContent struct {
SnBody struct {
QueryShoppingcartprice struct {
Data []struct {
ReturnCode string `json:"returnCode"`
RegionCode string `json:"regionCode"`
ReturnMsg string `json:"returnMsg"`
CityCode string `json:"cityCode"`
Price string `json:"price"`
ArrivalQty string `json:"arrivalQty"`
State string `json:"state"`
SupplierCode string `json:"supplierCode"`
DeliveryOrNot string `json:"deliveryOrNot"`
SkuId string `json:"skuId"`
} `json:"data"`
} `json:"queryShoppingcartprice"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 购物车查询价格库存
func GetGoodsCatPrice(ctx context.Context, goodsList []*CmmdtyCatInfoList, cityCode string) (res GoodsCatPriceRes, err error) {
params := GoodsCatPriceReq{}
params.SnRequest.SnBody.QueryShoppingcartprice.CmmdtyInfoList = goodsList
params.SnRequest.SnBody.QueryShoppingcartprice.CityCode = cityCode
params.SnRequest.SnBody.QueryShoppingcartprice.ChannelCode = server.ChannelCode
result, err := post(ctx, "suning.sngoods.listpageprice.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
package suning
import (
"context"
"encoding/json"
)
type QueryMessageReq struct {
SnRequest struct {
SnBody struct {
QueryQuerymessage struct {
MsgType string `json:"msgType"`
PageNo string `json:"pageNo"`
PageSize string `json:"pageSize"`
} `json:"queryQuerymessage"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type QueryMessageRes struct {
SnResponseContent struct {
SnHead struct {
TotalSize string `json:"totalSize"`
PageTotal string `json:"pageTotal"`
PageNo string `json:"pageNo"`
ReturnMessage string `json:"returnMessage"`
} `json:"sn_head"`
SnBody struct {
QueryQuerymessage []struct {
MsgType string `json:"msgType"`
MsgList []struct {
Opt string `json:"opt"`
OrderNo string `json:"orderNo"`
ProductCode string `json:"productCode"`
CreateTime string `json:"createTime"`
Channel string `json:"channel"`
OrderItemNo string `json:"orderItemNo"`
Id string `json:"id"`
SupplierCode string `json:"supplierCode"`
Status string `json:"status"`
Afterchanged []struct {
SecondPid string `json:"secondPid"`
SnId string `json:"snId"`
Level string `json:"level"`
Name string `json:"name"`
Pid string `json:"pid"`
Id string `json:"id"`
} `json:"afterchanged"`
BeforeChanged []struct {
SecondPid string `json:"secondPid"`
SnId string `json:"snId"`
Level string `json:"level"`
Name string `json:"name"`
Pid string `json:"pid"`
Id string `json:"id"`
} `json:"beforeChanged"`
} `json:"msgList"`
} `json:"queryQuerymessage"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取订单状态
func QueryMessage(ctx context.Context, msgType, pageNo, pageSize string) (res QueryMessageRes, err error) {
params := QueryMessageReq{}
params.SnRequest.SnBody.QueryQuerymessage.MsgType = msgType
params.SnRequest.SnBody.QueryQuerymessage.PageNo = pageNo
params.SnRequest.SnBody.QueryQuerymessage.PageSize = pageSize
result, err := post(ctx, "suning.sngoods.querymessage.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type MessageDelReq struct {
SnRequest struct {
SnBody struct {
DeleteMessage struct {
MsgType string `json:"msgType"`
MsgList []*MessageDelReqMsgList `json:"msgList"`
} `json:"deleteMessage"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type MessageDelReqMsgList struct {
Id string `json:"id"`
}
type MessageDelRes struct {
SnResponseContent struct {
SnBody struct {
DeleteMessage struct {
DeleteResult string `json:"deleteResult"`
} `json:"deleteMessage"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
func MessageDel(ctx context.Context, msgType string, msgList []*MessageDelReqMsgList) (res MessageDelRes, err error) {
params := MessageDelReq{}
params.SnRequest.SnBody.DeleteMessage.MsgType = msgType
params.SnRequest.SnBody.DeleteMessage.MsgList = msgList
result, err := post(ctx, "suning.sngoods.message.delete", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
package suning
import (
"context"
"encoding/json"
)
type OrderCreateReq struct {
SnRequest struct {
SnBody struct {
AddOrder struct {
Amount string `json:"amount"`
Address string `json:"address"`
TradeNo string `json:"tradeNo"`
ReceiverName string `json:"receiverName"`
Mobile string `json:"mobile"`
InvoiceState string `json:"invoiceState"`
Remark string `json:"remark"`
Telephone string `json:"telephone"`
CityId string `json:"cityId"`
TownId string `json:"townId"`
ChannelCode string `json:"channelcode"`
ProvinceId string `json:"provinceId"`
ServFee string `json:"servFee"`
CountyId string `json:"countyId"`
InvoiceType string `json:"invoiceType"`
HopeArrivalTime string `json:"hopeArrivalTime"`
Payment string `json:"payment"`
Sku []*OrderCreateSku `json:"sku"`
SpecialVatTicket OrderCreateSpecialVatTicket `json:"specialVatTicket"`
InvoiceTitle string `json:"invoiceTitle"`
} `json:"addOrder"`
} `json:"sn_body"`
} `json:"sn_reqest"`
}
type OrderCreateSku struct {
UnitPrice string `json:"unitPrice"`
Num string `json:"num"`
SupplierCode string `json:"supplierCode"`
SkuId string `json:"skuId"`
}
type OrderCreateSpecialVatTicket struct {
ConsigneeName string `json:"consigneeName"`
RegAccount string `json:"regAccount"`
RegTel string `json:"regTel"`
ConsigneeMobileNum string `json:"consigneeMobileNum"`
RegAdd string `json:"regAdd"`
RegBank string `json:"regBank"`
TaxNo string `json:"taxNo"`
ConsigneeAddress string `json:"consigneeAddress"`
}
type OrderCreateRes struct {
SnResponseContent struct {
SnBody struct {
AddOrder struct {
Amount string `json:"amount"`
Skus []struct {
OrderItemId string `json:"orderItemId"`
Price string `json:"price"`
Num string `json:"num"`
SkuId string `json:"skuId"`
} `json:"skus"`
TradeNo string `json:"tradeNo"`
OrderId string `json:"orderId"`
} `json:"addOrder"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 创建订单
func OrderCreate(ctx context.Context, req *OrderCreateReq) (res OrderCreateRes, err error) {
req.SnRequest.SnBody.AddOrder.ChannelCode = server.ChannelCode
result, err := post(ctx, "suning.sngoods.order.add", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderConfirmReq struct {
SnRequest struct {
SnBody struct {
ConfirmConfirmpaydt struct {
OrderId string `json:"orderId"`
} `json:"confirmConfirmpaydt"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderConfirmRes struct {
SnResponseContent struct {
SnBody struct {
ConfirmConfirmpaydt struct {
OrderId string `json:"orderId"`
} `json:"confirmConfirmpaydt"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 代扣订单确认支付
func OrderConfirm(ctx context.Context, orderId string) (res OrderConfirmRes, err error) {
params := OrderConfirmReq{}
params.SnRequest.SnBody.ConfirmConfirmpaydt.OrderId = orderId
result, err := post(ctx, "suning.sngoods.confirmpaydt.confirm", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderStatusReq struct {
SnRequest struct {
SnBody struct {
GetOrderstatus struct {
OrderId string `json:"orderId"`
} `json:"getOrderstatus"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderStatusRes struct {
SnResponseContent struct {
SnBody struct {
GetOrderstatus struct {
OrderId string `json:"orderId"`
OrderStatus string `json:"orderStatus"`
OrderItemInfoList []struct {
OrderItemId string `json:"orderItemId"`
StatusName string `json:"statusName"`
SkuId string `json:"skuId"`
} `json:"orderItemInfoList"`
} `json:"getOrderstatus"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取订单状态
func GetOrderStatus(ctx context.Context, orderId string) (res OrderStatusRes, err error) {
params := OrderStatusReq{}
params.SnRequest.SnBody.GetOrderstatus.OrderId = orderId
result, err := post(ctx, "suning.sngoods.orderstatus.get", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
package suning
import (
"context"
"encoding/json"
)
type AllAddressServiceReq struct {
SnRequest struct {
SnBody struct {
QueryAlladdressservice struct {
} `json:"queryAlladdressservice"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type AllAddressServiceRes struct {
SnResponseContent struct {
SnBody struct {
QueryAlladdressservice struct {
AddressList []struct {
SecondPid string `json:"secondPid"`
SnId string `json:"snId"`
Level string `json:"level"`
Name string `json:"name"`
Pid string `json:"pid"`
Id string `json:"id"`
} `json:"addressList"`
} `json:"queryAlladdressservice"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 确认收货
func AllAddressService(ctx context.Context) (res AllAddressServiceRes, err error) {
params := AllAddressServiceReq{}
result, err := post(ctx, "suning.sngoods.alladdressservice.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
package suning
import (
"context"
"encoding/json"
)
type OrderLogistReq struct {
SnRequest struct {
SnBody struct {
GetOrderlogist struct {
OrderItemId string `json:"orderItemId"`
} `json:"getOrderlogist"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderLogistRes struct {
SnResponseContent struct {
SnBody struct {
GetOrderlogist struct {
LogisticNumber string `json:"logisticNumber"`
OrderItemId string `json:"orderItemId"`
ExpressCompany string `json:"expressCompany"`
LogisticsInfoList []struct {
OperateState string `json:"operateState"`
OperateTime string `json:"operateTime"`
Operator string `json:"operator"`
} `json:"logisticsInfoList"`
} `json:"getOrderlogist"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 获取订单物流详情
func GetOrderLogist(ctx context.Context, OrderItemId string) (res OrderLogistRes, err error) {
params := OrderLogistReq{}
params.SnRequest.SnBody.GetOrderlogist.OrderItemId = OrderItemId
result, err := post(ctx, "suning.sngoods.orderlogist.get", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderConfirmReceiptReq struct {
SnRequest struct {
SnBody struct {
QueryConfirmreceipt struct {
SkuConfirmList []*OrderConfirmSkuConfirmList `json:"skuConfirmList"`
OrderId string `json:"orderId"`
} `json:"queryConfirmreceipt"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderConfirmSkuConfirmList []struct {
OrderItemId string `json:"orderItemId"`
SkuId string `json:"skuId"`
}
type OrderConfirmReceiptRes struct {
SnResponseContent struct {
SnBody struct {
QueryConfirmreceipt struct {
ResultList []struct {
OrderItemId string `json:"orderItemId"`
ApiIsSuccess string `json:"apiIsSuccess"`
} `json:"resultList"`
} `json:"queryConfirmreceipt"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 确认收货
func OrderConfirmReceipt(ctx context.Context, OrderId string, SkuConfirmList []*OrderConfirmSkuConfirmList) (res OrderConfirmReceiptRes, err error) {
params := OrderConfirmReceiptReq{}
params.SnRequest.SnBody.QueryConfirmreceipt.OrderId = OrderId
params.SnRequest.SnBody.QueryConfirmreceipt.SkuConfirmList = SkuConfirmList
result, err := post(ctx, "suning.sngoods.confirmreceipt.query", params)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
package suning
import (
"context"
"encoding/json"
)
type OrderReturnGoodsSubmitReq struct {
SnRequest struct {
SnBody struct {
AddReturngoodssubmit struct {
DistrictId string `json:"districtId"`
Quantity string `json:"quantity"`
OrderItemId string `json:"orderItemId"`
Name string `json:"name"`
DetailAddress string `json:"detailAddress"`
LogisticsCode string `json:"logisticsCode"`
Telephone string `json:"telephone"`
CityId string `json:"cityId"`
ReasonCode string `json:"reasonCode"`
TownId string `json:"townId"`
SrvStatus string `json:"srvStatus"`
ReturnAmount string `json:"returnAmount"`
} `json:"addReturngoodssubmit"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderReturnGoodsSubmitRes struct {
SnResponseContent struct {
SnBody struct {
AddReturngoodssubmit struct {
OrderItemId string `json:"orderItemId"`
} `json:"addReturngoodssubmit"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 提交售后服务申请
func OrderReturnGoodsSubmit(ctx context.Context, req *OrderReturnGoodsSubmitReq) (res OrderReturnGoodsSubmitRes, err error) {
result, err := post(ctx, "suning.sngoods.returngoodssubmit.add", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderReturnCancelReq struct {
SnRequest struct {
SnBody struct {
DeleteCancelapplication struct {
OrderItemId string `json:"orderItemId"`
} `json:"deleteCancelapplication"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderReturnCancelRes struct {
SnResponseContent struct {
SnBody struct {
DeleteCancelapplication struct {
OrderItemId string `json:"orderItemId"`
} `json:"deleteCancelapplication"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
// 撤销售后申请
func OrderReturnCancel(ctx context.Context, OrderItemId string) (res OrderReturnCancelRes, err error) {
req := OrderReturnCancelReq{}
req.SnRequest.SnBody.DeleteCancelapplication.OrderItemId = OrderItemId
result, err := post(ctx, "suning.sngoods.cancelapplication.delete", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderReturnExchangeDetailInfoReq struct {
SnRequest struct {
SnBody struct {
QueryExchangedetailinfo struct {
OrderItemId string `json:"orderItemId"`
} `json:"queryExchangedetailinfo"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderReturnExchangeDetailInfoRes struct {
SnResponseContent struct {
SnBody struct {
QueryExchangedetailinfo struct {
ReasonName string `json:"reasonName"`
Quantity string `json:"quantity"`
EventList []struct {
UpdateTime string `json:"updateTime"`
EventDescribe string `json:"eventDescribe"`
Desc string `json:"desc"`
} `json:"eventList"`
OrderItemId string `json:"orderItemId"`
MainImageUrl string `json:"mainImageUrl"`
ReturnType string `json:"returnType"`
SkuId string `json:"skuId"`
ProductName string `json:"productName"`
ReturnAmount string `json:"returnAmount"`
ExchangeNodeInfo []struct {
NodeName string `json:"nodeName"`
NodeState string `json:"nodeState"`
UpdateTime string `json:"updateTime"`
} `json:"exchangeNodeInfo"`
} `json:"queryExchangedetailinfo"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
//售后详情查询
func OrderReturnExchangeDetailInfo(ctx context.Context, OrderItemId string) (res OrderReturnExchangeDetailInfoRes, err error) {
req := OrderReturnExchangeDetailInfoReq{}
req.SnRequest.SnBody.QueryExchangedetailinfo.OrderItemId = OrderItemId
result, err := post(ctx, "suning.sngoods.exchangedetailinfo.query", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderReturnAfterSaleServiceReq struct {
SnRequest struct {
SnBody struct {
QueryAftersaleservice struct {
OrderItemId string `json:"orderItemId"`
} `json:"queryAftersaleservice"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderReturnAfterSaleServiceRes struct {
SnResponseContent struct {
SnBody struct {
QueryAftersaleservice struct {
OrderItemId string `json:"orderItemId"`
LogisticsList []struct {
LogisticsCode string `json:"logisticsCode"`
LogisticsDesc string `json:"logisticsDesc"`
} `json:"logisticsList"`
SrvList []struct {
ProductRetMoney string `json:"productRetMoney"`
DeliveryMode string `json:"deliveryMode"`
EnjoyMoney string `json:"enjoyMoney"`
PermitChgNum string `json:"permitChgNum"`
PermitRefStatus string `json:"permitRefStatus"`
SrvName string `json:"srvName"`
PermitRetNum string `json:"permitRetNum"`
SrvStatus string `json:"srvStatus"`
ReasonList []struct {
ReasonName string `json:"reasonName"`
ReasonCode string `json:"reasonCode"`
} `json:"reasonList"`
PermitChgStatus string `json:"permitChgStatus"`
PermitRetStatus string `json:"permitRetStatus"`
} `json:"srvList"`
} `json:"queryAftersaleservice"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
//订单支持售后服务类型查询
func OrderReturnAfterSaleService(ctx context.Context, OrderItemId string) (res OrderReturnAfterSaleServiceRes, err error) {
req := OrderReturnAfterSaleServiceReq{}
req.SnRequest.SnBody.QueryAftersaleservice.OrderItemId = OrderItemId
result, err := post(ctx, "suning.sngoods.aftersaleservice.query", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderReturnCurrentEventOperationReq struct {
SnRequest struct {
SnBody struct {
QueryCurrenteventoperation struct {
OrderItemId string `json:"orderItemId"`
} `json:"queryCurrenteventoperation"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderReturnCurrentEventOperationRes struct {
SnResponseContent struct {
SnBody struct {
QueryCurrenteventoperation struct {
OperationList []struct {
CountdownTime string `json:"countdownTime"`
ExpressList []struct {
ExpressName string `json:"expressName"`
Expressid string `json:"expressid"`
} `json:"expressList"`
OperationType string `json:"operationType"`
} `json:"operationList"`
OrderItemId string `json:"orderItemId"`
DisplayList []struct {
ReturnMode string `json:"returnMode"`
ReasonAgreen string `json:"reasonAgreen"`
ExpressOrderId string `json:"expressOrderId"`
ReceiverName string `json:"receiverName"`
LogisticsTraceDesc string `json:"logisticsTraceDesc"`
ExpressCompanyName string `json:"expressCompanyName"`
CourierName string `json:"courierName"`
ReceiverPhone string `json:"receiverPhone"`
RemarkContent string `json:"remarkContent"`
DragTime string `json:"dragTime"`
LogisticsTraceTime string `json:"logisticsTraceTime"`
ServiceStatus string `json:"serviceStatus"`
ReturngoodsAddress string `json:"returngoodsAddress"`
CourierPhone string `json:"courierPhone"`
PictureCodesSupplier string `json:"pictureCodesSupplier"`
} `json:"displayList"`
} `json:"queryCurrenteventoperation"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
//查询当前节点操作及展示信息
func OrderReturnCurrentEventOperation(ctx context.Context, OrderItemId string) (res OrderReturnCurrentEventOperationRes, err error) {
req := OrderReturnCurrentEventOperationReq{}
req.SnRequest.SnBody.QueryCurrenteventoperation.OrderItemId = OrderItemId
result, err := post(ctx, "suning.sngoods.currenteventoperation.query", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OrderReturnLogNumSubmitReq struct {
SnRequest struct {
SnBody struct {
AddLognumsubmit struct {
OrderItemId string `json:"orderItemId"`
ExpressOrderId string `json:"expressOrderId"`
Expressid string `json:"expressid"`
} `json:"addLognumsubmit"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OrderReturnLogNumSubmitRes struct {
SnResponseContent struct {
SnBody struct {
AddLognumsubmit struct {
OrderItemId string `json:"orderItemId"`
} `json:"addLognumsubmit"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
//提交物流信息
func OrderReturnLogNumSubmit(ctx context.Context, OrderItemId, ExpressOrderId, ExpressId string) (res OrderReturnLogNumSubmitRes, err error) {
req := OrderReturnLogNumSubmitReq{}
req.SnRequest.SnBody.AddLognumsubmit.OrderItemId = OrderItemId
req.SnRequest.SnBody.AddLognumsubmit.ExpressOrderId = ExpressOrderId
req.SnRequest.SnBody.AddLognumsubmit.Expressid = ExpressId
result, err := post(ctx, "suning.sngoods.lognumsubmit.add", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
type OerReturnConfirmGoodsReq struct {
SnRequest struct {
SnBody struct {
AddConfirmgoods struct {
OrderItemId string `json:"orderItemId"`
} `json:"addConfirmgoods"`
} `json:"sn_body"`
} `json:"sn_request"`
}
type OerReturnConfirmGoodsRes struct {
SnResponseContent struct {
SnBody struct {
AddConfirmgoods struct {
OrderItemId string `json:"orderItemId"`
} `json:"addConfirmgoods"`
} `json:"sn_body"`
} `json:"sn_responseContent"`
}
//换货确认收货
func OerReturnConfirmGoods(ctx context.Context, OrderItemId string) (res OerReturnConfirmGoodsRes, err error) {
req := OerReturnConfirmGoodsReq{}
req.SnRequest.SnBody.AddConfirmgoods.OrderItemId = OrderItemId
result, err := post(ctx, "suning.sngoods.confirmgoods.add", req)
if nil != err {
return
}
err = json.Unmarshal([]byte(result), &res)
return
}
......@@ -21,6 +21,7 @@ const (
AliNew = 18 //精选1688
Yunzmall = 19
Tmv3 = 20 //天猫优选
Suning = 21 //苏宁有货
)
var (
......@@ -106,6 +107,10 @@ func GetUpstreamList() (res interface{}, err error) {
"key": Tmv3,
"name": GetUpstreamName(Tmv3),
},
g.Map{
"key": Suning,
"name": GetUpstreamName(Suning),
},
}
return
}
......@@ -144,6 +149,8 @@ func GetUpstreamName(source int) string {
return "云仓优选"
case Tmv3:
return "天猫优选"
case Suning:
return "苏宁有货"
default:
return "未知来源"
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论