xiaoetech/service/purchase.go
2026-07-30 18:11:06 +08:00

220 lines
7.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"encoding/json"
"net/http"
)
type OrderDeliveryRequestData struct {
UserId string `json:"user_id"` // 必填 用户ID
WithPackage *int `json:"with_package,omitempty"` // 可选 是否发放商品打包售卖权益默认0, 0-不发放 1-发放
PayWay *string `json:"pay_way,omitempty"` // 可选 支付渠道默认是0 0-线上微信1-线上支付宝
OutOrderId *string `json:"out_order_id,omitempty"` // 可选 商家侧关联外部订单号
TransactionId *string `json:"transaction_id,omitempty"` // 可选 商家侧交易单号
ProductInfos []ProductInfo `json:"product_infos"` // 必填 商品列表 最多20个
Express *ExpressInfo `json:"express,omitempty"` // 可选快递配送信息(实物必填)
}
// ProductInfo 商品信息
type ProductInfo struct {
SpuId string `json:"spu_id"` // 必填 统一商品ID
SkuId *string `json:"sku_id,omitempty"` // 必填 统一商品规格ID
BuyNum *int `json:"buy_num,omitempty"` // 可选 购买份数 默认1
DiscountPrice *int `json:"discount_price,omitempty"` // 可选 api优惠金额 单位分
Period *int `json:"period,omitempty"` // 可选 有效期 单位秒
PeriodTime *string `json:"period_time,omitempty"` // 可选 权益开始生效时间
}
// ExpressInfo 快递配送信息(当 express 存在时,内部字段均必填)
type ExpressInfo struct {
Receiver string `json:"receiver"` // 必填 收货人
Phone string `json:"phone"` // 必填 收货人联系方式
Province string `json:"province"` // 必填 收货人地址省份
City string `json:"city"` // 必填 收货人地址城市
County string `json:"county"` // 必填 收货人地址所在区
Detail string `json:"detail"` // 必填 收货人地址详细地址
}
type OrderDeliveryRequest struct {
Data OrderDeliveryRequestData `json:"data"`
}
type OrderDeliveryOrder struct {
Price int `json:"price"`
OrderId string `json:"order_id"`
PurchaseName string `json:"PurchaseName"`
CreatedAt string `json:"created_at"`
}
type OrderDeliveryResponseData struct {
Orders []OrderDeliveryOrder `json:"orders"`
}
type OrderDeliveryResponse struct {
BaseResponse
Data OrderDeliveryResponseData `json:"data"`
}
type ResourcePurchaseCheckRequest struct {
UserId string `json:"user_id"` // 用户id
ResourceId string `json:"resource_id"` // 资源id
}
type ResourcePurchaseCheckResponseData struct {
AuthState int `json:"auth_state"` // 是否拥有权益 0-否 1-是
}
type ResourcePurchaseCheckResponse struct {
BaseResponse
Data ResourcePurchaseCheckResponseData `json:"data"`
}
type PurchaseDeleteRequestData struct {
PaymentType string `json:"payment_type"` // 必填购买方式2-单笔、3-付费产品包、15-超级会员
ResourceType *string `json:"resource_type,omitempty"` // 可选(单笔购买时必填),资源类型
ResourceId *string `json:"resource_id,omitempty"` // 可选单笔购买时必填资源id
ProductId *string `json:"product_id,omitempty"` // 可选(产品包/超级会员时必填产品包id
UserId string `json:"user_id"` // 必填用户id
}
type PurchaseDeleteRequest struct {
UserId string `json:"user_id"` // 用户id
Data PurchaseDeleteRequestData `json:"data"`
}
type PurchaseDeleteResponseData struct {
Delete int `json:"delete"` // 1-订阅取消成功
}
type PurchaseDeleteResponse struct {
BaseResponse
Data PurchaseDeleteResponseData `json:"data"`
}
type OrderDeliveryRequestV1 struct {
UserId string `json:"user_id"` // 用户ID顶层
Data OrderDeliveryDataV1 `json:"data"` // 订单数据
}
// OrderDeliveryDataV1 订单数据
type OrderDeliveryDataV1 struct {
PaymentType int `json:"payment_type"` // 必填付费类型2-单品3-产品包15-超级会员
ResourceType int `json:"resource_type"` // 必填,资源类型
ResourceId *string `json:"resource_id,omitempty"` // 单品IDpayment_type=2时必填
ProductId *string `json:"product_id,omitempty"` // 产品包IDpayment_type=3时必填
UserId string `json:"user_id"` // 必填用户ID
OutOrderId *string `json:"out_order_id,omitempty"` // 可选,外部订单号
PayWay *int `json:"pay_way,omitempty"` // 可选支付渠道0-线上微信2-线上支付宝1-未指定
ChannelId *string `json:"channel_id,omitempty"` // 可选渠道ID
ChannelInfo *string `json:"channel_info,omitempty"` // 可选,渠道来源
Period *string `json:"period,omitempty"` // 可选,有效期(秒),超级会员必传
PeriodTime *string `json:"period_time,omitempty"` // 可选,会员开始时间,超级会员必传
Agent *string `json:"agent,omitempty"` // 可选,用户设备信息
DiscountPrice *int `json:"discount_price,omitempty"` // 可选API优惠金额单位
Source *int `json:"source,omitempty"` // 可选开通知识带货商品必传10
}
// OrderDeliveryResponseV1 订单发货响应V1版本
type OrderDeliveryResponseV1 struct {
Code int `json:"code"` // 请求结果码0表示成功
Msg string `json:"msg"` // 描述信息
Data OrderDeliveryResponseDataV1 `json:"data"` // 数据
}
// OrderDeliveryResponseDataV1 响应数据
type OrderDeliveryResponseDataV1 struct {
Price int `json:"price"` // 商品价格(单位:分)
OrderId string `json:"order_id"` // 订单编号
PurchaseName string `json:"purchase_name"` // 商品名称
CreatedAt CreatedAt `json:"created_at"` // 创建时间
}
type CreatedAt struct {
Date string `json:"date"`
Timezone string `json:"timezone"`
TimezoneType int `json:"timezone_type"`
}
// MARK 用户开通产品包权益2.0
func (client *Client) OrderDelivery(req *OrderDeliveryRequest) (*OrderDeliveryResponse, error) {
paramsMap, err := ToMap(req)
if err != nil {
return nil, err
}
respByte, err := client.CurlDo(http.MethodPost, OrderDeliveryUrl, paramsMap)
if err != nil {
return nil, err
}
resp := OrderDeliveryResponse{}
err = json.Unmarshal(respByte, &resp)
if err != nil {
return nil, err
}
return &resp, nil
}
// MARK 用户开通产品包权益1.0
func (client *Client) OrderDeliveryV1(req *OrderDeliveryRequestV1) (*OrderDeliveryResponseV1, error) {
paramsMap, err := ToMap(req)
if err != nil {
return nil, err
}
respByte, err := client.CurlDo(http.MethodPost, OrderDeliveryUrlV1, paramsMap)
if err != nil {
return nil, err
}
resp := OrderDeliveryResponseV1{}
err = json.Unmarshal(respByte, &resp)
if err != nil {
return nil, err
}
return &resp, nil
}
// MARK 查询用户资源权益
func (client *Client) ResourcePurchaseCheck(req *ResourcePurchaseCheckRequest) (resp *ResourcePurchaseCheckResponse, err error) {
paramsMap, err := ToMap(req)
if err != nil {
return
}
respByte, err := client.CurlDo(http.MethodPost, PermissionCheckUrl, paramsMap)
if err != nil {
return
}
resp2 := ResourcePurchaseCheckResponse{}
err = json.Unmarshal(respByte, &resp2)
if err != nil {
return
}
resp = &resp2
return
}
// MARK 取消订购
func (client *Client) PurchaseDelete(req *PurchaseDeleteRequest) (resp *PurchaseDeleteResponse, err error) {
paramsMap, err := ToMap(req)
if err != nil {
return
}
respByte, err := client.CurlDo(http.MethodPost, PurchaseDeleteUrl, paramsMap)
if err != nil {
return
}
resp2 := PurchaseDeleteResponse{}
err = json.Unmarshal(respByte, &resp2)
if err != nil {
return
}
resp = &resp2
return
}