package order import ( "git.oa00.com/go/jdsdk/address" "git.oa00.com/go/jdsdk/config" "git.oa00.com/go/jdsdk/request" ) type AfterSale struct { } const ( afterSaleIsCan = "jingdong.ctp.afs.operate.apply.getIsCanApplyInfo" afterSaleReason = "jingdong.ctp.afs.operate.apply.getApplyReason" afterSaleApply = "jingdong.ctp.afs.operate.apply.createAfsApply" afterSaleLogisticsAddress = "jingdong.ctp.afs.logistics.getLogisticsAddress" afterSaleDelivery = "jingdong.ctp.afs.logistics.postBackLogisticsBillParam" afterSaleInfo = "jingdong.ctp.afs.servicenbill.getAfsServiceDetail" afterSaleCancel = "jingdong.ctp.afs.servicenbill.cancelAfsService" AfterServiceCanApplyFalse = 0 // 不可申请 AfterServiceCanApplyTrue = 1 // 可申请 AfterServiceAfsDetailTypeMaster = 10 // 主品 AfterServiceAfsDetailTypeSlave = 20 // 赠品 ) type canApplyInfoParam struct { Pin string `json:"pin"` // 下单账号 SkuId uint64 `json:"skuId"` // skuId OrderId uint64 `json:"orderId"` // 订单号 //AfsDetailType uint `json:"afsDetailType"` // 商品类型 10=主品 20=赠品 } type resIsCanInfo struct { CanApply uint `json:"canApply"` // 是否可申请售后 0=不可申请 1=可申请 SkuId uint64 `json:"skuId"` // skuId AppliedNum uint `json:"appliedNum"` // 已申请售后商品数量 CannotApplyTip string `json:"cannotApplyTip"` // 不可申请原因 OrderId uint64 `json:"orderId"` // 订单号 AfsSupportedTypes []AfterSaleTypeItem `json:"afsSupportedTypes"` // 可售后类型列表 } type AfterSaleTypeItem struct { AfsTypeName string `json:"afsTypeName"` // 售后名称 AfsType uint `json:"afsType"` // 售后类型 } // IsCan @Title 是否能售后 func (a *AfterSale) IsCan(skuId, orderId uint64) (result resIsCanInfo, err error) { err = request.ExecCtlProtocol(afterSaleIsCan, canApplyInfoParam{ Pin: config.SdkConfig.Pin, SkuId: skuId, OrderId: orderId, }, &result) return } type applyReasonParam struct { Pin string `json:"pin"` // 账号 SkuId uint64 `json:"skuId"` // skuId AfsType uint `json:"afsType"` // 售后类型 10=退货 20=换货 OrderId uint64 `json:"orderId"` // 订单号 //AfsDetailType uint `json:"afsDetailType"` // 商品类型 10=主品 20=赠品 } type reasonItem struct { ApplyReasonName string `json:"applyReasonName"` // 售后原因 ApplyReasonId uint `json:"applyReasonId"` // 售后Id NeedUploadPic bool `json:"needUploadPic"` // 是否必须传图 } // Reason @Title 售后原因 func (a *AfterSale) Reason(skuId, orderId uint64, AfsType uint) (result []reasonItem, err error) { err = request.ExecCtlProtocol(afterSaleReason, applyReasonParam{ Pin: config.SdkConfig.Pin, SkuId: skuId, OrderId: orderId, AfsType: AfsType, }, &result) return } type afsApplyParam struct { Pin string `json:"pin"` // 下单账号 PickWareType uint `json:"pickWareType"` // 取件方式 40=客户发货 固定 PickWareAddress address.Address `json:"pickWareAddress"` // 取件地址 ApplyParam } type ApplyParam struct { ApplyReasonName string `json:"applyReasonName"` // 售后原因 ApplyReasonId uint `json:"applyReasonId"` // 售后原因id ChannelAfsApplyId string `json:"channelAfsApplyId"` // 渠道售后申请单号 AfsType uint `json:"afsType"` // 期望售后类型 10=退货 20=换货 QuestionPic string `json:"questionPic"` // 问题图片 逗号分隔 OrderId uint `json:"orderId"` // 订单号 SkuQuantity AfterSaleSkuItem `json:"skuQuantity"` // 申请商品信息 } type AfterSaleSkuItem struct { SkuId uint64 `json:"skuId"` // skuId SkuName string `json:"skuName"` // skuName Quantity uint `json:"quantity"` // 数量 AfsDetailType uint `json:"afsDetailType"` // 商品类型 10=主品 20=赠品 } type resApply struct { ChannelAfsApplyId string `json:"channelAfsApplyId"` // 渠道申请单号 AfsApplyId uint64 `json:"afsApplyId"` // 京东申请单号 } // Apply @Title 售后申请 func (a *AfterSale) Apply(data ApplyParam) (result resApply, err error) { err = request.ExecCtlProtocol(afterSaleApply, afsApplyParam{ Pin: config.SdkConfig.Pin, PickWareType: 40, ApplyParam: data, }, &result) return } type logisticsAddressParam struct { AfsServiceId uint64 `json:"afsServiceId"` // 售后id Pin string `json:"pin"` // 下单账号 } type resLogisticsAddress struct { ContactsMobile string `json:"contactsMobile"` // 回寄手机号 ContactsZipCode string `json:"contactsZipCode"` // 回寄邮编 Address string `json:"address"` // 回寄详细地址 ContactsName string `json:"contactsName"` // 回寄联系人 } // LogisticsAddress @Title 回寄地址 func (a *AfterSale) LogisticsAddress(afsServiceId uint64) (result resLogisticsAddress, err error) { err = request.ExecCtlProtocol(afterSaleLogisticsAddress, logisticsAddressParam{ AfsServiceId: afsServiceId, Pin: config.SdkConfig.Pin, }, &result) return } type logisticsBillParam struct { Pin string `json:"pin"` // 下单账号 AfsServiceId uint64 `json:"afsServiceId"` // 售后id LogisticsCompany string `json:"logisticsCompany"` // 物流公司 WaybillCode string `json:"waybillCode"` // 运单号 SendGoodsDate string `json:"sendGoodsDate"` // 运单发货日期 Y-m-d } type resDelivery struct { Message string `json:"message"` // 回传结果描述 PostBackResult bool `json:"postBackResult"` // 回传结果 } // Delivery @Title 回传客户发货信息 func (a *AfterSale) Delivery(afsServiceId uint64, logisticsCompany, waybillCode, sendGoodsDate string) (result resDelivery, err error) { err = request.ExecCtlProtocol(afterSaleDelivery, logisticsBillParam{ Pin: config.SdkConfig.Pin, AfsServiceId: afsServiceId, LogisticsCompany: logisticsCompany, WaybillCode: waybillCode, SendGoodsDate: sendGoodsDate, }, &result) return } type afsServiceDetailParam struct { AfsServiceId uint64 `json:"afsServiceId"` // 售后id Pin string `json:"pin"` // 下单账号 } type resInfo struct { ProcessResult uint `json:"processResult"` // 处理结果 CustomerName string `json:"customerName"` // 客户名称 ApplyReasonId uint `json:"applyReasonId"` // 售后原因id ApplyReasonName string `json:"applyReasonName"` // 售后原因 ApproveResult uint `json:"approveResult"` // 审核结果 AfsApplyTime int64 `json:"afsApplyTime"` // 发起售后申请时间 Y-m-d H:i:s ApproveResultName string `json:"approveResultName"` // 审核结果 ProcessResultName string `json:"processResultName"` // 处理结果 AfsType uint `json:"afsType"` // 售后服务类型id退货(10),换货(20) ReturnWareType uint `json:"returnWareType"` // 售后返件类型 1:客户发货 CustomerMobile string `json:"customerMobile"` // 售后联系人联系方式 QuestionPic string `json:"questionPic"` // 售后描述图片 ApproveNotes string `json:"approveNotes"` // 售后服务单审核意见 ApprovedDate int64 `json:"approvedDate"` // 售后服务单审核时间 Y-m-d H:i:s CustomerEmail string `json:"customerEmail"` // 售后联系人邮箱 ProcessedDate string `json:"processedDate"` // 售后服务单处理时间 Y-m-d H:i:s AfsApplyId uint64 `json:"afsApplyId"` // 售后申请单号 AfsTypeName string `json:"afsTypeName"` // 用户期望的售后服务类型 1:退货 2:换货 AfsServiceState uint `json:"afsServiceState"` // 服务单状态 AfsServiceId uint64 `json:"afsServiceId"` // 京东售后服务单号 NewOrderId uint64 `json:"newOrderId"` // 售后换新订单号 AfsServiceStep uint `json:"afsServiceStep"` // 处理环节 AfsServiceStateName string `json:"afsServiceStateName"` // 售后处理状态 ProcessNotes string `json:"processNotes"` // 售后处理意见 AfsServiceStepName string `json:"afsServiceStepName"` // 售后当前处理环节 OrderId string `json:"orderId"` // 订单号 SkuQuantity skuItem `json:"skuQuantity"` // sku信息 DesenCustomerMobile string `json:"desen_customerMobile"` // 售后联系人联系方式 } type skuItem struct { SkuId string `json:"skuId"` // skuId SkuName string `json:"skuName"` // skuName Quantity uint `json:"quantity"` // 数量 ValidNumFlag uint `json:"validNumFlag"` // 赠品申请标识 1代表申请了,0代表没申请或释放了,后续可以继续申请 SkuType uint `json:"skuType"` // 标识商品属性 1单品、2买赠:赠品套装中的主商品、3买赠:赠品套装中的赠品 } // Info @Title 售后详情 func (a *AfterSale) Info(afsServiceId uint64) (result resInfo, err error) { err = request.ExecCtlProtocol(afterSaleInfo, afsServiceDetailParam{ AfsServiceId: afsServiceId, Pin: config.SdkConfig.Pin, }, &result) return } type cancelAfsServiceParam struct { AfsServiceId uint64 `json:"afsServiceId"` // 售后id Pin string `json:"pin"` // 下单账号 } type resCancel struct { CancelState uint `json:"cancelState"` // 1=不可取消 2=取消成功 3=取消失败 } // Cancel @Title 取消售后服务单 func (a *AfterSale) Cancel(afsServiceId uint64) (result resCancel, err error) { err = request.ExecCtlProtocol(afterSaleCancel, cancelAfsServiceParam{ AfsServiceId: afsServiceId, Pin: config.SdkConfig.Pin, }, &result) return }