- jd afs api
This commit is contained in:
@@ -71,6 +71,84 @@ const (
|
||||
QueryOrderRetryCount = 1 // 因为京东到家当前不存在的订单也返回-4,暂时不重试
|
||||
)
|
||||
|
||||
const (
|
||||
AfsApproveTypeRefund = 1 // 退款
|
||||
AfsApproveTypeReturnGoods = 2 // 退货
|
||||
AfsApproveTypeRefused = 3 // 驳回
|
||||
)
|
||||
|
||||
const (
|
||||
AfsServiceStateWaiting4Audit = 10 // 待审核
|
||||
AfsServiceStateWaiting4GetGoods = 20 // 待取件
|
||||
AfsServiceStateRefundProcessing = 30 // 退款处理中
|
||||
AfsServiceStateWaiting4MerchantReceiveGoods = 31 // 待商家收货审核
|
||||
AfsServiceStateRefundSuccess = 32 // 退款成功
|
||||
AfsServiceStateRefundFailed = 33 // 退款失败
|
||||
AfsServiceStateAuditRefused = 40 // 审核不通过-驳回
|
||||
AfsServiceStateUserCanceled = 50 // 客户取消
|
||||
AfsServiceStateMerchantFailedReceiveGoods = 60 // 商家收货审核不通过
|
||||
AfsServiceStateSolved = 70 // 已解决
|
||||
AfsServiceStateDirectCompensate = 91 // 直赔
|
||||
AfsServiceStateDirectCompensateSuccess = 92 // 直赔成功
|
||||
AfsServiceStateDirectCompensateFailed = 93 // 直赔失败
|
||||
AfsServiceStateWaiting4Compensate = 90 // 待赔付
|
||||
AfsServiceStateWaiting4ReturnGoods = 110 // 待退货
|
||||
AfsServiceStateGetGoodsSuccess = 111 // 取货成功
|
||||
AfsServiceStateGetGoodsWaiting4Refund = 112 // 退货成功-待退款
|
||||
AfsServiceStateReturnGoodsFailed = 113 // 退货失败
|
||||
AfsServiceStateReturnGoodsSuccess = 114 // 退货成功
|
||||
)
|
||||
|
||||
type AfsSkuDiscount struct {
|
||||
DetailDiscountType int `json:"detailDiscountType"`
|
||||
DiscountType int `json:"discountType"`
|
||||
PlatPayMoney int64 `json:"platPayMoney"`
|
||||
VenderPayMoney int64 `json:"venderPayMoney"`
|
||||
}
|
||||
|
||||
type AfsServiceDetail struct {
|
||||
SkuIDIsv string `json:"skuIdIsv"`
|
||||
WareName string `json:"wareName"`
|
||||
WareNum int `json:"wareNum"`
|
||||
AfsSkuDiscountList []*AfsSkuDiscount `json:"afsSkuDiscountList"`
|
||||
}
|
||||
|
||||
type AfsServiceResponse struct {
|
||||
AfsServiceID int64 `json:"afsServiceId"`
|
||||
AfsServiceOrder string `json:"afsServiceOrder"`
|
||||
AfsServiceState int `json:"afsServiceState"`
|
||||
CreateTime *utils.JavaDate `json:"createTime"`
|
||||
CustomerMobilePhone string `json:"customerMobilePhone"`
|
||||
CustomerName string `json:"customerName"`
|
||||
OrderID string `json:"orderId"`
|
||||
OrderSource int `json:"orderSource"`
|
||||
OrderStatus int `json:"orderStatus"`
|
||||
OrderType int `json:"orderType"`
|
||||
PickwareAddress string `json:"pickwareAddress"`
|
||||
|
||||
QuestionDesc string `json:"questionDesc"`
|
||||
QuestionPic string `json:"questionPic"`
|
||||
QuestionTypeCid int `json:"questionTypeCid"`
|
||||
StationID string `json:"stationId"`
|
||||
StationName string `json:"stationName"`
|
||||
StationNumOutSystem string `json:"stationNumOutSystem"`
|
||||
VenderID string `json:"venderId"`
|
||||
|
||||
AfsDetailList []*AfsServiceDetail `json:"afsDetailList"`
|
||||
}
|
||||
|
||||
type OAOSAdjustDTO struct {
|
||||
SkuID int64 `json:"skuId,omitempty"`
|
||||
OutSkuID string `json:"outSkuId,omitempty"`
|
||||
SkuCount int `json:"skuCount"`
|
||||
}
|
||||
|
||||
type VenderAfsSkuDTO struct {
|
||||
SkuID int64 `json:"skuId"`
|
||||
SkuCount int `json:"skuCount"`
|
||||
PromotionType int `json:"promotionType"`
|
||||
}
|
||||
|
||||
var (
|
||||
ErrCanNotFindOrder = errors.New("can not find order")
|
||||
)
|
||||
@@ -79,12 +157,6 @@ var (
|
||||
orderOperationResultParser = genNoPageResultParser("code", "msg", "detail", "0")
|
||||
)
|
||||
|
||||
type OAOSAdjustDTO struct {
|
||||
SkuID int64 `json:"skuId,omitempty"`
|
||||
OutSkuID string `json:"outSkuId,omitempty"`
|
||||
SkuCount int `json:"skuCount"`
|
||||
}
|
||||
|
||||
// 订单列表查询接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ba3027848c3c4fda9674966e2a466482
|
||||
func (a *API) OrderQuery(jdParams map[string]interface{}) (retVal []interface{}, totalCount int, err error) {
|
||||
@@ -239,6 +311,14 @@ func (a *API) GetAfsService(orderId string) (map[string]interface{}, error) {
|
||||
return result.(map[string]interface{}), nil
|
||||
}
|
||||
|
||||
func (a *API) GetAfsService2(afsOrderID string) (afsOrderInfo *AfsServiceResponse, err error) {
|
||||
result, err := a.GetAfsService(afsOrderID)
|
||||
if err == nil {
|
||||
err = utils.Map2StructByJson(result, &afsOrderInfo, false)
|
||||
}
|
||||
return afsOrderInfo, nil
|
||||
}
|
||||
|
||||
// 商家审核用户取消申请接口
|
||||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=906b430307764a3ca3698c05c72f33d0
|
||||
func (a *API) OrderCancelOperate(orderId string, isAgreed bool, operator, remark string) (err error) {
|
||||
@@ -252,6 +332,8 @@ func (a *API) OrderCancelOperate(orderId string, isAgreed bool, operator, remark
|
||||
return err
|
||||
}
|
||||
|
||||
// 订单调整接口
|
||||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=a7378109fd7243eea9efbb6231a7401c
|
||||
func (a *API) AdjustOrder(orderId, operPin, remark string, oaosAdjustDTOList []*OAOSAdjustDTO) (err error) {
|
||||
jdParams := map[string]interface{}{
|
||||
"orderId": orderId,
|
||||
@@ -297,3 +379,59 @@ func (a *API) ConfirmReceiveGoods(orderId string) (err error) {
|
||||
_, err = a.AccessAPINoPage("order/confirmReceiveGoods", jdParams, nil, nil, nullResultParser)
|
||||
return err
|
||||
}
|
||||
|
||||
// 申请售后单审核接口
|
||||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=1690f6efc0144d59823b236e0d8506a1
|
||||
func (a *API) AfsOpenApprove(afsOrderID string, afsApproveType int, rejectReason string, optPin string) (err error) {
|
||||
jdParams := map[string]interface{}{
|
||||
"serviceOrder": afsOrderID,
|
||||
"approveType": afsApproveType,
|
||||
"optPin": optPin,
|
||||
}
|
||||
if rejectReason != "" {
|
||||
jdParams["rejectReason"] = rejectReason
|
||||
}
|
||||
_, err = a.AccessAPINoPage("afs/afsOpenApprove", jdParams, nil, nil, nullResultParser)
|
||||
return err
|
||||
}
|
||||
|
||||
// 售后单确认收货接口
|
||||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=4826086e81934405980ae26f80d956e0
|
||||
func (a *API) ConfirmReceipt(afsOrderID, pin string) (err error) {
|
||||
jdParams := map[string]interface{}{
|
||||
"serviceOrder": afsOrderID,
|
||||
"pin": pin,
|
||||
}
|
||||
_, err = a.AccessAPINoPage("afs/confirmReceipt", jdParams, nil, nil, nullResultParser)
|
||||
return err
|
||||
}
|
||||
|
||||
// 商家自主发起售后接口
|
||||
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=170&apiid=b8d1ddacb03846a8a2e78c79723c752f
|
||||
func (a *API) AfsSubmit(OrderID, pin, questionTypeCode, questionDesc, questionPic, customerName, customerMobilePhone, address string, skuList []*VenderAfsSkuDTO) (afsOrderID string, err error) {
|
||||
jdParams := map[string]interface{}{
|
||||
"orderId": OrderID,
|
||||
"pin": pin,
|
||||
"questionTypeCode": questionTypeCode,
|
||||
}
|
||||
if questionDesc != "" {
|
||||
jdParams["questionDesc"] = questionDesc
|
||||
}
|
||||
if questionPic != "" {
|
||||
jdParams["questionPic"] = questionPic
|
||||
}
|
||||
if customerName != "" {
|
||||
jdParams["customerName"] = customerName
|
||||
}
|
||||
if customerMobilePhone != "" {
|
||||
jdParams["customerMobilePhone"] = customerMobilePhone
|
||||
}
|
||||
if address != "" {
|
||||
jdParams["address"] = address
|
||||
}
|
||||
result, err := a.AccessAPINoPage("afs/submit", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "0"))
|
||||
if err == nil {
|
||||
afsOrderID = utils.Interface2String(result.(map[string]interface{})["serviceOrder"])
|
||||
}
|
||||
return afsOrderID, err
|
||||
}
|
||||
|
||||
@@ -193,3 +193,11 @@ func TestDeliveryEndOrder(t *testing.T) {
|
||||
}
|
||||
sugarLogger.Debug(result)
|
||||
}
|
||||
|
||||
func TestGetAfsService(t *testing.T) {
|
||||
result, err := api.GetAfsService2("22520782")
|
||||
if err != nil {
|
||||
t.Fatal(err.Error())
|
||||
}
|
||||
sugarLogger.Debug(utils.Format4Output(result, false))
|
||||
}
|
||||
|
||||
44
utils/java_date.go
Normal file
44
utils/java_date.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type JavaDate struct {
|
||||
Day time.Weekday `json:"day"` // day of the week
|
||||
|
||||
Hours int `json:"hours"`
|
||||
Minutes int `json:"minutes"`
|
||||
Seconds int `json:"seconds"`
|
||||
Time int64 `json:"time"`
|
||||
TimezoneOffset int `json:"timezoneOffset"`
|
||||
|
||||
Date int `json:"date"`
|
||||
Month time.Month `json:"month"`
|
||||
Year int `json:"year"`
|
||||
}
|
||||
|
||||
func NewJavaDate() *JavaDate {
|
||||
return NewJavaDateFromTime(time.Now())
|
||||
}
|
||||
|
||||
func NewJavaDateFromTime(tm time.Time) (jd *JavaDate) {
|
||||
jd = &JavaDate{
|
||||
Time: tm.UnixNano() / 1000000,
|
||||
Day: tm.Weekday(),
|
||||
Hours: tm.Hour(),
|
||||
Minutes: tm.Minute(),
|
||||
Seconds: tm.Second(),
|
||||
}
|
||||
jd.Year, jd.Month, jd.Date = tm.Date()
|
||||
jd.Year -= 1900
|
||||
jd.Month--
|
||||
_, jd.TimezoneOffset = tm.Zone()
|
||||
jd.TimezoneOffset /= 60
|
||||
jd.TimezoneOffset = -jd.TimezoneOffset
|
||||
return jd
|
||||
}
|
||||
|
||||
func (j *JavaDate) GoTime() time.Time {
|
||||
return Timestamp2Time(j.Time / 1000)
|
||||
}
|
||||
38
utils/java_date_test.go
Normal file
38
utils/java_date_test.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestJavaDate(t *testing.T) {
|
||||
var (
|
||||
date interface{}
|
||||
jd *JavaDate
|
||||
)
|
||||
err := UnmarshalUseNumber([]byte(`
|
||||
{
|
||||
"date":6,
|
||||
"day":1,
|
||||
"hours":9,
|
||||
"minutes":45,
|
||||
"month":4,
|
||||
"seconds":46,
|
||||
"time":1557107146000,
|
||||
"timezoneOffset":-480,
|
||||
"year":119
|
||||
}
|
||||
`), &date)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = Map2StructByJson(date, &jd, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(jd.GoTime())
|
||||
t.Log(Format4Output(jd, false))
|
||||
|
||||
jd = NewJavaDateFromTime(jd.GoTime())
|
||||
t.Log(jd.GoTime())
|
||||
t.Log(Format4Output(jd, false))
|
||||
}
|
||||
Reference in New Issue
Block a user