go-wiki/vendor/github.com/stripe/stripe-go/account.go
2020-03-20 00:19:27 +01:00

562 lines
24 KiB
Go
Raw 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 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
// accounts 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
// accounts 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 accounts 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"`
}