From e93e80e2b79785ba66848cf665810e48c8b92360 Mon Sep 17 00:00:00 2001 From: renzhiyuan <465386466@qq.com> Date: Fri, 28 Aug 2026 16:16:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6:=20errors.?= =?UTF-8?q?go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- errors.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 errors.go diff --git a/errors.go b/errors.go new file mode 100644 index 0000000..2cb77fb --- /dev/null +++ b/errors.go @@ -0,0 +1,72 @@ +package sdk_LinkedMall + +import "fmt" + +// 业务错误码常量。 +const ( + // CodeShopTypeInvalid SKU 属于经销集采店铺,不可下单,应过滤该 SKU。 + CodeShopTypeInvalid = "ShopTypeInvalid" + // CodeSkuPriceUnique SKU 价格非最新,需重新调用 RenderPurchaseOrder 获取最新价格后再下单。 + CodeSkuPriceUnique = "SkuPriceUnique" + // CodePurchaseOrderNotFound 采购单号不存在,需核对入参 PurchaseOrderId。 + CodePurchaseOrderNotFound = "PurchaseOrderNotFound" + // CodeRefundNumberMustLessThanOrder 退款数量大于订单商品数量,需修正退款数量。 + CodeRefundNumberMustLessThanOrder = "RefundNumberMustLessThanOrder" + // CodeRefundAmountMustLessThanOrder 退款金额大于实付金额,需修正退款金额。 + CodeRefundAmountMustLessThanOrder = "RefundAmountMustLessThanOrder" + // CodeHasNoPrivilege RAM 无接口权限,需检查 RAM 授权策略。 + CodeHasNoPrivilege = "HasNoPrivilege" + // CodeOrderNotFound 订单 ID 不存在,需核对 OrderId。 + CodeOrderNotFound = "OrderNotFound" + // CodeShopNotFind 店铺不存在,需核对 ShopId / PurchaserId。 + CodeShopNotFind = "ShopNotFind" + // CodeSavePurchaseOrderError 保存采购单服务端异常,建议短间隔重试。 + CodeSavePurchaseOrderError = "SavePurchaseOrderError" + // CodeOuterPurchaseOrderIdExist 外部业务单号重复,需更换 OuterPurchaseOrderId 并做好幂等。 + CodeOuterPurchaseOrderIdExist = "OuterPurchaseOrderIdExist" +) + +// APIError 表示业务侧返回的错误。 +type APIError struct { + RequestId string + Code string + Message string + SubCode string + SubMessage string +} + +// Error 实现 error 接口。 +func (e *APIError) Error() string { + return fmt.Sprintf( + "linkedmall api error [requestId=%s code=%s subCode=%s]: %s %s", + e.RequestId, e.Code, e.SubCode, e.Message, e.SubMessage, + ) +} + +// CheckSuccess 校验响应是否业务成功。 +// +// 返回 nil 表示 Success 为 true(业务成功); +// 否则返回 *APIError,携带 Code / SubCode / SubMessage 便于定位原因。 +func CheckSuccess(resp *CommonResponse) error { + if resp == nil { + return fmt.Errorf("linkedmall: empty response") + } + if resp.Success { + return nil + } + return &APIError{ + RequestId: resp.RequestId, + Code: resp.Code, + Message: resp.Message, + SubCode: resp.SubCode, + SubMessage: resp.SubMessage, + } +} + +// IsCode 判断响应是否命中指定错误码。 +func IsCode(resp *CommonResponse, code string) bool { + return resp != nil && resp.Code == code +} +``` + +```go \ No newline at end of file