wpc_refund.go 7.0 KB
package wpc

import (
	"context"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
)

type refundWpc struct {
}

var Refund = refundWpc{}

type RefundReasonReq struct {
	ChannelId  string `json:"vopChannelId"`
	UserNumber string `json:"userNumber"`
	OrderSn    string `json:"orderSn"`
	ReturnId   string `json:"returnId,omitempty"`
	AreaId     string `json:"areaId,omitempty"`
}

type RefundReasonRes struct {
	ReturnCode    string      `json:"returnCode"`
	ReturnMessage string      `json:"returnMessage"`
	Result        struct{
		OrderId string `json:"order_id"`
		OrderSn string `json:"order_sn"`
		GoodsList []struct{
			GoodsId int `json:"goodsId"`
			Name string `json:"name"`
			ReturnAble bool `json:"returnAble"`
			ReasonList []struct{
				ReasonId int `json:"reasonId"`
				ReasonInfo string `json:"reasonInfo"`
				UploadImgFlag bool `json:"uploadImgFlag"`
			}
			Sizes []struct{
				SizeId int64 `json:"sizeId"`
				Name string `json:"name"`
				Price string `json:"price"`
				returnReasonId string `json:"returnReasonId"`
				returnReasonRemark string `json:"returnReasonRemark"`
				ReasonList []struct{
					ReasonId int `json:"reasonId"`
					ReasonInfo string `json:"reasonInfo"`
					UploadImgFlag bool `json:"uploadImgFlag"`
				}
				ImageList []string `json:"imageList"`
				ReturnPrimaryId string `json:"returnPrimaryId"`
				Num int `json:"num"`
			} `json:"sizes"`
		} `json:"goodsList"`
	} `json:"result"`
}



type RefundApplyReq struct {
	ChannelId  string `json:"vopChannelId"`
	UserNumber string `json:"userNumber"`
	OrderSn    string `json:"orderSn"`
	SizeInfo   []map[string]uint `json:"sizeInfo"`
}

type RefundApplySizeInfo struct {
	SizeID   int `json:"sizeId"`
	Num      int `json:"num"`
	ReasonID int `json:"reasonId"`
}

type RefundApplyRes struct {
	ReturnCode    string      `json:"returnCode"`
	ReturnMessage string      `json:"returnMessage"`
	Result        bool        `json:"result"`
}
type RefundSubmitReq struct {
	ChannelId    string `json:"vopChannelId"`
	UserNumber   string `json:"userNumber"`
	OrderSn      string `json:"orderSn"`
	CarriersCode string `json:"carriersCode"`
	TransportNo  string `json:"transportNo"`
	Remark       string `json:"remark,omitempty"`
	ReturnId     string `json:"returnId,omitempty"`
}

type RefundSubmitRes struct {
	ReturnCode    string      `json:"returnCode"`
	ReturnMessage string      `json:"returnMessage"`
	Result        struct{
		Success bool
	} `json:"result"`
}
type RefundDetailReq struct {
	ChannelId  string `json:"vopChannelId"`
	UserNumber string `json:"userNumber"`
	OrderSn    string `json:"orderSn"`
	ReturnId   string `json:"returnId"`
}

type RefundDetailRes struct {
	ReturnCode    string      `json:"returnCode"`
	ReturnMessage string      `json:"returnMessage"`
	Result        struct{
		OrderId string `json:"orderId"`
		OrderSn string `json:"orderSn"`
		ReturnId string `json:"returnId"`
		ReturnStatus string `json:"returnStatus"`
		TransportStatus string `json:"transportStatus"`
		ReturnProgressDesc string `json:"returnProgressDesc"`
		ReturnProgressTime string `json:"returnProgressTime"`
		ReturnAmount string `json:"returnAmount"`
		ReturnAddressInfo struct{
			Address string `json:"address"`
			Name string `json:"name"`
			Phone string `json:"phone"`
		} `json:"returnAddressInfo"`
		GoodsList struct{
			GoodsId string `json:"goodsId"`
			Name string `json:"name"`
			Image string `json:"image"`
			BrandCn string `json:"brandCn"`
			BrandEn string `json:"brandEn"`
			Sn string `json:"sn"`
			GoodsIdStr string `json:"goodsIdStr"`
			Sizes struct{
				SizeId int64 `json:"sizeId"`
				Name string `json:"name"`
				Price string `json:"price"`
				Color string `json:"color"`
				SizeIdStr string `json:"sizeIdStr"`
				ReturnReasonId string `json:"returnReasonId"`
				ReturnReasonRemark string `json:"returnReasonRemark"`
				ReasonList struct{
					ReasonId int `json:"reasonId"`
					ReasonInfo string `json:"reasonInfo"`
					UploadImgFlag bool `json:"uploadImgFlag"`

				}`json:"reasonList"`
				ImageList []string `json:"imageList"`
				ReturnPrimaryId string `json:"returnPrimaryId"`
				Num int `json:"num"`
			} `json:"sizes"`

		} `json:"goodsList"`
		ReturnGoodsAmount string `json:"returnGoodsAmount"`
		HasOXO string `json:"hasOXO"`
		IsStoreOrder string `json:"isStoreOrder"`
		ReturnStatusCode int  `json:"returnStatusCode"`//退货状态码: 1.未审核 2.退货已审核 3.审核不通过 4.退货返仓中 5.(已退款)已完成 6.已取消
		IsQualityProblem bool `json:"isQualityProblem"`
		CreateTime string `json:"createTime"`
		AuditTime string `json:"auditTime"`
		QualityProblemUserModifyTimeout string `json:"qualityProblemUserModifyTimeout"`
		CancelReasonType int  `json:"cancelReasonType"`
		CancelReason string `json:"cancelReason"`
		RefundStatus string `json:"refundStatus"` //退款状态, 0:未退款 1:已退款


	} `json:"result"`
}
type RefundCancelReq struct {
	ChannelId  string `json:"vopChannelId"`
	UserNumber string `json:"userNumber"`
	OrderSn    string `json:"orderSn"`
	ReturnId   string `json:"returnId"`
}
type RefundCancelRes struct {
	ReturnCode    string      `json:"returnCode"`
	ReturnMessage string      `json:"returnMessage"`
	Result        struct{
		Success bool
	} `json:"result"`
}
//Reason 退货原因
func (refundWpc) Reason(ctx context.Context, req RefundReasonReq) (res *RefundReasonRes, err error) {
	method := "getReturnOrderCreate"
	req.ChannelId = server.AppKey
	req.UserNumber = server.UserNumber
	result, err := post(ctx, method, g.Map{
		"request": req,
	})
	_ = gjson.NewWithOptions(result, gjson.Options{
		StrNumber: true,
	}).Scan(&res)
	return
}
//Apply 申请
func (refundWpc) Apply(ctx context.Context, req RefundApplyReq) (res *RefundApplyRes, err error) {
	method := "orderReturnCreate"
	req.ChannelId = server.AppKey
	req.UserNumber = server.UserNumber
	result, err := post(ctx, method, g.Map{
		"request": req,
	})
	_ = gjson.NewWithOptions(result, gjson.Options{
		StrNumber: true,
	}).Scan(&res)
	return
}



//Submit 填写回寄物流单号
func (refundWpc) Submit(ctx context.Context, req RefundSubmitReq) (res *RefundSubmitRes, err error) {
	method := "updateReturnTransportNo"
	req.ChannelId = server.AppKey
	req.UserNumber = server.UserNumber
	result, err := post(ctx, method, g.Map{
		"request": req,
	})
	_ = gjson.NewWithOptions(result, gjson.Options{
		StrNumber: true,
	}).Scan(&res)
	return
}



//售后详情
func (refundWpc) Detail(ctx context.Context, req RefundDetailReq) (res *RefundDetailRes, err error) {
	method := "getOrderReturnDetail"
	req.ChannelId = server.AppKey
	req.UserNumber = server.UserNumber
	result, err := post(ctx, method, g.Map{
		"request": req,
	})
	_ = gjson.NewWithOptions(result, gjson.Options{
		StrNumber: true,
	}).Scan(&res)
	return
}
//取消售后
func (refundWpc) Cancel(ctx context.Context, req RefundCancelReq) (res *RefundCancelRes, err error) {
	method := "cancelReturnedOrder"
	req.ChannelId = server.AppKey
	req.UserNumber = server.UserNumber
	result, err := post(ctx, method, g.Map{
		"request": req,
	})
	_ = gjson.NewWithOptions(result, gjson.Options{
		StrNumber: true,
	}).Scan(&res)
	return
}