mirror of
https://github.com/rjNemo/go-wiki
synced 2026-06-06 02:36:40 +00:00
562 lines
24 KiB
Go
562 lines
24 KiB
Go
package stripe
|
||
|
||
import (
|
||
"encoding/json"
|
||
|
||
"github.com/stripe/stripe-go/form"
|
||
)
|
||
|
||
// AccountType is the type of an account.
|
||
type AccountType string
|
||
|
||
// List of values that AccountType can take.
|
||
const (
|
||
AccountTypeCustom AccountType = "custom"
|
||
AccountTypeExpress AccountType = "express"
|
||
AccountTypeStandard AccountType = "standard"
|
||
)
|
||
|
||
// AccountCapability maps to a given capability for an account.
|
||
type AccountCapability string
|
||
|
||
// List of values that AccountCapability can take.
|
||
const (
|
||
AccountCapabilityCardPayments AccountCapability = "card_payments"
|
||
AccountCapabilityLegacyPayments AccountCapability = "legacy_payments"
|
||
AccountCapabilityTransfers AccountCapability = "transfers"
|
||
)
|
||
|
||
// AccountCapabilityStatus is the status a given capability can have
|
||
type AccountCapabilityStatus string
|
||
|
||
// List of values that AccountCapabilityStatus can take.
|
||
const (
|
||
AccountCapabilityStatusActive AccountCapabilityStatus = "active"
|
||
AccountCapabilityStatusInactive AccountCapabilityStatus = "inactive"
|
||
AccountCapabilityStatusPending AccountCapabilityStatus = "pending"
|
||
)
|
||
|
||
// ExternalAccountType is the type of an external account.
|
||
type ExternalAccountType string
|
||
|
||
// List of values that ExternalAccountType can take.
|
||
const (
|
||
ExternalAccountTypeBankAccount ExternalAccountType = "bank_account"
|
||
ExternalAccountTypeCard ExternalAccountType = "card"
|
||
)
|
||
|
||
// AccountBusinessType describes the business type associated with an account.
|
||
type AccountBusinessType string
|
||
|
||
// List of values that AccountBusinessType can take.
|
||
const (
|
||
AccountBusinessTypeCompany AccountBusinessType = "company"
|
||
AccountBusinessTypeGovernmentEntity AccountBusinessType = "government_entity"
|
||
AccountBusinessTypeIndividual AccountBusinessType = "individual"
|
||
AccountBusinessTypeNonProfit AccountBusinessType = "non_profit"
|
||
)
|
||
|
||
// AccountCompanyStructure describes the structure associated with a company.
|
||
type AccountCompanyStructure string
|
||
|
||
// List of values that AccountCompanyStructure can take.
|
||
const (
|
||
AccountCompanyStructureGovernmentInstrumentality AccountCompanyStructure = "government_instrumentality"
|
||
AccountCompanyStructureGovernmentalUnit AccountCompanyStructure = "governmental_unit"
|
||
AccountCompanyStructureIncorporatedNonProfit AccountCompanyStructure = "incorporated_non_profit"
|
||
AccountCompanyStructureMultiMemberLLC AccountCompanyStructure = "multi_member_llc"
|
||
AccountCompanyStructurePrivateCorporation AccountCompanyStructure = "private_corporation"
|
||
AccountCompanyStructurePrivatePartnership AccountCompanyStructure = "private_partnership"
|
||
AccountCompanyStructurePublicCorporation AccountCompanyStructure = "public_corporation"
|
||
AccountCompanyStructurePublicPartnership AccountCompanyStructure = "public_partnership"
|
||
AccountCompanyStructureTaxExemptGovernmentInstrumentality AccountCompanyStructure = "tax_exempt_government_instrumentality"
|
||
AccountCompanyStructureUnincorporatedAssociation AccountCompanyStructure = "unincorporated_association"
|
||
AccountCompanyStructureUnincorporatedNonProfit AccountCompanyStructure = "unincorporated_non_profit"
|
||
)
|
||
|
||
// AccountRequirementsDisabledReason describes why an account is disabled.
|
||
type AccountRequirementsDisabledReason string
|
||
|
||
// List of values that AccountRequirementsDisabledReason can take.
|
||
const (
|
||
AccountRequirementsDisabledReasonFieldsNeeded AccountRequirementsDisabledReason = "fields_needed"
|
||
AccountRequirementsDisabledReasonListed AccountRequirementsDisabledReason = "listed"
|
||
AccountRequirementsDisabledReasonOther AccountRequirementsDisabledReason = "other"
|
||
AccountRequirementsDisabledReasonRejectedFraud AccountRequirementsDisabledReason = "rejected.fraud"
|
||
AccountRequirementsDisabledReasonRejectedListed AccountRequirementsDisabledReason = "rejected.listed"
|
||
AccountRequirementsDisabledReasonRejectedOther AccountRequirementsDisabledReason = "rejected.other"
|
||
AccountRequirementsDisabledReasonRejectedTermsOfService AccountRequirementsDisabledReason = "rejected.terms_of_service"
|
||
AccountRequirementsDisabledReasonUnderReview AccountRequirementsDisabledReason = "under_review"
|
||
)
|
||
|
||
// PayoutInterval describes the payout interval.
|
||
type PayoutInterval string
|
||
|
||
// List of values that PayoutInterval can take.
|
||
const (
|
||
PayoutIntervalDaily PayoutInterval = "daily"
|
||
PayoutIntervalManual PayoutInterval = "manual"
|
||
PayoutIntervalMonthly PayoutInterval = "monthly"
|
||
PayoutIntervalWeekly PayoutInterval = "weekly"
|
||
)
|
||
|
||
// AccountRejectReason describes the valid reason to reject an account
|
||
type AccountRejectReason string
|
||
|
||
// List of values that AccountRejectReason can take.
|
||
const (
|
||
AccountRejectReasonFraud AccountRejectReason = "fraud"
|
||
AccountRejectReasonOther AccountRejectReason = "other"
|
||
AccountRejectReasonTermsOfService AccountRejectReason = "terms_of_service"
|
||
)
|
||
|
||
// AccountCompanyVerificationDocumentDetailsCode is a machine-readable code specifying the
|
||
// verification state of a document associated with a company.
|
||
type AccountCompanyVerificationDocumentDetailsCode string
|
||
|
||
// List of values that AccountCompanyVerificationDocumentDetailsCode can take.
|
||
const (
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentCorrupt AccountCompanyVerificationDocumentDetailsCode = "document_corrupt"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentFailedCopy AccountCompanyVerificationDocumentDetailsCode = "document_failed_copy"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentFailedOther AccountCompanyVerificationDocumentDetailsCode = "document_failed_other"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentFailedTestMode AccountCompanyVerificationDocumentDetailsCode = "document_failed_test_mode"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentFraudulent AccountCompanyVerificationDocumentDetailsCode = "document_fraudulent"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentInvalid AccountCompanyVerificationDocumentDetailsCode = "document_invalid"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentManipulated AccountCompanyVerificationDocumentDetailsCode = "document_manipulated"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentNotReadable AccountCompanyVerificationDocumentDetailsCode = "document_not_readable"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentNotUploaded AccountCompanyVerificationDocumentDetailsCode = "document_not_uploaded"
|
||
AccountCompanyVerificationDocumentDetailsCodeDocumentTooLarge AccountCompanyVerificationDocumentDetailsCode = "document_too_large"
|
||
)
|
||
|
||
// AccountBusinessProfileParams are the parameters allowed for an account's business information
|
||
type AccountBusinessProfileParams struct {
|
||
MCC *string `form:"mcc"`
|
||
Name *string `form:"name"`
|
||
ProductDescription *string `form:"product_description"`
|
||
SupportEmail *string `form:"support_email"`
|
||
SupportPhone *string `form:"support_phone"`
|
||
SupportURL *string `form:"support_url"`
|
||
URL *string `form:"url"`
|
||
}
|
||
|
||
// AccountCompanyVerificationDocumentParams are the parameters allowed to pass for a document
|
||
// verifying a company.
|
||
type AccountCompanyVerificationDocumentParams struct {
|
||
Back *string `form:"back"`
|
||
Front *string `form:"front"`
|
||
}
|
||
|
||
// AccountCompanyVerificationParams are the parameters allowed to verify a company.
|
||
type AccountCompanyVerificationParams struct {
|
||
Document *AccountCompanyVerificationDocumentParams `form:"document"`
|
||
}
|
||
|
||
// AccountCompanyParams are the parameters describing the company associated with the account.
|
||
type AccountCompanyParams struct {
|
||
Address *AccountAddressParams `form:"address"`
|
||
AddressKana *AccountAddressParams `form:"address_kana"`
|
||
AddressKanji *AccountAddressParams `form:"address_kanji"`
|
||
DirectorsProvided *bool `form:"directors_provided"`
|
||
ExecutivesProvided *bool `form:"executives_provided"`
|
||
Name *string `form:"name"`
|
||
NameKana *string `form:"name_kana"`
|
||
NameKanji *string `form:"name_kanji"`
|
||
OwnersProvided *bool `form:"owners_provided"`
|
||
Structure *string `form:"structure"`
|
||
Phone *string `form:"phone"`
|
||
TaxID *string `form:"tax_id"`
|
||
TaxIDRegistrar *string `form:"tax_id_registrar"`
|
||
VATID *string `form:"vat_id"`
|
||
Verification *AccountCompanyVerificationParams `form:"verification"`
|
||
}
|
||
|
||
// AccountDeclineSettingsParams represents the parameters allowed for configuring
|
||
// card declines on connected accounts.
|
||
type AccountDeclineSettingsParams struct {
|
||
AVSFailure *bool `form:"avs_failure"`
|
||
CVCFailure *bool `form:"cvc_failure"`
|
||
}
|
||
|
||
// AccountSettingsBrandingParams represent allowed parameters to configure settings specific to the
|
||
// account’s branding.
|
||
type AccountSettingsBrandingParams struct {
|
||
Icon *string `form:"icon"`
|
||
Logo *string `form:"logo"`
|
||
PrimaryColor *string `form:"primary_color"`
|
||
}
|
||
|
||
// AccountSettingsCardPaymentsParams represent allowed parameters to configure settings specific to
|
||
// card charging on the account.
|
||
type AccountSettingsCardPaymentsParams struct {
|
||
DeclineOn *AccountDeclineSettingsParams `form:"decline_on"`
|
||
StatementDescriptorPrefix *string `form:"statement_descriptor_prefix"`
|
||
}
|
||
|
||
// AccountSettingsDashboardParams represent allowed parameters to configure settings for the
|
||
// account's Dashboard.
|
||
type AccountSettingsDashboardParams struct {
|
||
DisplayName *string `form:"display_name"`
|
||
Timezone *string `form:"timezone"`
|
||
}
|
||
|
||
// AccountSettingsPaymentsParams represent allowed parameters to configure settings across payment
|
||
// methods for charging on the account.
|
||
type AccountSettingsPaymentsParams struct {
|
||
StatementDescriptor *string `form:"statement_descriptor"`
|
||
StatementDescriptorKana *string `form:"statement_descriptor_kana"`
|
||
StatementDescriptorKanji *string `form:"statement_descriptor_kanji"`
|
||
}
|
||
|
||
// AccountSettingsPayoutsParams represent allowed parameters to configure settings specific to the
|
||
// account’s payouts.
|
||
type AccountSettingsPayoutsParams struct {
|
||
DebitNegativeBalances *bool `form:"debit_negative_balances"`
|
||
Schedule *PayoutScheduleParams `form:"schedule"`
|
||
StatementDescriptor *string `form:"statement_descriptor"`
|
||
}
|
||
|
||
// AccountSettingsParams are the parameters allowed for the account's settings.
|
||
type AccountSettingsParams struct {
|
||
Branding *AccountSettingsBrandingParams `form:"branding"`
|
||
CardPayments *AccountSettingsCardPaymentsParams `form:"card_payments"`
|
||
Dashboard *AccountSettingsDashboardParams `form:"dashboard"`
|
||
Payments *AccountSettingsPaymentsParams `form:"payments"`
|
||
Payouts *AccountSettingsPayoutsParams `form:"payouts"`
|
||
}
|
||
|
||
// PayoutScheduleParams are the parameters allowed for payout schedules.
|
||
type PayoutScheduleParams struct {
|
||
DelayDays *int64 `form:"delay_days"`
|
||
DelayDaysMinimum *bool `form:"-"` // See custom AppendTo
|
||
Interval *string `form:"interval"`
|
||
MonthlyAnchor *int64 `form:"monthly_anchor"`
|
||
WeeklyAnchor *string `form:"weekly_anchor"`
|
||
}
|
||
|
||
// AppendTo implements custom encoding logic for PayoutScheduleParams
|
||
// so that we can send a special value for `delay_days` field if needed.
|
||
func (p *PayoutScheduleParams) AppendTo(body *form.Values, keyParts []string) {
|
||
if BoolValue(p.DelayDaysMinimum) {
|
||
body.Add(form.FormatKey(append(keyParts, "delay_days")), "minimum")
|
||
}
|
||
}
|
||
|
||
// AccountParams are the parameters allowed during account creation/updates.
|
||
type AccountParams struct {
|
||
Params `form:"*"`
|
||
AccountToken *string `form:"account_token"`
|
||
BusinessProfile *AccountBusinessProfileParams `form:"business_profile"`
|
||
BusinessType *string `form:"business_type"`
|
||
Company *AccountCompanyParams `form:"company"`
|
||
Country *string `form:"country"`
|
||
DefaultCurrency *string `form:"default_currency"`
|
||
Email *string `form:"email"`
|
||
ExternalAccount *AccountExternalAccountParams `form:"external_account"`
|
||
Individual *PersonParams `form:"individual"`
|
||
RequestedCapabilities []*string `form:"requested_capabilities"`
|
||
Settings *AccountSettingsParams `form:"settings"`
|
||
TOSAcceptance *AccountTOSAcceptanceParams `form:"tos_acceptance"`
|
||
Type *string `form:"type"`
|
||
}
|
||
|
||
// AccountAddressParams represents an address during account creation/updates.
|
||
type AccountAddressParams struct {
|
||
City *string `form:"city"`
|
||
Country *string `form:"country"`
|
||
Line1 *string `form:"line1"`
|
||
Line2 *string `form:"line2"`
|
||
PostalCode *string `form:"postal_code"`
|
||
State *string `form:"state"`
|
||
|
||
// Town/cho-me. Note that this is only used for Kana/Kanji representations
|
||
// of an address.
|
||
Town *string `form:"town"`
|
||
}
|
||
|
||
// AccountTOSAcceptanceParams represents tos_acceptance during account creation/updates.
|
||
type AccountTOSAcceptanceParams struct {
|
||
Date *int64 `form:"date"`
|
||
IP *string `form:"ip"`
|
||
UserAgent *string `form:"user_agent"`
|
||
}
|
||
|
||
// AccountListParams are the parameters allowed during account listing.
|
||
type AccountListParams struct {
|
||
ListParams `form:"*"`
|
||
}
|
||
|
||
// AccountRejectParams is the structure for the Reject function.
|
||
type AccountRejectParams struct {
|
||
Params `form:"*"`
|
||
Reason *string `form:"reason"`
|
||
}
|
||
|
||
// AccountExternalAccountParams are the parameters allowed to reference an
|
||
// external account when creating an account. It should either have Token set
|
||
// or everything else.
|
||
type AccountExternalAccountParams struct {
|
||
Params `form:"*"`
|
||
AccountNumber *string `form:"account_number"`
|
||
AccountHolderName *string `form:"account_holder_name"`
|
||
AccountHolderType *string `form:"account_holder_type"`
|
||
Country *string `form:"country"`
|
||
Currency *string `form:"currency"`
|
||
RoutingNumber *string `form:"routing_number"`
|
||
Token *string `form:"token"`
|
||
}
|
||
|
||
// AppendTo implements custom encoding logic for AccountExternalAccountParams
|
||
// so that we can send the special required `object` field up along with the
|
||
// other specified parameters or the token value.
|
||
func (p *AccountExternalAccountParams) AppendTo(body *form.Values, keyParts []string) {
|
||
if p.Token != nil {
|
||
body.Add(form.FormatKey(keyParts), StringValue(p.Token))
|
||
} else {
|
||
body.Add(form.FormatKey(append(keyParts, "object")), "bank_account")
|
||
}
|
||
}
|
||
|
||
// AccountBusinessProfile represents optional information related to the business.
|
||
type AccountBusinessProfile struct {
|
||
MCC string `json:"mcc"`
|
||
Name string `json:"name"`
|
||
ProductDescription string `json:"product_description"`
|
||
SupportAddress *Address `json:"support_address"`
|
||
SupportEmail string `json:"support_email"`
|
||
SupportPhone string `json:"support_phone"`
|
||
SupportURL string `json:"support_url"`
|
||
URL string `json:"url"`
|
||
}
|
||
|
||
// AccountCapabilities is the resource representing the capabilities enabled on that account.
|
||
type AccountCapabilities struct {
|
||
CardPayments AccountCapabilityStatus `json:"card_payments"`
|
||
LegacyPayments AccountCapabilityStatus `json:"legacy_payments"`
|
||
Transfers AccountCapabilityStatus `json:"transfers"`
|
||
}
|
||
|
||
// AccountCompanyVerificationDocument represents details about a company's verification state.
|
||
type AccountCompanyVerificationDocument struct {
|
||
Back *File `json:"back"`
|
||
Details string `json:"details"`
|
||
DetailsCode AccountCompanyVerificationDocumentDetailsCode `json:"details_code"`
|
||
Front *File `json:"front"`
|
||
}
|
||
|
||
// AccountCompanyVerification represents details about a company's verification state.
|
||
type AccountCompanyVerification struct {
|
||
Document *AccountCompanyVerificationDocument `json:"document"`
|
||
}
|
||
|
||
// AccountCompany represents details about the company or business associated with the account.
|
||
type AccountCompany struct {
|
||
Address *AccountAddress `json:"address"`
|
||
AddressKana *AccountAddress `json:"address_kana"`
|
||
AddressKanji *AccountAddress `json:"address_kanji"`
|
||
DirectorsProvided bool `json:"directors_provided"`
|
||
ExecutivesProvided bool `json:"executives_provided"`
|
||
Name string `json:"name"`
|
||
NameKana string `json:"name_kana"`
|
||
NameKanji string `json:"name_kanji"`
|
||
OwnersProvided bool `json:"owners_provided"`
|
||
Phone string `json:"phone"`
|
||
Structure AccountCompanyStructure `json:"structure"`
|
||
TaxIDProvided bool `json:"tax_id_provided"`
|
||
TaxIDRegistrar string `json:"tax_id_registrar"`
|
||
VATIDProvided bool `json:"vat_id_provided"`
|
||
Verification *AccountCompanyVerification `json:"verification"`
|
||
}
|
||
|
||
// AccountDeclineOn represents card charges decline behavior for that account.
|
||
type AccountDeclineOn struct {
|
||
AVSFailure bool `json:"avs_failure"`
|
||
CVCFailure bool `json:"cvc_failure"`
|
||
}
|
||
|
||
// AccountPayoutSchedule is the structure for an account's payout schedule.
|
||
type AccountPayoutSchedule struct {
|
||
DelayDays int64 `json:"delay_days"`
|
||
Interval PayoutInterval `json:"interval"`
|
||
MonthlyAnchor int64 `json:"monthly_anchor"`
|
||
WeeklyAnchor string `json:"weekly_anchor"`
|
||
}
|
||
|
||
// AccountRequirementsError represents details about an error with a requirement.
|
||
type AccountRequirementsError struct {
|
||
Code string `json:"code"`
|
||
Reason string `json:"reason"`
|
||
Requirement string `json:"requirement"`
|
||
}
|
||
|
||
// AccountRequirements represents information that needs to be collected for an account.
|
||
type AccountRequirements struct {
|
||
CurrentDeadline int64 `json:"current_deadline"`
|
||
CurrentlyDue []string `json:"currently_due"`
|
||
DisabledReason AccountRequirementsDisabledReason `json:"disabled_reason"`
|
||
Errors []*AccountRequirementsError `json:"errors"`
|
||
EventuallyDue []string `json:"eventually_due"`
|
||
PastDue []string `json:"past_due"`
|
||
PendingVerification []string `json:"pending_verification"`
|
||
}
|
||
|
||
// AccountSettingsBranding represents settings specific to the account's branding.
|
||
type AccountSettingsBranding struct {
|
||
Icon *File `json:"icon"`
|
||
Logo *File `json:"logo"`
|
||
PrimaryColor string `json:"primary_color"`
|
||
}
|
||
|
||
// AccountSettingsCardPayments represents settings specific to card charging on the account.
|
||
type AccountSettingsCardPayments struct {
|
||
DeclineOn *AccountDeclineOn `json:"decline_on"`
|
||
StatementDescriptorPrefix string `json:"statement_descriptor_prefix"`
|
||
}
|
||
|
||
// AccountSettingsDashboard represents settings specific to the account's Dashboard.
|
||
type AccountSettingsDashboard struct {
|
||
DisplayName string `json:"display_name"`
|
||
Timezone string `json:"timezone"`
|
||
}
|
||
|
||
// AccountSettingsPayments represents settings that apply across payment methods for charging on
|
||
// the account.
|
||
type AccountSettingsPayments struct {
|
||
StatementDescriptor string `json:"statement_descriptor"`
|
||
StatementDescriptorKana string `json:"statement_descriptor_kana"`
|
||
StatementDescriptorKanji string `json:"statement_descriptor_kanji"`
|
||
}
|
||
|
||
// AccountSettingsPayouts represents settings specific to the account’s payouts.
|
||
type AccountSettingsPayouts struct {
|
||
DebitNegativeBalances bool `json:"debit_negative_balances"`
|
||
Schedule *AccountPayoutSchedule `json:"schedule"`
|
||
StatementDescriptor string `json:"statement_descriptor"`
|
||
}
|
||
|
||
// AccountSettings represents options for customizing how the account functions within Stripe.
|
||
type AccountSettings struct {
|
||
Branding *AccountSettingsBranding `json:"branding"`
|
||
CardPayments *AccountSettingsCardPayments `json:"card_payments"`
|
||
Dashboard *AccountSettingsDashboard `json:"dashboard"`
|
||
Payments *AccountSettingsPayments `json:"payments"`
|
||
Payouts *AccountSettingsPayouts `json:"payouts"`
|
||
}
|
||
|
||
// AccountTOSAcceptance represents status of acceptance of our terms of services for the account.
|
||
type AccountTOSAcceptance struct {
|
||
Date int64 `json:"date"`
|
||
IP string `json:"ip"`
|
||
UserAgent string `json:"user_agent"`
|
||
}
|
||
|
||
// Account is the resource representing your Stripe account.
|
||
// For more details see https://stripe.com/docs/api/#account.
|
||
type Account struct {
|
||
BusinessProfile *AccountBusinessProfile `json:"business_profile"`
|
||
BusinessType AccountBusinessType `json:"business_type"`
|
||
Capabilities *AccountCapabilities `json:"capabilities"`
|
||
ChargesEnabled bool `json:"charges_enabled"`
|
||
Company *AccountCompany `json:"company"`
|
||
Country string `json:"country"`
|
||
Created int64 `json:"created"`
|
||
DefaultCurrency Currency `json:"default_currency"`
|
||
Deleted bool `json:"deleted"`
|
||
DetailsSubmitted bool `json:"details_submitted"`
|
||
Email string `json:"email"`
|
||
ExternalAccounts *ExternalAccountList `json:"external_accounts"`
|
||
ID string `json:"id"`
|
||
Individual *Person `json:"individual"`
|
||
Metadata map[string]string `json:"metadata"`
|
||
Object string `json:"object"`
|
||
PayoutsEnabled bool `json:"payouts_enabled"`
|
||
Requirements *AccountRequirements `json:"requirements"`
|
||
Settings *AccountSettings `json:"settings"`
|
||
TOSAcceptance *AccountTOSAcceptance `json:"tos_acceptance"`
|
||
Type AccountType `json:"type"`
|
||
}
|
||
|
||
// UnmarshalJSON handles deserialization of an account.
|
||
// This custom unmarshaling is needed because the resulting
|
||
// property may be an ID or the full struct if it was expanded.
|
||
func (a *Account) UnmarshalJSON(data []byte) error {
|
||
if id, ok := ParseID(data); ok {
|
||
a.ID = id
|
||
return nil
|
||
}
|
||
|
||
type account Account
|
||
var v account
|
||
if err := json.Unmarshal(data, &v); err != nil {
|
||
return err
|
||
}
|
||
|
||
*a = Account(v)
|
||
return nil
|
||
}
|
||
|
||
// AccountList is a list of accounts as returned from a list endpoint.
|
||
type AccountList struct {
|
||
ListMeta
|
||
Data []*Account `json:"data"`
|
||
}
|
||
|
||
// ExternalAccountList is a list of external accounts that may be either bank
|
||
// accounts or cards.
|
||
type ExternalAccountList struct {
|
||
ListMeta
|
||
|
||
// Values contains any external accounts (bank accounts and/or cards)
|
||
// currently attached to this account.
|
||
Data []*ExternalAccount `json:"data"`
|
||
}
|
||
|
||
// ExternalAccount is an external account (a bank account or card) that's
|
||
// attached to an account. It contains fields that will be conditionally
|
||
// populated depending on its type.
|
||
type ExternalAccount struct {
|
||
// BankAccount is a bank account attached to an account. Populated only if
|
||
// the external account is a bank account.
|
||
BankAccount *BankAccount
|
||
|
||
// Card is a card attached to an account. Populated only if the external
|
||
// account is a card.
|
||
Card *Card
|
||
|
||
ID string `json:"id"`
|
||
Type ExternalAccountType `json:"object"`
|
||
}
|
||
|
||
// UnmarshalJSON implements Unmarshaler.UnmarshalJSON.
|
||
func (ea *ExternalAccount) UnmarshalJSON(data []byte) error {
|
||
type externalAccount ExternalAccount
|
||
var v externalAccount
|
||
if err := json.Unmarshal(data, &v); err != nil {
|
||
return err
|
||
}
|
||
|
||
var err error
|
||
*ea = ExternalAccount(v)
|
||
|
||
switch ea.Type {
|
||
case ExternalAccountTypeBankAccount:
|
||
err = json.Unmarshal(data, &ea.BankAccount)
|
||
case ExternalAccountTypeCard:
|
||
err = json.Unmarshal(data, &ea.Card)
|
||
}
|
||
|
||
return err
|
||
}
|
||
|
||
// AccountAddress is the structure for an account address.
|
||
type AccountAddress struct {
|
||
City string `json:"city"`
|
||
Country string `json:"country"`
|
||
Line1 string `json:"line1"`
|
||
Line2 string `json:"line2"`
|
||
PostalCode string `json:"postal_code"`
|
||
State string `json:"state"`
|
||
|
||
// Town/cho-me. Note that this is only used for Kana/Kanji representations
|
||
// of an address.
|
||
Town string `json:"town"`
|
||
}
|