mirror of
https://github.com/rjNemo/go-wiki
synced 2026-06-06 02:36:40 +00:00
272 lines
9.5 KiB
Go
272 lines
9.5 KiB
Go
package stripe
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
// OrderStatus represents the statuses of an order object.
|
|
type OrderStatus string
|
|
|
|
// List of values that OrderStatus can take.
|
|
const (
|
|
OrderStatusCanceled OrderStatus = "canceled"
|
|
OrderStatusCreated OrderStatus = "created"
|
|
OrderStatusFulfilled OrderStatus = "fulfilled"
|
|
OrderStatusPaid OrderStatus = "paid"
|
|
OrderStatusReturned OrderStatus = "returned"
|
|
)
|
|
|
|
// OrderDeliveryEstimateType represents the type of delivery estimate for shipping methods
|
|
type OrderDeliveryEstimateType string
|
|
|
|
// List of values that OrderDeliveryEstimateType can take.
|
|
const (
|
|
OrderDeliveryEstimateTypeExact OrderDeliveryEstimateType = "exact"
|
|
OrderDeliveryEstimateTypeRange OrderDeliveryEstimateType = "range"
|
|
)
|
|
|
|
// OrderItemType represents the type of order item
|
|
type OrderItemType string
|
|
|
|
// List of values that OrderItemType can take.
|
|
const (
|
|
OrderItemTypeCoupon OrderItemType = "coupon"
|
|
OrderItemTypeDiscount OrderItemType = "discount"
|
|
OrderItemTypeSKU OrderItemType = "sku"
|
|
OrderItemTypeShipping OrderItemType = "shipping"
|
|
OrderItemTypeTax OrderItemType = "tax"
|
|
)
|
|
|
|
// OrderItemParentType represents the type of order item parent
|
|
type OrderItemParentType string
|
|
|
|
// List of values that OrderItemParentType can take.
|
|
const (
|
|
OrderItemParentTypeCoupon OrderItemParentType = "coupon"
|
|
OrderItemParentTypeDiscount OrderItemParentType = "discount"
|
|
OrderItemParentTypeSKU OrderItemParentType = "sku"
|
|
OrderItemParentTypeShipping OrderItemParentType = "shipping"
|
|
OrderItemParentTypeTax OrderItemParentType = "tax"
|
|
)
|
|
|
|
// OrderItemParent describes the parent of an order item.
|
|
type OrderItemParent struct {
|
|
ID string `json:"id"`
|
|
SKU *SKU `json:"-"`
|
|
Type OrderItemParentType `json:"object"`
|
|
}
|
|
|
|
// OrderParams is the set of parameters that can be used when creating an order.
|
|
type OrderParams struct {
|
|
Params `form:"*"`
|
|
Coupon *string `form:"coupon"`
|
|
Currency *string `form:"currency"`
|
|
Customer *string `form:"customer"`
|
|
Email *string `form:"email"`
|
|
Items []*OrderItemParams `form:"items"`
|
|
Shipping *ShippingParams `form:"shipping"`
|
|
}
|
|
|
|
// ShippingParams is the set of parameters that can be used for the shipping hash
|
|
// on order creation.
|
|
type ShippingParams struct {
|
|
Address *AddressParams `form:"address"`
|
|
Name *string `form:"name"`
|
|
Phone *string `form:"phone"`
|
|
}
|
|
|
|
// OrderUpdateParams is the set of parameters that can be used when updating an order.
|
|
type OrderUpdateParams struct {
|
|
Params `form:"*"`
|
|
Coupon *string `form:"coupon"`
|
|
SelectedShippingMethod *string `form:"selected_shipping_method"`
|
|
Shipping *OrderUpdateShippingParams `form:"shipping"`
|
|
Status *string `form:"status"`
|
|
}
|
|
|
|
// OrderUpdateShippingParams is the set of parameters that can be used for the shipping
|
|
// hash on order update.
|
|
type OrderUpdateShippingParams struct {
|
|
Carrier *string `form:"carrier"`
|
|
TrackingNumber *string `form:"tracking_number"`
|
|
}
|
|
|
|
// Shipping describes the shipping hash on an order.
|
|
type Shipping struct {
|
|
Address *Address `json:"address"`
|
|
Carrier string `json:"carrier"`
|
|
Name string `json:"name"`
|
|
Phone string `json:"phone"`
|
|
TrackingNumber string `json:"tracking_number"`
|
|
}
|
|
|
|
// ShippingMethod describes a shipping method as available on an order.
|
|
type ShippingMethod struct {
|
|
Amount int64 `json:"amount"`
|
|
ID string `json:"id"`
|
|
Currency Currency `json:"currency"`
|
|
DeliveryEstimate *DeliveryEstimate `json:"delivery_estimate"`
|
|
Description string `json:"description"`
|
|
}
|
|
|
|
// DeliveryEstimate represent the properties available for a shipping method's
|
|
// estimated delivery.
|
|
type DeliveryEstimate struct {
|
|
// If Type == Exact
|
|
Date string `json:"date"`
|
|
// If Type == Range
|
|
Earliest string `json:"earliest"`
|
|
Latest string `json:"latest"`
|
|
Type OrderDeliveryEstimateType `json:"type"`
|
|
}
|
|
|
|
// Order is the resource representing a Stripe charge.
|
|
// For more details see https://stripe.com/docs/api#orders.
|
|
type Order struct {
|
|
Amount int64 `json:"amount"`
|
|
AmountReturned int64 `json:"amount_returned"`
|
|
Application string `json:"application"`
|
|
ApplicationFee int64 `json:"application_fee"`
|
|
Charge *Charge `json:"charge"`
|
|
Created int64 `json:"created"`
|
|
Currency Currency `json:"currency"`
|
|
Customer Customer `json:"customer"`
|
|
Email string `json:"email"`
|
|
ID string `json:"id"`
|
|
Items []*OrderItem `json:"items"`
|
|
Livemode bool `json:"livemode"`
|
|
Metadata map[string]string `json:"metadata"`
|
|
Returns *OrderReturnList `json:"returns"`
|
|
SelectedShippingMethod *string `json:"selected_shipping_method"`
|
|
Shipping *Shipping `json:"shipping"`
|
|
ShippingMethods []*ShippingMethod `json:"shipping_methods"`
|
|
Status string `json:"status"`
|
|
StatusTransitions StatusTransitions `json:"status_transitions"`
|
|
Updated int64 `json:"updated"`
|
|
UpstreamID string `json:"upstream_id"`
|
|
}
|
|
|
|
// OrderList is a list of orders as retrieved from a list endpoint.
|
|
type OrderList struct {
|
|
ListMeta
|
|
Data []*Order `json:"data"`
|
|
}
|
|
|
|
// OrderListParams is the set of parameters that can be used when listing orders.
|
|
type OrderListParams struct {
|
|
ListParams `form:"*"`
|
|
Created *int64 `form:"created"`
|
|
CreatedRange *RangeQueryParams `form:"created"`
|
|
Customer *string `form:"customer"`
|
|
IDs []*string `form:"ids"`
|
|
Status *string `form:"status"`
|
|
StatusTransitions *StatusTransitionsFilterParams `form:"status_transitions"`
|
|
UpstreamIDs []*string `form:"upstream_ids"`
|
|
}
|
|
|
|
// StatusTransitionsFilterParams are parameters that can used to filter on status_transition when listing orders.
|
|
type StatusTransitionsFilterParams struct {
|
|
Canceled *int64 `form:"canceled"`
|
|
CanceledRange *RangeQueryParams `form:"canceled"`
|
|
Fulfilled *int64 `form:"fulfilled"`
|
|
FulfilledRange *RangeQueryParams `form:"fulfilled"`
|
|
Paid *int64 `form:"paid"`
|
|
PaidRange *RangeQueryParams `form:"paid"`
|
|
Returned *int64 `form:"returned"`
|
|
ReturnedRange *RangeQueryParams `form:"returned"`
|
|
}
|
|
|
|
// StatusTransitions are the timestamps at which the order status was updated.
|
|
type StatusTransitions struct {
|
|
Canceled int64 `json:"canceled"`
|
|
Fulfilled int64 `json:"fulfilled"`
|
|
Paid int64 `json:"paid"`
|
|
Returned int64 `json:"returned"`
|
|
}
|
|
|
|
// OrderPayParams is the set of parameters that can be used when paying orders.
|
|
type OrderPayParams struct {
|
|
Params `form:"*"`
|
|
ApplicationFee *int64 `form:"application_fee"`
|
|
Customer *string `form:"customer"`
|
|
Email *string `form:"email"`
|
|
Source *SourceParams `form:"*"` // SourceParams has custom encoding so brought to top level with "*"
|
|
}
|
|
|
|
// OrderItemParams is the set of parameters describing an order item on order creation or update.
|
|
type OrderItemParams struct {
|
|
Amount *int64 `form:"amount"`
|
|
Currency *string `form:"currency"`
|
|
Description *string `form:"description"`
|
|
Parent *string `form:"parent"`
|
|
Quantity *int64 `form:"quantity"`
|
|
Type *string `form:"type"`
|
|
}
|
|
|
|
// OrderItem is the resource representing an order item.
|
|
type OrderItem struct {
|
|
Amount int64 `json:"amount"`
|
|
Currency Currency `json:"currency"`
|
|
Description string `json:"description"`
|
|
Parent *OrderItemParent `json:"parent"`
|
|
Quantity int64 `json:"quantity"`
|
|
Type OrderItemType `json:"type"`
|
|
}
|
|
|
|
// SetSource adds valid sources to a OrderParams object,
|
|
// returning an error for unsupported sources.
|
|
func (op *OrderPayParams) SetSource(sp interface{}) error {
|
|
source, err := SourceParamsFor(sp)
|
|
op.Source = source
|
|
return err
|
|
}
|
|
|
|
// UnmarshalJSON handles deserialization of an OrderItemParent.
|
|
// This custom unmarshaling is needed because the resulting
|
|
// property may be an id or a full SKU struct if it was expanded.
|
|
func (p *OrderItemParent) UnmarshalJSON(data []byte) error {
|
|
if id, ok := ParseID(data); ok {
|
|
p.ID = id
|
|
return nil
|
|
}
|
|
|
|
type orderItemParent OrderItemParent
|
|
var v orderItemParent
|
|
if err := json.Unmarshal(data, &v); err != nil {
|
|
return err
|
|
}
|
|
|
|
var err error
|
|
*p = OrderItemParent(v)
|
|
|
|
switch p.Type {
|
|
case OrderItemParentTypeSKU:
|
|
// Currently only SKUs `parent` is returned as an object when expanded.
|
|
// For other items only IDs are returned.
|
|
if err = json.Unmarshal(data, &p.SKU); err != nil {
|
|
return err
|
|
}
|
|
p.ID = p.SKU.ID
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// UnmarshalJSON handles deserialization of an Order.
|
|
// This custom unmarshaling is needed because the resulting
|
|
// property may be an id or the full struct if it was expanded.
|
|
func (o *Order) UnmarshalJSON(data []byte) error {
|
|
if id, ok := ParseID(data); ok {
|
|
o.ID = id
|
|
return nil
|
|
}
|
|
|
|
type order Order
|
|
var v order
|
|
if err := json.Unmarshal(data, &v); err != nil {
|
|
return err
|
|
}
|
|
|
|
*o = Order(v)
|
|
return nil
|
|
}
|