mirror of
https://github.com/rjNemo/go-wiki
synced 2026-06-06 02:36:40 +00:00
352 lines
14 KiB
Go
352 lines
14 KiB
Go
package stripe
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/stripe/stripe-go/form"
|
|
)
|
|
|
|
// SourceCodeVerificationFlowStatus represents the possible statuses of a code verification flow.
|
|
type SourceCodeVerificationFlowStatus string
|
|
|
|
// List of values that SourceCodeVerificationFlowStatus can take.
|
|
const (
|
|
SourceCodeVerificationFlowStatusFailed SourceCodeVerificationFlowStatus = "failed"
|
|
SourceCodeVerificationFlowStatusPending SourceCodeVerificationFlowStatus = "pending"
|
|
SourceCodeVerificationFlowStatusSucceeded SourceCodeVerificationFlowStatus = "succeeded"
|
|
)
|
|
|
|
// SourceFlow represents the possible flows of a source object.
|
|
type SourceFlow string
|
|
|
|
// List of values that SourceFlow can take.
|
|
const (
|
|
SourceFlowCodeVerification SourceFlow = "code_verification"
|
|
SourceFlowNone SourceFlow = "none"
|
|
SourceFlowReceiver SourceFlow = "receiver"
|
|
SourceFlowRedirect SourceFlow = "redirect"
|
|
)
|
|
|
|
// SourceMandateAcceptanceStatus represents the possible failure reasons of a redirect flow.
|
|
type SourceMandateAcceptanceStatus string
|
|
|
|
// List of values that SourceMandateAcceptanceStatus can take.
|
|
const (
|
|
SourceMandateAcceptanceStatusAccepted SourceMandateAcceptanceStatus = "accepted"
|
|
SourceMandateAcceptanceStatusRefused SourceMandateAcceptanceStatus = "refused"
|
|
)
|
|
|
|
// SourceMandateNotificationMethod represents the possible methods of notification for a mandate.
|
|
type SourceMandateNotificationMethod string
|
|
|
|
// List of values that SourceMandateNotificationMethod can take.
|
|
const (
|
|
SourceMandateNotificationMethodEmail SourceMandateNotificationMethod = "email"
|
|
SourceMandateNotificationMethodManual SourceMandateNotificationMethod = "manual"
|
|
SourceMandateNotificationMethodNone SourceMandateNotificationMethod = "none"
|
|
)
|
|
|
|
// SourceSourceOrderItemType describes the type of source order items on source
|
|
// orders for sources.
|
|
type SourceSourceOrderItemType string
|
|
|
|
// The list of possible values for source order item types.
|
|
const (
|
|
SourceSourceOrderItemTypeDiscount SourceSourceOrderItemType = "discount"
|
|
SourceSourceOrderItemTypeSKU SourceSourceOrderItemType = "sku"
|
|
SourceSourceOrderItemTypeShipping SourceSourceOrderItemType = "shipping"
|
|
SourceSourceOrderItemTypeTax SourceSourceOrderItemType = "tax"
|
|
)
|
|
|
|
// SourceRedirectFlowFailureReason represents the possible failure reasons of a redirect flow.
|
|
type SourceRedirectFlowFailureReason string
|
|
|
|
// List of values that SourceRedirectFlowFailureReason can take.
|
|
const (
|
|
SourceRedirectFlowFailureReasonDeclined SourceRedirectFlowFailureReason = "declined"
|
|
SourceRedirectFlowFailureReasonProcessingError SourceRedirectFlowFailureReason = "processing_error"
|
|
SourceRedirectFlowFailureReasonUserAbort SourceRedirectFlowFailureReason = "user_abort"
|
|
)
|
|
|
|
// SourceRedirectFlowStatus represents the possible statuses of a redirect flow.
|
|
type SourceRedirectFlowStatus string
|
|
|
|
// List of values that SourceRedirectFlowStatus can take.
|
|
const (
|
|
SourceRedirectFlowStatusFailed SourceRedirectFlowStatus = "failed"
|
|
SourceRedirectFlowStatusNotRequired SourceRedirectFlowStatus = "not_required"
|
|
SourceRedirectFlowStatusPending SourceRedirectFlowStatus = "pending"
|
|
SourceRedirectFlowStatusSucceeded SourceRedirectFlowStatus = "succeeded"
|
|
)
|
|
|
|
// SourceRefundAttributesMethod are the possible method to retrieve a receiver's refund attributes.
|
|
type SourceRefundAttributesMethod string
|
|
|
|
// List of values that SourceRefundAttributesMethod can take.
|
|
const (
|
|
SourceRefundAttributesMethodEmail SourceRefundAttributesMethod = "email"
|
|
SourceRefundAttributesMethodManual SourceRefundAttributesMethod = "manual"
|
|
)
|
|
|
|
// SourceRefundAttributesStatus are the possible status of a receiver's refund attributes.
|
|
type SourceRefundAttributesStatus string
|
|
|
|
// List of values that SourceRefundAttributesStatus can take.
|
|
const (
|
|
SourceRefundAttributesStatusAvailable SourceRefundAttributesStatus = "available"
|
|
SourceRefundAttributesStatusMissing SourceRefundAttributesStatus = "missing"
|
|
SourceRefundAttributesStatusRequested SourceRefundAttributesStatus = "requested"
|
|
)
|
|
|
|
// SourceStatus represents the possible statuses of a source object.
|
|
type SourceStatus string
|
|
|
|
// List of values that SourceStatus can take.
|
|
const (
|
|
SourceStatusCanceled SourceStatus = "canceled"
|
|
SourceStatusChargeable SourceStatus = "chargeable"
|
|
SourceStatusConsumed SourceStatus = "consumed"
|
|
SourceStatusFailed SourceStatus = "failed"
|
|
SourceStatusPending SourceStatus = "pending"
|
|
)
|
|
|
|
// SourceUsage represents the possible usages of a source object.
|
|
type SourceUsage string
|
|
|
|
// List of values that SourceUsage can take.
|
|
const (
|
|
SourceUsageReusable SourceUsage = "reusable"
|
|
SourceUsageSingleUse SourceUsage = "single_use"
|
|
)
|
|
|
|
// SourceOwnerParams is the set of parameters allowed for the owner hash on
|
|
// source creation or update.
|
|
type SourceOwnerParams struct {
|
|
Address *AddressParams `form:"address"`
|
|
Email *string `form:"email"`
|
|
Name *string `form:"name"`
|
|
Phone *string `form:"phone"`
|
|
}
|
|
|
|
// RedirectParams is the set of parameters allowed for the redirect hash on
|
|
// source creation or update.
|
|
type RedirectParams struct {
|
|
ReturnURL *string `form:"return_url"`
|
|
}
|
|
|
|
// SourceOrderItemsParams is the set of parameters allowed for the items on a
|
|
// source order for a source.
|
|
type SourceOrderItemsParams 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"`
|
|
}
|
|
|
|
// SourceOrderParams is the set of parameters allowed for the source order of a
|
|
// source.
|
|
type SourceOrderParams struct {
|
|
Items []*SourceOrderItemsParams `form:"items"`
|
|
Shipping *ShippingDetailsParams `form:"shipping"`
|
|
}
|
|
|
|
// SourceObjectParams is the set of parameters allowed on source creation or update.
|
|
type SourceObjectParams struct {
|
|
Params `form:"*"`
|
|
Amount *int64 `form:"amount"`
|
|
Currency *string `form:"currency"`
|
|
Customer *string `form:"customer"`
|
|
Flow *string `form:"flow"`
|
|
Mandate *SourceMandateParams `form:"mandate"`
|
|
OriginalSource *string `form:"original_source"`
|
|
Owner *SourceOwnerParams `form:"owner"`
|
|
Receiver *SourceReceiverParams `form:"receiver"`
|
|
Redirect *RedirectParams `form:"redirect"`
|
|
SourceOrder *SourceOrderParams `form:"source_order"`
|
|
StatementDescriptor *string `form:"statement_descriptor"`
|
|
Token *string `form:"token"`
|
|
Type *string `form:"type"`
|
|
TypeData map[string]string `form:"-"`
|
|
Usage *string `form:"usage"`
|
|
}
|
|
|
|
// SourceMandateAcceptanceParams describes the set of parameters allowed for the `acceptance`
|
|
// hash on source creation or update.
|
|
type SourceMandateAcceptanceParams struct {
|
|
Date *int64 `form:"date"`
|
|
IP *string `form:"ip"`
|
|
Offline *SourceMandateAcceptanceOfflineParams `form:"offline"`
|
|
Online *SourceMandateAcceptanceOnlineParams `form:"online"`
|
|
Status *string `form:"status"`
|
|
Type *string `form:"type"`
|
|
UserAgent *string `form:"user_agent"`
|
|
}
|
|
|
|
// SourceMandateAcceptanceOnlineParams describes the set of parameters for online accepted mandate
|
|
type SourceMandateAcceptanceOnlineParams struct {
|
|
Date *int64 `form:"date"`
|
|
IP *string `form:"ip"`
|
|
UserAgent *string `form:"user_agent"`
|
|
}
|
|
|
|
// SourceMandateAcceptanceOfflineParams describes the set of parameters for offline accepted mandate
|
|
type SourceMandateAcceptanceOfflineParams struct {
|
|
ContactEmail *string `form:"contact_email"`
|
|
}
|
|
|
|
// SourceMandateParams describes the set of parameters allowed for the `mandate` hash on
|
|
// source creation or update.
|
|
type SourceMandateParams struct {
|
|
Amount *int64 `form:"amount"`
|
|
Acceptance *SourceMandateAcceptanceParams `form:"acceptance"`
|
|
Currency *string `form:"currency"`
|
|
Interval *string `form:"interval"`
|
|
NotificationMethod *string `form:"notification_method"`
|
|
}
|
|
|
|
// SourceReceiverParams is the set of parameters allowed for the `receiver` hash on
|
|
// source creation or update.
|
|
type SourceReceiverParams struct {
|
|
RefundAttributesMethod *string `form:"refund_attributes_method"`
|
|
}
|
|
|
|
// SourceObjectDetachParams is the set of parameters that can be used when detaching
|
|
// a source from a customer.
|
|
type SourceObjectDetachParams struct {
|
|
Params `form:"*"`
|
|
Customer *string `form:"-"`
|
|
}
|
|
|
|
// SourceOwner describes the owner hash on a source.
|
|
type SourceOwner struct {
|
|
Address *Address `json:"address,omitempty"`
|
|
Email string `json:"email"`
|
|
Name string `json:"name"`
|
|
Phone string `json:"phone"`
|
|
VerifiedAddress *Address `json:"verified_address,omitempty"`
|
|
VerifiedEmail string `json:"verified_email"`
|
|
VerifiedName string `json:"verified_name"`
|
|
VerifiedPhone string `json:"verified_phone"`
|
|
}
|
|
|
|
// RedirectFlow informs of the state of a redirect authentication flow.
|
|
type RedirectFlow struct {
|
|
FailureReason SourceRedirectFlowFailureReason `json:"failure_reason"`
|
|
ReturnURL string `json:"return_url"`
|
|
Status SourceRedirectFlowStatus `json:"status"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
// ReceiverFlow informs of the state of a receiver authentication flow.
|
|
type ReceiverFlow struct {
|
|
Address string `json:"address"`
|
|
AmountCharged int64 `json:"amount_charged"`
|
|
AmountReceived int64 `json:"amount_received"`
|
|
AmountReturned int64 `json:"amount_returned"`
|
|
RefundAttributesMethod SourceRefundAttributesMethod `json:"refund_attributes_method"`
|
|
RefundAttributesStatus SourceRefundAttributesStatus `json:"refund_attributes_status"`
|
|
}
|
|
|
|
// CodeVerificationFlow informs of the state of a verification authentication flow.
|
|
type CodeVerificationFlow struct {
|
|
AttemptsRemaining int64 `json:"attempts_remaining"`
|
|
Status SourceCodeVerificationFlowStatus `json:"status"`
|
|
}
|
|
|
|
// SourceMandateAcceptance describes a source mandate acceptance state.
|
|
type SourceMandateAcceptance struct {
|
|
Date int64 `json:"date"`
|
|
IP string `json:"ip"`
|
|
Status SourceMandateAcceptanceStatus `json:"status"`
|
|
UserAgent string `json:"user_agent"`
|
|
}
|
|
|
|
// SourceMandate describes a source mandate.
|
|
type SourceMandate struct {
|
|
Acceptance *SourceMandateAcceptance `json:"acceptance"`
|
|
NotificationMethod SourceMandateNotificationMethod `json:"notification_method"`
|
|
Reference string `json:"reference"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
// SourceSourceOrderItems describes the items on source orders for sources.
|
|
type SourceSourceOrderItems struct {
|
|
Amount int64 `json:"amount"`
|
|
Currency Currency `json:"currency"`
|
|
Description string `json:"description"`
|
|
Quantity int64 `json:"quantity"`
|
|
Type SourceSourceOrderItemType `json:"type"`
|
|
}
|
|
|
|
// SourceSourceOrder describes a source order for a source.
|
|
type SourceSourceOrder struct {
|
|
Amount int64 `json:"amount"`
|
|
Currency Currency `json:"currency"`
|
|
Email string `json:"email"`
|
|
Items *[]SourceSourceOrderItems `json:"items"`
|
|
Shipping *ShippingDetails `json:"shipping"`
|
|
}
|
|
|
|
// Source is the resource representing a Source.
|
|
// For more details see https://stripe.com/docs/api#sources.
|
|
type Source struct {
|
|
Amount int64 `json:"amount"`
|
|
ClientSecret string `json:"client_secret"`
|
|
CodeVerification *CodeVerificationFlow `json:"code_verification,omitempty"`
|
|
Created int64 `json:"created"`
|
|
Currency Currency `json:"currency"`
|
|
Customer string `json:"customer"`
|
|
Flow SourceFlow `json:"flow"`
|
|
ID string `json:"id"`
|
|
Livemode bool `json:"livemode"`
|
|
Mandate *SourceMandate `json:"mandate"`
|
|
Metadata map[string]string `json:"metadata"`
|
|
Owner *SourceOwner `json:"owner"`
|
|
Receiver *ReceiverFlow `json:"receiver,omitempty"`
|
|
Redirect *RedirectFlow `json:"redirect,omitempty"`
|
|
StatementDescriptor string `json:"statement_descriptor"`
|
|
SourceOrder *SourceSourceOrder `json:"source_order"`
|
|
Status SourceStatus `json:"status"`
|
|
Type string `json:"type"`
|
|
TypeData map[string]interface{}
|
|
Usage SourceUsage `json:"usage"`
|
|
}
|
|
|
|
// AppendTo implements custom encoding logic for SourceObjectParams so that the special
|
|
// "TypeData" value for is sent as the correct parameter based on the Source type
|
|
func (p *SourceObjectParams) AppendTo(body *form.Values, keyParts []string) {
|
|
if len(p.TypeData) > 0 && p.Type == nil {
|
|
panic("You can not fill TypeData if you don't explicitly set Type")
|
|
}
|
|
|
|
for k, vs := range p.TypeData {
|
|
body.Add(form.FormatKey(append(keyParts, StringValue(p.Type), k)), vs)
|
|
}
|
|
}
|
|
|
|
// UnmarshalJSON handles deserialization of an Source. This custom unmarshaling
|
|
// is needed to extract the type specific data (accessible under `TypeData`)
|
|
// but stored in JSON under a hash named after the `type` of the source.
|
|
func (s *Source) UnmarshalJSON(data []byte) error {
|
|
type source Source
|
|
var v source
|
|
if err := json.Unmarshal(data, &v); err != nil {
|
|
return err
|
|
}
|
|
*s = Source(v)
|
|
|
|
var raw map[string]interface{}
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return err
|
|
}
|
|
|
|
if d, ok := raw[s.Type]; ok {
|
|
if m, ok := d.(map[string]interface{}); ok {
|
|
s.TypeData = m
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|