From 35258f854f5c4dc771dd25de60fc87ad0069801b Mon Sep 17 00:00:00 2001 From: Remi Jannel <remi@stripe.com> Date: Wed, 23 May 2018 21:35:07 -0400 Subject: [PATCH] Use custom types for resources and string on params --- account.go | 149 ++++++++++++---------------- account/client_test.go | 4 +- balance.go | 59 ++++++----- balance/client.go | 19 ---- bankaccount.go | 45 ++++++--- bankaccount/client.go | 8 -- bankaccount_test.go | 2 +- card.go | 92 ++++++++++------- card/client.go | 19 ---- charge.go | 23 +++-- charge/client.go | 9 +- coupon.go | 7 +- coupon/client.go | 6 -- coupon/client_test.go | 2 +- dispute.go | 28 ++++-- dispute/client.go | 20 ---- error.go | 8 +- fileupload.go | 12 ++- fileupload/client.go | 5 - fileupload/client_test.go | 4 +- invoice.go | 10 ++ invoice/client.go | 5 - invoice/client_test.go | 2 +- order.go | 61 +++++++++--- order/client_test.go | 2 +- orderitem.go | 26 ----- orderitem/order_item.go | 12 --- orderitem/order_item_test.go | 1 - paymentsource.go | 54 ++++------ paymentsource_test.go | 4 +- payout.go | 59 +++++++---- payout/client.go | 27 ----- plan.go | 49 ++++----- plan/client.go | 7 -- plan/client_test.go | 4 +- product.go | 7 +- recipient.go | 6 +- recipient/client.go | 5 - recipienttransfer.go | 60 +++++++---- recipienttransfer/client.go | 30 ------ refund.go | 18 +++- refund/client.go | 6 -- refund/client_test.go | 2 +- review.go | 30 +++--- sku.go | 24 ++++- sku/client_test.go | 8 +- source.go | 186 +++++++++++++++-------------------- source/client_test.go | 4 +- sub.go | 28 ++++-- sub/client.go | 9 -- sub/client_test.go | 7 +- token.go | 8 +- token/client.go | 6 -- transfer.go | 9 +- transfer/client.go | 7 -- transfer/client_test.go | 2 +- usage_record.go | 10 +- usagerecord/client_test.go | 2 +- 58 files changed, 620 insertions(+), 698 deletions(-) delete mode 100644 orderitem.go delete mode 100644 orderitem/order_item.go delete mode 100644 orderitem/order_item_test.go diff --git a/account.go b/account.go index 8c3a729083..4b0fd59c86 100644 --- a/account.go +++ b/account.go @@ -6,57 +6,71 @@ import ( "github.com/stripe/stripe-go/form" ) +// AccountType is the type of an account. +type AccountType string + +const ( + AccountTypeCustom AccountType = "custom" + AccountTypeExpress AccountType = "express" + AccountTypeStandard AccountType = "standard" +) + +// ExternalAccountType is the type of an external account. +type ExternalAccountType string + +const ( + ExternalAccountTypeBankAccount ExternalAccountType = "bank_account" + ExternalAccountTypeCard ExternalAccountType = "card" +) + // LegalEntityType describes the types for a legal entity. -// Allowed values are "individual", "company". type LegalEntityType string +const ( + LegalEntityTypeCompany LegalEntityType = "company" + LegalEntityTypeIndividual LegalEntityType = "individual" +) + // IdentityVerificationDetailsCode is a machine-readable code specifying the -// verification state of a legal entity. Allowed values are -// "failed_keyed_identity", "failed_other", "scan_corrupt", -// "scan_failed_greyscale", "scan_failed_other", -// "scan_id_country_not_supported", "scan_id_type_not_supported", -// "scan_name_mismatch", "scan_not_readable", "scan_not_uploaded". +// verification state of a legal entity type IdentityVerificationDetailsCode string +const ( + IdentityVerificationDetailsCodeFailedKeyedIdentity IdentityVerificationDetailsCode = "failed_keyed_identity" + IdentityVerificationDetailsCodeFailedOther IdentityVerificationDetailsCode = "failed_other" + IdentityVerificationDetailsCodeScanCorrupt IdentityVerificationDetailsCode = "scan_corrupt" + IdentityVerificationDetailsCodeScanFailedGreyscale IdentityVerificationDetailsCode = "scan_failed_greyscale" + IdentityVerificationDetailsCodeScanFailedOther IdentityVerificationDetailsCode = "scan_failed_other" + IdentityVerificationDetailsCodeScanIdCountryNotSupported IdentityVerificationDetailsCode = "scan_id_country_not_supported" + IdentityVerificationDetailsCodeScanIdTypeNotSupported IdentityVerificationDetailsCode = "scan_id_type_not_supported" + IdentityVerificationDetailsCodeScanNameMismatch IdentityVerificationDetailsCode = "scan_name_mismatch" + IdentityVerificationDetailsCodeScanNotReadable IdentityVerificationDetailsCode = "scan_not_readable" + IdentityVerificationDetailsCodeScanNotUploaded IdentityVerificationDetailsCode = "scan_not_uploaded" +) + // IdentityVerificationStatus describes the different statuses for identity verification. -// Allowed values are "pending", "verified", "unverified". type IdentityVerificationStatus string -// Interval describes the payout interval. -// Allowed values are "manual", "daily", "weekly", "monthly". -type Interval string - const ( - // Company is a constant value representing a company legal entity type. - Company LegalEntityType = "company" - - // Day is a constant value representing a daily payout interval. - Day Interval = "daily" - - // Individual is a constant value representing an individual legal entity - // type. - Individual LegalEntityType = "individual" - - // IdentityVerificationPending is a constant value indicating that identity - // verification status is pending. - IdentityVerificationPending IdentityVerificationStatus = "pending" - - // IdentityVerificationUnverified is a constant value indicating that - // identity verification status is unverified. - IdentityVerificationUnverified IdentityVerificationStatus = "unverified" - - // IdentityVerificationVerified is a constant value indicating that - // identity verification status is verified. - IdentityVerificationVerified IdentityVerificationStatus = "verified" + IdentityVerificationStatusPending IdentityVerificationStatus = "pending" + IdentityVerificationStatusUnverified IdentityVerificationStatus = "unverified" + IdentityVerificationStatusVerified IdentityVerificationStatus = "verified" +) - // Manual is a constant value representing a manual payout interval. - Manual Interval = "manual" +// Interval describes the payout interval. +type PayoutInterval string - // Monthly is a constant value representing a monthly payout interval. - Monthly Interval = "monthly" +const ( + PayoutIntervalDay PayoutInterval = "daily" + PayoutIntervalManual PayoutInterval = "manual" + PayoutIntervalMonthly PayoutInterval = "monthly" + PayoutIntervalWeekly PayoutInterval = "weekly" +) - // Weekly is a constant value representing a weekly payout interval. - Weekly Interval = "weekly" +const ( + AccountRejectReasonFraud string = "fraud" + AccountRejectReasonOther string = "other" + AccountRejectReasonTermsOfService string = "terms_of_service" ) // AccountParams are the parameters allowed during account creation/updates. @@ -217,7 +231,7 @@ type Account struct { ChargesEnabled bool `json:"charges_enabled"` Country string `json:"country"` DebitNegativeBalances bool `json:"debit_negative_balances"` - DefaultCurrency string `json:"default_currency"` + DefaultCurrency Currency `json:"default_currency"` Deleted bool `json:"deleted"` DetailsSubmitted bool `json:"details_submitted"` Email string `json:"email"` @@ -274,33 +288,6 @@ func (a *Account) UnmarshalJSON(data []byte) error { return nil } -// ExternalAccountType is the type of an external account. -type ExternalAccountType string - -const ( - // ExternalAccountTypeBankAccount is a constant value representing an external - // account which is a bank account. - ExternalAccountTypeBankAccount ExternalAccountType = "bank_account" - - // ExternalAccountTypeCard is a constant value representing an external account - // which is a card. - ExternalAccountTypeCard ExternalAccountType = "card" -) - -// AccountType is the type of an account. -type AccountType string - -const ( - // AccountTypeCustom is a constant value representing an account of type custom. - AccountTypeCustom AccountType = "custom" - - // AccountTypeExpress is a constant value representing an account of type express. - AccountTypeExpress AccountType = "express" - - // AccountTypeStandard is a constant value representing an account of type standard. - AccountTypeStandard AccountType = "standard" -) - // AccountList is a list of accounts as returned from a list endpoint. type AccountList struct { ListMeta @@ -369,7 +356,7 @@ type LegalEntity struct { FirstName string `json:"first_name"` FirstNameKana string `json:"first_name_kana"` FirstNameKanji string `json:"first_name_kanji"` - Gender Gender `json:"gender"` + Gender string `json:"gender"` LastName string `json:"last_name"` LastNameKana string `json:"last_name_kana"` LastNameKanji string `json:"last_name_kanji"` @@ -405,19 +392,15 @@ type DOB struct { Year int64 `json:"year"` } -// Gender is the gender of an account owner. International regulations require -// either “male” or “female”. -type Gender string - // AdditionalOwner is the structure for an account owner. type AdditionalOwner struct { - Address AccountAddress `json:"address"` - DOB DOB `json:"dob"` - FirstName string `json:"first_name"` - LastName string `json:"last_name"` - MaidenName string `json:"maiden_name"` - PersonalIDNumberProvided bool `json:"personal_id_number_provided"` - Verification IdentityVerification `json:"verification"` + Address AccountAddress `json:"address"` + DOB DOB `json:"dob"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + MaidenName string `json:"maiden_name"` + PersonalIDNumberProvided bool `json:"personal_id_number_provided"` + Verification string `json:"verification"` } // IdentityVerification is the structure for an account's verification. @@ -430,15 +413,13 @@ type IdentityVerification struct { // PayoutSchedule is the structure for an account's payout schedule. type PayoutSchedule struct { - DelayDays int64 `json:"delay_days"` - Interval Interval `json:"interval"` - MonthlyAnchor int64 `json:"monthly_anchor"` - WeeklyAnchor string `json:"weekly_anchor"` + DelayDays int64 `json:"delay_days"` + Interval PayoutInterval `json:"interval"` + MonthlyAnchor int64 `json:"monthly_anchor"` + WeeklyAnchor string `json:"weekly_anchor"` } // AccountRejectParams is the structure for the Reject function. type AccountRejectParams struct { - // Reason is the reason that an account was rejected. It should be given a - // value of one of `fraud`, `terms_of_service`, or `other`. Reason *string `form:"reason"` } diff --git a/account/client_test.go b/account/client_test.go index a65fe7de4c..e7a4154889 100644 --- a/account/client_test.go +++ b/account/client_test.go @@ -47,7 +47,7 @@ func TestAccountNew(t *testing.T) { SupportURL: stripe.String("www.stripe.com"), SupportPhone: stripe.String("4151234567"), LegalEntity: &stripe.LegalEntityParams{ - Type: stripe.String(string(stripe.Individual)), + Type: stripe.String(string(stripe.LegalEntityTypeIndividual)), BusinessName: stripe.String("Stripe Go"), AdditionalOwners: []stripe.AdditionalOwnerParams{ { @@ -78,7 +78,7 @@ func TestAccountNew(t *testing.T) { func TestAccountReject(t *testing.T) { account, err := Reject("acct_123", &stripe.AccountRejectParams{ - Reason: stripe.String("fraud"), + Reason: stripe.String(stripe.AccountRejectReasonFraud), }) assert.Nil(t, err) assert.NotNil(t, account) diff --git a/balance.go b/balance.go index 4cc080c8dd..d0ab108fba 100644 --- a/balance.go +++ b/balance.go @@ -3,41 +3,48 @@ package stripe import "encoding/json" // BalanceTransactionStatus is the list of allowed values for the balance transaction's status. -// Allowed values are "available", "pending". type BalanceTransactionStatus string +const ( + BalanceTransactionStatusAvailable BalanceTransactionStatus = "available" + BalanceTransactionStatusPending BalanceTransactionStatus = "pending" +) + // BalanceTransactionType is the list of allowed values for the balance transaction's type. -// Allowed values are "charge", "refund", "adjustment", "application_fee", -// "application_fee_refund", "transfer", "transfer_cancel", "transfer_failure". type BalanceTransactionType string +const ( + BalanceTransactionTypeAdjustment BalanceTransactionType = "adjustment" + BalanceTransactionTypeApplicationFee BalanceTransactionType = "application_fee" + BalanceTransactionTypeApplicationFeeRefund BalanceTransactionType = "application_fee_refund" + BalanceTransactionTypeCharge BalanceTransactionType = "charge" + BalanceTransactionTypePayment BalanceTransactionType = "payment" + BalanceTransactionTypePaymentFailureRefund BalanceTransactionType = "payment_failure_refund" + BalanceTransactionTypePaymentRefund BalanceTransactionType = "payment_refund" + BalanceTransactionTypePayout BalanceTransactionType = "payout" + BalanceTransactionTypePayoutCancel BalanceTransactionType = "payout_cancel" + BalanceTransactionTypePayoutFailure BalanceTransactionType = "payout_failure" + BalanceTransactionTypeRecipientTransfer BalanceTransactionType = "recipient_transfer" + BalanceTransactionTypeRecipientTransferCancel BalanceTransactionType = "recipient_transfer_cancel" + BalanceTransactionTypeRecipientTransferFailure BalanceTransactionType = "recipient_transfer_failure" + BalanceTransactionTypeRefund BalanceTransactionType = "refund" + BalanceTransactionTypeStripeFee BalanceTransactionType = "stripe_fee" + BalanceTransactionTypeTransfer BalanceTransactionType = "transfer" + BalanceTransactionTypeTransferRefund BalanceTransactionType = "transfer_refund" +) + // BalanceTransactionSourceType consts represent valid balance transaction sources. type BalanceTransactionSourceType string const ( - // BalanceTransactionSourceTypeCharge is a constant representing a transaction source of charge - BalanceTransactionSourceTypeCharge BalanceTransactionSourceType = "charge" - - // BalanceTransactionSourceTypeDispute is a constant representing a transaction source of dispute - BalanceTransactionSourceTypeDispute BalanceTransactionSourceType = "dispute" - - // BalanceTransactionSourceTypeApplicationFee is a constant representing a transaction source of application_fee - BalanceTransactionSourceTypeApplicationFee BalanceTransactionSourceType = "application_fee" - - // BalanceTransactionSourceTypePayout is a constant representing a transaction source of payout - BalanceTransactionSourceTypePayout BalanceTransactionSourceType = "payout" - - // BalanceTransactionSourceTypeRecipientTransfer is a constant representing a transaction source of recipient_transfer + BalanceTransactionSourceTypeApplicationFee BalanceTransactionSourceType = "application_fee" + BalanceTransactionSourceTypeCharge BalanceTransactionSourceType = "charge" + BalanceTransactionSourceTypeDispute BalanceTransactionSourceType = "dispute" + BalanceTransactionSourceTypePayout BalanceTransactionSourceType = "payout" BalanceTransactionSourceTypeRecipientTransfer BalanceTransactionSourceType = "recipient_transfer" - - // BalanceTransactionSourceTypeRefund is a constant representing a transaction source of refund - BalanceTransactionSourceTypeRefund BalanceTransactionSourceType = "refund" - - // BalanceTransactionSourceTypeReversal is a constant representing a transaction source of reversal - BalanceTransactionSourceTypeReversal BalanceTransactionSourceType = "reversal" - - // BalanceTransactionSourceTypeTransfer is a constant representing a transaction source of transfer - BalanceTransactionSourceTypeTransfer BalanceTransactionSourceType = "transfer" + BalanceTransactionSourceTypeRefund BalanceTransactionSourceType = "refund" + BalanceTransactionSourceTypeReversal BalanceTransactionSourceType = "reversal" + BalanceTransactionSourceTypeTransfer BalanceTransactionSourceType = "transfer" ) // BalanceTransactionSource describes the source of a balance Transaction. @@ -103,7 +110,7 @@ type BalanceTransaction struct { FeeDetails []BalanceTransactionFee `json:"fee_details"` Net int64 `json:"net"` Recipient string `json:"recipient"` - Source BalanceTransactionSource `json:"source"` + Source string `json:"source"` Status BalanceTransactionStatus `json:"status"` Type BalanceTransactionType `json:"type"` } diff --git a/balance/client.go b/balance/client.go index 0848254990..f1e1f634c3 100644 --- a/balance/client.go +++ b/balance/client.go @@ -6,25 +6,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - BalanceTransactionAvailable stripe.BalanceTransactionStatus = "available" - BalanceTransactionPending stripe.BalanceTransactionStatus = "pending" - - BalanceTransactionCharge stripe.BalanceTransactionType = "charge" - BalanceTransactionRefund stripe.BalanceTransactionType = "refund" - BalanceTransactionAdjust stripe.BalanceTransactionType = "adjustment" - BalanceTransactionAppFee stripe.BalanceTransactionType = "application_fee" - BalanceTransactionFeeRefund stripe.BalanceTransactionType = "application_fee_refund" - BalanceTransactionRecipientTransfer stripe.BalanceTransactionType = "recipient_transfer" - BalanceTransactionRecipientTransferCancel stripe.BalanceTransactionType = "recipient_transfer_cancel" - BalanceTransactionRecipientTransferFail stripe.BalanceTransactionType = "recipient_transfer_failure" - BalanceTransactionPayout stripe.BalanceTransactionType = "payout" - BalanceTransactionPayoutCancel stripe.BalanceTransactionType = "payout_cancel" - BalanceTransactionPayoutFail stripe.BalanceTransactionType = "payout_failure" - BalanceTransactionTransfer stripe.BalanceTransactionType = "transfer" - BalanceTransactionTransferCancel stripe.BalanceTransactionType = "transfer_refund" -) - // Client is used to invoke /balance and transaction-related APIs. type Client struct { B stripe.Backend diff --git a/bankaccount.go b/bankaccount.go index 6bd964fe1d..a31a2a1601 100644 --- a/bankaccount.go +++ b/bankaccount.go @@ -8,9 +8,24 @@ import ( ) // BankAccountStatus is the list of allowed values for the bank account's status. -// Allowed values are "new", "validated", "verified", "verification_failed", "errored". type BankAccountStatus string +const ( + BankAccountStatusErrored BankAccountStatus = "errored" + BankAccountStatusNew BankAccountStatus = "new" + BankAccountStatusValidated BankAccountStatus = "validated" + BankAccountStatusVerificationFailed BankAccountStatus = "verification_failed" + BankAccountStatusVerified BankAccountStatus = "verified" +) + +// BankAccountAccountHolderType is the list of allowed values for the bank account holder type. +type BankAccountAccountHolderType string + +const ( + BankAccountAccountHolderTypeCompany BankAccountAccountHolderType = "company" + BankAccountAccountHolderTypeIndividual BankAccountAccountHolderType = "individual" +) + // BankAccountParams is the set of parameters that can be used when updating a // bank account. // @@ -112,20 +127,20 @@ type BankAccountListParams struct { // BankAccount represents a Stripe bank account. type BankAccount struct { - AccountHolderName string `json:"account_holder_name"` - AccountHolderType string `json:"account_holder_type"` - BankName string `json:"bank_name"` - Country string `json:"country"` - Currency Currency `json:"currency"` - Customer *Customer `json:"customer"` - DefaultForCurrency bool `json:"default_for_currency"` - Deleted bool `json:"deleted"` - Fingerprint string `json:"fingerprint"` - ID string `json:"id"` - Last4 string `json:"last4"` - Metadata map[string]string `json:"metadata"` - RoutingNumber string `json:"routing_number"` - Status BankAccountStatus `json:"status"` + AccountHolderName string `json:"account_holder_name"` + AccountHolderType BankAccountAccountHolderType `json:"account_holder_type"` + BankName string `json:"bank_name"` + Country string `json:"country"` + Currency Currency `json:"currency"` + Customer *Customer `json:"customer"` + DefaultForCurrency bool `json:"default_for_currency"` + Deleted bool `json:"deleted"` + Fingerprint string `json:"fingerprint"` + ID string `json:"id"` + Last4 string `json:"last4"` + Metadata map[string]string `json:"metadata"` + RoutingNumber string `json:"routing_number"` + Status BankAccountStatus `json:"status"` } // BankAccountList is a list object for bank accounts. diff --git a/bankaccount/client.go b/bankaccount/client.go index 4a6eb3fa06..d4fe33a75f 100644 --- a/bankaccount/client.go +++ b/bankaccount/client.go @@ -15,14 +15,6 @@ type Client struct { Key string } -const ( - NewAccount stripe.BankAccountStatus = "new" - VerificationFAiledAccount stripe.BankAccountStatus = "verification_failed" - VerifiedAccount stripe.BankAccountStatus = "verified" - ValidatedAccount stripe.BankAccountStatus = "validated" - ErroredAccount stripe.BankAccountStatus = "errored" -) - // New POSTs a new bank account. func New(params *stripe.BankAccountParams) (*stripe.BankAccount, error) { return getC().New(params) diff --git a/bankaccount_test.go b/bankaccount_test.go index ace1b6b6ab..f1c57e6e23 100644 --- a/bankaccount_test.go +++ b/bankaccount_test.go @@ -30,7 +30,7 @@ func TestBankAccountParams_AppendToAsSourceOrExternalAccount(t *testing.T) { // Includes account_holder_name { - params := &BankAccountParams{AccountHolderType: String(string(Individual))} + params := &BankAccountParams{AccountHolderType: String(string(BankAccountAccountHolderTypeIndividual))} body := &form.Values{} params.AppendToAsSourceOrExternalAccount(body) t.Logf("body = %+v", body) diff --git a/card.go b/card.go index f9323530d4..b4d9d28dcd 100644 --- a/card.go +++ b/card.go @@ -7,26 +7,50 @@ import ( "github.com/stripe/stripe-go/form" ) -// cardSource is a string that's used to build card form parameters. It's a -// constant just to make mistakes less likely. -const cardSource = "source" - // CardBrand is the list of allowed values for the card's brand. -// Allowed values are "Unknown", "Visa", "American Express", "MasterCard", "Discover" -// "JCB", "Diners Club". type CardBrand string +const ( + CardBrandAmex CardBrand = "American Express" + CardBrandDiscover CardBrand = "Discover" + CardBrandDinersClub CardBrand = "Diners Club" + CardBrandJCB CardBrand = "JCB" + CardBrandMasterCard CardBrand = "MasterCard" + CardBrandUnknown CardBrand = "Unknown" + CardBrandUnionPay CardBrand = "UnionPay" + CardBrandVisa CardBrand = "Visa" +) + // CardFunding is the list of allowed values for the card's funding. -// Allowed values are "credit", "debit", "prepaid", "unknown". type CardFunding string -// TokenizationMethod is the list of allowed values for the card's tokenization method. -// Allowed values are "apple_pay", "android_pay". -type TokenizationMethod string +const ( + CardFundingCredit CardFunding = "credit" + CardFundingDebit CardFunding = "debit" + CardFundingPrepaid CardFunding = "prepaid" + CardFundingUnknown CardFunding = "unknown" +) + +// CardTokenizationMethod is the list of allowed values for the card's tokenization method. +type CardTokenizationMethod string -// Verification is the list of allowed verification responses. -// Allowed values are "pass", "fail", "unchecked", "unavailable". -type Verification string +const ( + TokenizationMethodAndroidPay CardTokenizationMethod = "android_pay" + TokenizationMethodApplePay CardTokenizationMethod = "apple_pay" +) + +// CardVerification is the list of allowed verification responses. +type CardVerification string + +const ( + CardVerificationFail CardVerification = "fail" + CardVerificationPass CardVerification = "pass" + CardVerificationUnchecked CardVerification = "unchecked" +) + +// cardSource is a string that's used to build card form parameters. It's a +// constant just to make mistakes less likely. +const cardSource = "source" // CardParams is the set of parameters that can be used when creating or updating a card. // For more details see https://stripe.com/docs/api#create_card and https://stripe.com/docs/api#update_card. @@ -147,21 +171,21 @@ type CardListParams struct { // Card is the resource representing a Stripe credit/debit card. // For more details see https://stripe.com/docs/api#cards. type Card struct { - AddressCity string `json:"address_city"` - AddressCountry string `json:"address_country"` - AddressLine1 string `json:"address_line1"` - AddressLine1Check Verification `json:"address_line1_check"` - AddressLine2 string `json:"address_line2"` - AddressState string `json:"address_state"` - AddressZip string `json:"address_zip"` - AddressZipCheck Verification `json:"address_zip_check"` - Brand CardBrand `json:"brand"` - CVCCheck Verification `json:"cvc_check"` - Country string `json:"country"` - Currency Currency `json:"currency"` - Customer *Customer `json:"customer"` - DefaultForCurrency bool `json:"default_for_currency"` - Deleted bool `json:"deleted"` + AddressCity string `json:"address_city"` + AddressCountry string `json:"address_country"` + AddressLine1 string `json:"address_line1"` + AddressLine1Check CardVerification `json:"address_line1_check"` + AddressLine2 string `json:"address_line2"` + AddressState string `json:"address_state"` + AddressZip string `json:"address_zip"` + AddressZipCheck CardVerification `json:"address_zip_check"` + Brand CardBrand `json:"brand"` + CVCCheck CardVerification `json:"cvc_check"` + Country string `json:"country"` + Currency Currency `json:"currency"` + Customer *Customer `json:"customer"` + DefaultForCurrency bool `json:"default_for_currency"` + Deleted bool `json:"deleted"` // Description is a succinct summary of the card's information. // @@ -188,12 +212,12 @@ type Card struct { // as part of standard API requests. Issuer string `json:"issuer"` - Last4 string `json:"last4"` - Metadata map[string]string `json:"metadata"` - Name string `json:"name"` - Recipient *Recipient `json:"recipient"` - ThreeDSecure *ThreeDSecure `json:"three_d_secure"` - TokenizationMethod TokenizationMethod `json:"tokenization_method"` + Last4 string `json:"last4"` + Metadata map[string]string `json:"metadata"` + Name string `json:"name"` + Recipient *Recipient `json:"recipient"` + ThreeDSecure *ThreeDSecure `json:"three_d_secure"` + TokenizationMethod CardTokenizationMethod `json:"tokenization_method"` } // CardList is a list object for cards. diff --git a/card/client.go b/card/client.go index c21032201f..baf6846095 100644 --- a/card/client.go +++ b/card/client.go @@ -9,25 +9,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - BrandUnknown stripe.CardBrand = "Unknown" - Visa stripe.CardBrand = "Visa" - Amex stripe.CardBrand = "American Express" - MasterCard stripe.CardBrand = "MasterCard" - Discover stripe.CardBrand = "Discover" - JCB stripe.CardBrand = "JCB" - DinersClub stripe.CardBrand = "Diners Club" - - Pass stripe.Verification = "pass" - Fail stripe.Verification = "fail" - Unchecked stripe.Verification = "unchecked" - - Credit stripe.CardFunding = "credit" - Debit stripe.CardFunding = "debit" - Prepaid stripe.CardFunding = "prepaid" - FundingUnknown stripe.CardFunding = "unknown" -) - // Client is used to invoke /cards APIs. type Client struct { B stripe.Backend diff --git a/charge.go b/charge.go index 5f0032cf70..e3a9606d74 100644 --- a/charge.go +++ b/charge.go @@ -4,14 +4,25 @@ import ( "encoding/json" ) +// ChargeFraudUserReport is the list of allowed values for reporting fraud. +type ChargeFraudUserReport string + +const ( + ChargeFraudUserReportFraudulent ChargeFraudUserReport = "fraudulent" + ChargeFraudUserReportSafe ChargeFraudUserReport = "safe" +) + +// ChargeFraudStripeReport is the list of allowed values for reporting fraud. +type ChargeFraudStripeReport string + +const ( + ChargeFraudStripeReportFraudulent ChargeFraudStripeReport = "fraudulent" +) + // Currency is the list of supported currencies. // For more details see https://support.stripe.com/questions/which-currencies-does-stripe-support. type Currency string -// FraudReport is the list of allowed values for reporting fraud. -// Allowed values are "fraudulent", "safe". -type FraudReport string - // ChargeParams is the set of parameters that can be used when creating or updating a charge. // For more details see https://stripe.com/docs/api#create_charge and https://stripe.com/docs/api#update_charge. type ChargeParams struct { @@ -143,8 +154,8 @@ type ChargeList struct { // FraudDetails is the structure detailing fraud status. type FraudDetails struct { - UserReport FraudReport `json:"user_report"` - StripeReport FraudReport `json:"stripe_report"` + UserReport ChargeFraudUserReport `json:"user_report"` + StripeReport ChargeFraudStripeReport `json:"stripe_report"` } // ChargeOutcomeRule tells you the Radar rule that blocked the charge, if any. diff --git a/charge/client.go b/charge/client.go index 8ed79ef06f..f67dc9cac9 100644 --- a/charge/client.go +++ b/charge/client.go @@ -8,11 +8,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - ReportFraudulent stripe.FraudReport = "fraudulent" - ReportSafe stripe.FraudReport = "safe" -) - // Client is used to invoke /charges APIs. type Client struct { B stripe.Backend @@ -143,7 +138,7 @@ func (c Client) MarkFraudulent(id string) (*stripe.Charge, error) { id, &stripe.ChargeParams{ FraudDetails: &stripe.FraudDetailsParams{ - UserReport: stripe.String(string(ReportFraudulent)), + UserReport: stripe.String(string(stripe.ChargeFraudUserReportFraudulent)), }, }, ) @@ -159,7 +154,7 @@ func (c Client) MarkSafe(id string) (*stripe.Charge, error) { id, &stripe.ChargeParams{ FraudDetails: &stripe.FraudDetailsParams{ - UserReport: stripe.String(string(ReportSafe)), + UserReport: stripe.String(string(stripe.ChargeFraudUserReportSafe)), }, }, ) diff --git a/coupon.go b/coupon.go index 2cec158b1d..8a5809c3d1 100644 --- a/coupon.go +++ b/coupon.go @@ -3,9 +3,14 @@ package stripe import "encoding/json" // CouponDuration is the list of allowed values for the coupon's duration. -// Allowed values are "forever", "once", "repeating". type CouponDuration string +const ( + CouponDurationForever CouponDuration = "forever" + CouponDurationOnce CouponDuration = "once" + CouponDurationRepeating CouponDuration = "repeating" +) + // CouponParams is the set of parameters that can be used when creating a coupon. // For more details see https://stripe.com/docs/api#create_coupon. type CouponParams struct { diff --git a/coupon/client.go b/coupon/client.go index 8ffd2d2fb9..412a48b4e5 100644 --- a/coupon/client.go +++ b/coupon/client.go @@ -8,12 +8,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - Forever stripe.CouponDuration = "forever" - Once stripe.CouponDuration = "once" - Repeating stripe.CouponDuration = "repeating" -) - // Client is used to invoke /coupons APIs. type Client struct { B stripe.Backend diff --git a/coupon/client_test.go b/coupon/client_test.go index 7870bb4b7f..8027ee4909 100644 --- a/coupon/client_test.go +++ b/coupon/client_test.go @@ -33,7 +33,7 @@ func TestCouponList(t *testing.T) { func TestCouponNew(t *testing.T) { coupon, err := New(&stripe.CouponParams{ Currency: stripe.String(string(currency.USD)), - Duration: stripe.String(string(Repeating)), + Duration: stripe.String(string(stripe.CouponDurationRepeating)), DurationInMonths: stripe.Int64(3), ID: stripe.String("25OFF"), PercentOff: stripe.Int64(25), diff --git a/dispute.go b/dispute.go index d3dc1083b0..674469c54d 100644 --- a/dispute.go +++ b/dispute.go @@ -5,17 +5,33 @@ import ( ) // DisputeReason is the list of allowed values for a discount's reason. -// Allowed values are "duplicate", "fraudulent", "subscription_canceled", -// "product_unacceptable", "product_not_received", "unrecognized", -// "credit_not_processed", "general". type DisputeReason string +const ( + DisputeReasonCreditNotProcessed DisputeReason = "credit_not_processed" + DisputeReasonDuplicate DisputeReason = "duplicate" + DisputeReasonFraudulent DisputeReason = "fraudulent" + DisputeReasonGeneral DisputeReason = "general" + DisputeReasonProductNotReceived DisputeReason = "product_not_received" + DisputeReasonProductUnacceptable DisputeReason = "product_unacceptable" + DisputeReasonSubscriptionCanceled DisputeReason = "subscription_canceled" + DisputeReasonUnrecognized DisputeReason = "unrecognized" +) + // DisputeStatus is the list of allowed values for a discount's status. -// Allowed values are "won", "lost", "needs_response", "under_review", -// "warning_needs_response", "warning_under_review", "charge_refunded", -// "warning_closed". type DisputeStatus string +const ( + DisputeStatusChargeRefunded DisputeStatus = "charge_refunded" + DisputeStatusLost DisputeStatus = "lost" + DisputeStatusNeedsResponse DisputeStatus = "needs_response" + DisputeStatusUnderReview DisputeStatus = "under_review" + DisputeStatusWarningClosed DisputeStatus = "warning_closed" + DisputeStatusWarningNeedsResponse DisputeStatus = "warning_needs_response" + DisputeStatusWarningUnderReview DisputeStatus = "warning_under_review" + DisputeStatusWon DisputeStatus = "won" +) + // DisputeParams is the set of parameters that can be used when updating a dispute. // For more details see https://stripe.com/docs/api#update_dispute. type DisputeParams struct { diff --git a/dispute/client.go b/dispute/client.go index dbebfa2c43..6f3f792508 100644 --- a/dispute/client.go +++ b/dispute/client.go @@ -7,26 +7,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - CreditNotProcessed stripe.DisputeReason = "credit_not_processed" - Duplicate stripe.DisputeReason = "duplicate" - Fraudulent stripe.DisputeReason = "fraudulent" - General stripe.DisputeReason = "general" - ProductNotReceived stripe.DisputeReason = "product_not_received" - ProductUnacceptable stripe.DisputeReason = "product_unacceptable" - SubscriptionCanceled stripe.DisputeReason = "subscription_canceled" - Unrecognized stripe.DisputeReason = "unrecognized" - - Lost stripe.DisputeStatus = "lost" - NeedsResponse stripe.DisputeStatus = "needs_response" - ChargeRefunded stripe.DisputeStatus = "charge_refunded" - UnderReview stripe.DisputeStatus = "under_review" - WarningClosed stripe.DisputeStatus = "warning_closed" - WarningNeedsResponse stripe.DisputeStatus = "warning_needs_response" - WarningUnderReview stripe.DisputeStatus = "warning_under_review" - Won stripe.DisputeStatus = "won" -) - // Client is used to invoke dispute-related APIs. type Client struct { B stripe.Backend diff --git a/error.go b/error.go index fb00d31969..f1356ce4cb 100644 --- a/error.go +++ b/error.go @@ -5,9 +5,6 @@ import "encoding/json" // ErrorType is the list of allowed values for the error's type. type ErrorType string -// ErrorCode is the list of allowed values for the error's code. -type ErrorCode string - const ( ErrorTypeAPI ErrorType = "api_error" ErrorTypeAPIConnection ErrorType = "api_connection_error" @@ -16,7 +13,12 @@ const ( ErrorTypeInvalidRequest ErrorType = "invalid_request_error" ErrorTypePermission ErrorType = "more_permissions_required" ErrorTypeRateLimit ErrorType = "rate_limit_error" +) +// ErrorCode is the list of allowed values for the error's code. +type ErrorCode string + +const ( ErrorCodeCardDeclined ErrorCode = "card_declined" ErrorCodeExpiredCard ErrorCode = "expired_card" ErrorCodeIncorrectCVC ErrorCode = "incorrect_cvc" diff --git a/fileupload.go b/fileupload.go index ce7ec78815..7a6ef8490a 100644 --- a/fileupload.go +++ b/fileupload.go @@ -7,6 +7,14 @@ import ( "path/filepath" ) +// FileUploadPurpose is the purpose of a particular file upload. +type FileUploadPurpose string + +const ( + FileUploadPurposeDisputeEvidence FileUploadPurpose = "dispute_evidence" + FileUploadPurposeIdentityDocument FileUploadPurpose = "identity_document" +) + // FileUploadParams is the set of parameters that can be used when creating a // file upload. // For more details see https://stripe.com/docs/api#create_file_upload. @@ -31,10 +39,6 @@ type FileUploadListParams struct { Purpose *string `form:"purpose"` } -// FileUploadPurpose is the purpose of a particular file upload. Allowed values -// are "dispute_evidence" and "identity_document". -type FileUploadPurpose string - // FileUpload is the resource representing a Stripe file upload. // For more details see https://stripe.com/docs/api#file_uploads. type FileUpload struct { diff --git a/fileupload/client.go b/fileupload/client.go index a8280618b7..459a7712aa 100644 --- a/fileupload/client.go +++ b/fileupload/client.go @@ -9,11 +9,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - DisputeEvidenceFile stripe.FileUploadPurpose = "dispute_evidence" - IdentityDocFile stripe.FileUploadPurpose = "identity_document" -) - // Client is used to invoke file upload APIs. type Client struct { B stripe.Backend diff --git a/fileupload/client_test.go b/fileupload/client_test.go index 3c8eb228e0..a6f9c6c7a6 100644 --- a/fileupload/client_test.go +++ b/fileupload/client_test.go @@ -34,7 +34,7 @@ func TestFileUploadNewThenGet(t *testing.T) { } uploadParams := &stripe.FileUploadParams{ - Purpose: stripe.String(string(DisputeEvidenceFile)), + Purpose: stripe.String(string(stripe.FileUploadPurposeDisputeEvidence)), FileReader: f, Filename: stripe.String(f.Name()), } @@ -59,7 +59,7 @@ func TestFileUploadList(t *testing.T) { } uploadParams := &stripe.FileUploadParams{ - Purpose: stripe.String(string(DisputeEvidenceFile)), + Purpose: stripe.String(string(stripe.FileUploadPurposeDisputeEvidence)), FileReader: f, Filename: stripe.String(f.Name()), } diff --git a/invoice.go b/invoice.go index 10d76d46cf..982f9c68ad 100644 --- a/invoice.go +++ b/invoice.go @@ -6,10 +6,20 @@ import "encoding/json" // Allowed values are "invoiceitem", "subscription". type InvoiceLineType string +const ( + InvoiceLineTypeInvoiceItem InvoiceLineType = "invoiceitem" + InvoiceLineTypeSubscription InvoiceLineType = "subscription" +) + // InvoiceBilling is the type of billing method for this invoice. // Currently supported values are "send_invoice" and "charge_automatically". type InvoiceBilling string +const ( + InvoiceBillingChargeAutomatically InvoiceBilling = "charge_automatically" + InvoiceBillingSendInvoice InvoiceBilling = "send_invoice" +) + // InvoiceParams is the set of parameters that can be used when creating or updating an invoice. // For more details see https://stripe.com/docs/api#create_invoice, https://stripe.com/docs/api#update_invoice. type InvoiceParams struct { diff --git a/invoice/client.go b/invoice/client.go index 04245e0096..ba3e10532e 100644 --- a/invoice/client.go +++ b/invoice/client.go @@ -8,11 +8,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - TypeInvoiceItem stripe.InvoiceLineType = "invoiceitem" - TypeSubscription stripe.InvoiceLineType = "subscription" -) - // Client is the client used to invoke /invoices APIs. type Client struct { B stripe.Backend diff --git a/invoice/client_test.go b/invoice/client_test.go index ad1cc5d66a..e7722810de 100644 --- a/invoice/client_test.go +++ b/invoice/client_test.go @@ -36,7 +36,7 @@ func TestInvoiceListLines(t *testing.T) { func TestInvoiceNew(t *testing.T) { invoice, err := New(&stripe.InvoiceParams{ - Billing: stripe.String("charge_automatically"), + Billing: stripe.String(string(stripe.InvoiceBillingChargeAutomatically)), Customer: stripe.String("cus_123"), }) assert.Nil(t, err) diff --git a/order.go b/order.go index 243d29cd45..8886d46c4b 100644 --- a/order.go +++ b/order.go @@ -8,11 +8,29 @@ import ( type OrderStatus string const ( - StatusCanceled OrderStatus = "canceled" - StatusCreated OrderStatus = "created" - StatusFulfilled OrderStatus = "fulfilled" - StatusPaid OrderStatus = "paid" - StatusReturned OrderStatus = "returned" + 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 + +const ( + OrderDeliveryEstimateTypeExact OrderDeliveryEstimateType = "exact" + OrderDeliveryEstimateTypeRange OrderDeliveryEstimateType = "range" +) + +// OrderItemType represents the type of order item +type OrderItemType string + +const ( + OrderItemTeypeDiscount OrderItemType = "discount" + OrderItemTeypeShipping OrderItemType = "shipping" + OrderItemTeypeSKU OrderItemType = "sku" + OrderItemTeypeTax OrderItemType = "tax" ) type OrderParams struct { @@ -67,20 +85,13 @@ type ShippingMethod struct { Description string `json:"description"` } -type EstimateType string - -const ( - Exact EstimateType = "exact" - Range EstimateType = "range" -) - type DeliveryEstimate struct { // If Type == Exact Date string `json:"date"` // If Type == Range - Earliest string `json:"earliest"` - Latest string `json:"latest"` - Type EstimateType `json:"type"` + Earliest string `json:"earliest"` + Latest string `json:"latest"` + Type OrderDeliveryEstimateType `json:"type"` } type Order struct { @@ -101,7 +112,7 @@ type Order struct { SelectedShippingMethod *string `json:"selected_shipping_method"` Shipping Shipping `json:"shipping"` ShippingMethods []ShippingMethod `json:"shipping_methods"` - Status OrderStatus `json:"status"` + Status string `json:"status"` StatusTransitions StatusTransitions `json:"status_transitions"` Updated int64 `json:"updated"` } @@ -144,6 +155,24 @@ type OrderPayParams struct { Source *SourceParams `form:"*"` // SourceParams has custom encoding so brought to top level with "*" } +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"` +} + +type OrderItem struct { + Amount int64 `json:"amount"` + Currency Currency `json:"currency"` + Description string `json:"description"` + Parent string `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 { diff --git a/order/client_test.go b/order/client_test.go index e08cda6a96..e1db42d224 100644 --- a/order/client_test.go +++ b/order/client_test.go @@ -83,7 +83,7 @@ func TestOrderReturn_RequestParams(t *testing.T) { func TestOrderUpdate(t *testing.T) { order, err := Update("or_123", &stripe.OrderUpdateParams{ - Status: stripe.String(string(stripe.StatusFulfilled)), + Status: stripe.String(string(stripe.OrderStatusFulfilled)), }) assert.Nil(t, err) assert.NotNil(t, order) diff --git a/orderitem.go b/orderitem.go deleted file mode 100644 index 7c8a471fb4..0000000000 --- a/orderitem.go +++ /dev/null @@ -1,26 +0,0 @@ -package stripe - -import ( - // This is pretty silly. Nowhere else do we import a subpackage from the - // top-level namespace like this. We should try to deprecate this at some - // point. - "github.com/stripe/stripe-go/orderitem" -) - -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"` -} - -type OrderItem struct { - Amount int64 `json:"amount"` - Currency Currency `json:"currency"` - Description string `json:"description"` - Parent string `json:"parent"` - Quantity int64 `json:"quantity"` - Type orderitem.ItemType `json:"type"` -} diff --git a/orderitem/order_item.go b/orderitem/order_item.go deleted file mode 100644 index b9a92920e3..0000000000 --- a/orderitem/order_item.go +++ /dev/null @@ -1,12 +0,0 @@ -package orderitem - -// OrderItemType represents one of the possible types that an order's OrderItem -// can have. -type ItemType string - -const ( - SKU ItemType = "sku" - Tax ItemType = "tax" - Shipping ItemType = "shipping" - Discount ItemType = "discount" -) diff --git a/orderitem/order_item_test.go b/orderitem/order_item_test.go deleted file mode 100644 index ebd4e8162e..0000000000 --- a/orderitem/order_item_test.go +++ /dev/null @@ -1 +0,0 @@ -package orderitem diff --git a/paymentsource.go b/paymentsource.go index 9bd5e3469c..d9247e20b0 100644 --- a/paymentsource.go +++ b/paymentsource.go @@ -7,6 +7,17 @@ import ( "github.com/stripe/stripe-go/form" ) +// PaymentSourceType consts represent valid payment sources. +type PaymentSourceType string + +const ( + PaymentSourceTypeAccount PaymentSourceType = "account" + PaymentSourceTypeBankAccount PaymentSourceType = "bank_account" + PaymentSourceTypeBitcoinReceiver PaymentSourceType = "bitcoin_receiver" + PaymentSourceTypeCard PaymentSourceType = "card" + PaymentSourceTypeObject PaymentSourceType = "source" +) + // SourceParams is a union struct used to describe an // arbitrary payment source. type SourceParams struct { @@ -70,31 +81,6 @@ func SourceParamsFor(obj interface{}) (*SourceParams, error) { return sp, err } -// PaymentSourceType consts represent valid payment sources. -type PaymentSourceType string - -const ( - // PaymentSourceAccount is a constant representing a payment source which is - // an account. - PaymentSourceAccount PaymentSourceType = "account" - - // PaymentSourceBankAccount is a constant representing a payment source - // which is a bank account. - PaymentSourceBankAccount PaymentSourceType = "bank_account" - - // PaymentSourceBitcoinReceiver is a constant representing a payment source - // which is a Bitcoin receiver. - PaymentSourceBitcoinReceiver PaymentSourceType = "bitcoin_receiver" - - // PaymentSourceCard is a constant representing a payment source which is a - // card. - PaymentSourceCard PaymentSourceType = "card" - - // PaymentSourceObject is a constant representing a payment source which - // is a top level source object (/v1/sources). - PaymentSourceObject PaymentSourceType = "source" -) - // PaymentSource describes the payment source used to make a Charge. // The Type should indicate which object is fleshed out (eg. BitcoinReceiver or Card) // For more details see https://stripe.com/docs/api#retrieve_charge @@ -132,13 +118,13 @@ func (s *PaymentSource) UnmarshalJSON(data []byte) error { *s = PaymentSource(ss) switch s.Type { - case PaymentSourceBankAccount: + case PaymentSourceTypeBankAccount: err = json.Unmarshal(data, &s.BankAccount) - case PaymentSourceBitcoinReceiver: + case PaymentSourceTypeBitcoinReceiver: err = json.Unmarshal(data, &s.BitcoinReceiver) - case PaymentSourceCard: + case PaymentSourceTypeCard: err = json.Unmarshal(data, &s.Card) - case PaymentSourceObject: + case PaymentSourceTypeObject: err = json.Unmarshal(data, &s.SourceObject) } @@ -155,12 +141,12 @@ func (s *PaymentSource) UnmarshalJSON(data []byte) error { // MarshalJSON handles serialization of a PaymentSource. // This custom marshaling is needed because the specific type -// of payment instrument it represents is specified by the PaymentSourceType +// of payment instrument it represents is specified by the Type func (s *PaymentSource) MarshalJSON() ([]byte, error) { var target interface{} switch s.Type { - case PaymentSourceBitcoinReceiver: + case PaymentSourceTypeBitcoinReceiver: target = struct { *BitcoinReceiver Type PaymentSourceType `json:"object"` @@ -168,7 +154,7 @@ func (s *PaymentSource) MarshalJSON() ([]byte, error) { BitcoinReceiver: s.BitcoinReceiver, Type: s.Type, } - case PaymentSourceCard: + case PaymentSourceTypeCard: var customerID *string if s.Card.Customer != nil { customerID = &s.Card.Customer.ID @@ -183,7 +169,7 @@ func (s *PaymentSource) MarshalJSON() ([]byte, error) { Customer: customerID, Type: s.Type, } - case PaymentSourceAccount: + case PaymentSourceTypeAccount: target = struct { ID string `json:"id"` Type PaymentSourceType `json:"object"` @@ -191,7 +177,7 @@ func (s *PaymentSource) MarshalJSON() ([]byte, error) { ID: s.ID, Type: s.Type, } - case PaymentSourceBankAccount: + case PaymentSourceTypeBankAccount: var customerID *string if s.BankAccount.Customer != nil { customerID = &s.BankAccount.Customer.ID diff --git a/paymentsource_test.go b/paymentsource_test.go index 7fefedc541..28e5bfe12d 100644 --- a/paymentsource_test.go +++ b/paymentsource_test.go @@ -32,7 +32,7 @@ func TestPaymentSource_MarshalJSON(t *testing.T) { id := "card_123" name := "alice cooper" paymentSource := &PaymentSource{ - Type: PaymentSourceCard, + Type: PaymentSourceTypeCard, ID: id, Card: &Card{ ID: id, @@ -58,7 +58,7 @@ func TestPaymentSource_MarshalJSON(t *testing.T) { id := "ba_123" name := "big bank" paymentSource := &PaymentSource{ - Type: PaymentSourceBankAccount, + Type: PaymentSourceTypeBankAccount, ID: id, BankAccount: &BankAccount{ ID: id, diff --git a/payout.go b/payout.go index 13b9855cda..276f7b5ecb 100644 --- a/payout.go +++ b/payout.go @@ -5,42 +5,61 @@ import "encoding/json" // PayoutDestinationType consts represent valid payout destinations. type PayoutDestinationType string +const ( + PayoutDestinationTypeBankAccount PayoutDestinationType = "bank_account" + PayoutDestinationTypeCard PayoutDestinationType = "card" +) + // PayoutFailureCode is the list of allowed values for the payout's failure code. -// Allowed values are "insufficient_funds", "account_closed", "no_account", -// "invalid_account_number", "debit_not_authorized", "bank_ownership_changed", -// "account_frozen", "could_not_process", "bank_account_restricted", "invalid_currency". type PayoutFailureCode string +const ( + PayoutFailureCodeAccountClosed PayoutFailureCode = "account_closed" + PayoutFailureCodeAccountFrozen PayoutFailureCode = "account_frozen" + PayoutFailureCodeBankAccountRestricted PayoutFailureCode = "bank_account_restricted" + PayoutFailureCodeBankOwnershipChanged PayoutFailureCode = "bank_ownership_changed" + PayoutFailureCodeCouldNotProcess PayoutFailureCode = "could_not_process" + PayoutFailureCodeDebitNotAuthorized PayoutFailureCode = "debit_not_authorized" + PayoutFailureCodeInsufficientFunds PayoutFailureCode = "insufficient_funds" + PayoutFailureCodeInvalidAccountNumber PayoutFailureCode = "invalid_account_number" + PayoutFailureCodeInvalidCurrency PayoutFailureCode = "invalid_currency" + PayoutFailureCodeNoAccount PayoutFailureCode = "no_account" +) + // PayoutSourceType is the list of allowed values for the payout's source_type field. -// Allowed values are "alipay_account", bank_account", "bitcoin_receiver", "card". type PayoutSourceType string +const ( + PayoutSourceTypeAlipayAccount PayoutSourceType = "alipay_account" + PayoutSourceTypeBankAccount PayoutSourceType = "bank_account" + PayoutSourceTypeBitcoinReceiver PayoutSourceType = "bitcoin_receiver" + PayoutSourceTypeCard PayoutSourceType = "card" +) + // PayoutStatus is the list of allowed values for the payout's status. -// Allowed values are "paid", "pending", "in_transit", "failed", "canceled". type PayoutStatus string +const ( + PayoutStatusCanceled PayoutStatus = "canceled" + PayoutStatusFailed PayoutStatus = "failed" + PayoutStatusInTransit PayoutStatus = "in_transit" + PayoutStatusPaid PayoutStatus = "paid" + PayoutStatusPending PayoutStatus = "pending" +) + // PayoutType is the list of allowed values for the payout's type. -// Allowed values are "bank_account" or "card". type PayoutType string const ( - // PayoutDestinationBankAccount is a constant representing a payout destination - // which is a bank account. - PayoutDestinationBankAccount PayoutDestinationType = "bank_account" - - // PayoutDestinationCard is a constant representing a payout destination - // which is a card. - PayoutDestinationCard PayoutDestinationType = "card" + PayoutTypeBank PayoutType = "bank_account" + PayoutTypeCard PayoutType = "card" ) // PayoutMethodType represents the type of payout type PayoutMethodType string const ( - // PayoutMethodInstant is a constant representing an instant payout - PayoutMethodInstant PayoutMethodType = "instant" - - // PayoutMethodStandard is a constant representing a standard payout + PayoutMethodInstant PayoutMethodType = "instant" PayoutMethodStandard PayoutMethodType = "standard" ) @@ -89,7 +108,7 @@ type Payout struct { Card *Card `json:"card"` Created int64 `json:"created"` Currency Currency `json:"currency"` - Destination PayoutDestination `json:"destination"` + Destination string `json:"destination"` FailureBalanceTransaction *BalanceTransaction `json:"failure_balance_transaction"` FailureCode PayoutFailureCode `json:"failure_code"` FailureMessage string `json:"failure_message"` @@ -137,9 +156,9 @@ func (d *PayoutDestination) UnmarshalJSON(data []byte) error { *d = PayoutDestination(dd) switch d.Type { - case PayoutDestinationBankAccount: + case PayoutDestinationTypeBankAccount: err = json.Unmarshal(data, &d.BankAccount) - case PayoutDestinationCard: + case PayoutDestinationTypeCard: err = json.Unmarshal(data, &d.Card) } diff --git a/payout/client.go b/payout/client.go index ea2bc46a58..c528be47e7 100644 --- a/payout/client.go +++ b/payout/client.go @@ -8,33 +8,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - Canceled stripe.PayoutStatus = "canceled" - Failed stripe.PayoutStatus = "failed" - Paid stripe.PayoutStatus = "paid" - Pending stripe.PayoutStatus = "pending" - Transit stripe.PayoutStatus = "in_transit" - - Bank stripe.PayoutType = "bank_account" - Card stripe.PayoutType = "card" - - SourceAlipay stripe.PayoutSourceType = "alipay_account" - SourceBank stripe.PayoutSourceType = "bank_account" - SourceBitcoin stripe.PayoutSourceType = "bitcoin_receiver" - SourceCard stripe.PayoutSourceType = "card" - - AccountClosed stripe.PayoutFailureCode = "account_closed" - AccountFrozen stripe.PayoutFailureCode = "account_frozen" - BankAccountRestrict stripe.PayoutFailureCode = "bank_account_restricted" - BankOwnerChanged stripe.PayoutFailureCode = "bank_ownership_changed" - CouldNotProcess stripe.PayoutFailureCode = "could_not_process" - DebitNotAuth stripe.PayoutFailureCode = "debit_not_authorized" - InsufficientFunds stripe.PayoutFailureCode = "insufficient_funds" - InvalidAccountNumber stripe.PayoutFailureCode = "invalid_account_number" - InvalidCurrency stripe.PayoutFailureCode = "invalid_currency" - NoAccount stripe.PayoutFailureCode = "no_account" -) - // Client is used to invoke /payouts APIs. type Client struct { B stripe.Backend diff --git a/plan.go b/plan.go index 1284aab1c7..be02f5fe2d 100644 --- a/plan.go +++ b/plan.go @@ -7,41 +7,44 @@ import ( ) // PlanInterval is the list of allowed values for a plan's interval. -// Allowed values are "day", "week", "month", "year". type PlanInterval string const ( - // PlanBillingSchemeTiered indicates that the price per single unit is tiered - // and can change with the total number of units. - PlanBillingSchemeTiered string = "tiered" - // PlanBillingSchemePerUnit indicates that each unit is billed at a fixed - // price. - PlanBillingSchemePerUnit string = "per_unit" + PlanIntervalDay PlanInterval = "day" + PlanIntervalWeek PlanInterval = "week" + PlanIntervalMonth PlanInterval = "month" + PlanIntervalYear PlanInterval = "year" ) +// PlanBillingScheme is the list of allowed values for a plan's billing scheme. +type PlanBillingScheme string + +const ( + PlanBillingSchemePerUnit PlanBillingScheme = "per_unit" + PlanBillingSchemeTiered PlanBillingScheme = "tiered" +) + +// PlanUsageType is the list of allowed values for a plan's usage type. +type PlanUsageType string + const ( - // PlanUsageTypeLicensed indicates that the set Quantity on a subscription item - // will be used to bill for a subscription. - PlanUsageTypeLicensed string = "licensed" - // PlanUsageTypeMetered indicates that usage records must be reported instead - // of setting a Quantity on a subscription item. - PlanUsageTypeMetered string = "metered" + PlanUsageTypeLicensed PlanUsageType = "licensed" + PlanUsageTypeMetered PlanUsageType = "metered" ) +// PlanTransformUsageRound is the list of allowed values for a plan's transform usage round logic. +type PlanTransformUsageRound string + const ( - // PlanTransformUsageModeRoundDown represents a bucket billing configuration: a partially - // filled bucket will count as an empty bucket. - PlanTransformUsageModeRoundDown string = "round_down" - // PlanTransformUsageModeRoundUp represents a bucket billing configuration: a partially - // filled bucket will count as a full bucket. - PlanTransformUsageModeRoundUp string = "round_up" + PlanTransformUsageRoundDown PlanTransformUsageRound = "down" + PlanTransformUsageRoundUp PlanTransformUsageRound = "up" ) // Plan is the resource representing a Stripe plan. // For more details see https://stripe.com/docs/api#plans. type Plan struct { Amount int64 `json:"amount"` - BillingScheme string `json:"billing_scheme"` + BillingScheme PlanBillingScheme `json:"billing_scheme"` Created int64 `json:"created"` Currency Currency `json:"currency"` Deleted bool `json:"deleted"` @@ -56,7 +59,7 @@ type Plan struct { TiersMode string `json:"tiers_mode"` TransformUsage *PlanTransformUsage `json:"transform_usage"` TrialPeriodDays int64 `json:"trial_period_days"` - UsageType string `json:"usage_type"` + UsageType PlanUsageType `json:"usage_type"` } // PlanList is a list of plans as returned from a list endpoint. @@ -101,8 +104,8 @@ type PlanTier struct { // PlanTransformUsage represents the bucket billing configuration. type PlanTransformUsage struct { - DivideBy int64 `json:"bucket_size"` - Round string `json:"round"` + DivideBy int64 `json:"bucket_size"` + Round PlanTransformUsageRound `json:"round"` } // PlanTransformUsageParams represents the bucket billing configuration. diff --git a/plan/client.go b/plan/client.go index 409ce67200..8195a607a2 100644 --- a/plan/client.go +++ b/plan/client.go @@ -9,13 +9,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - Day stripe.PlanInterval = "day" - Week stripe.PlanInterval = "week" - Month stripe.PlanInterval = "month" - Year stripe.PlanInterval = "year" -) - // Client is used to invoke /plans APIs. type Client struct { B stripe.Backend diff --git a/plan/client_test.go b/plan/client_test.go index b4feb07bb2..39de697781 100644 --- a/plan/client_test.go +++ b/plan/client_test.go @@ -35,7 +35,7 @@ func TestPlanNew(t *testing.T) { Amount: stripe.Int64(1), Currency: stripe.String(string(currency.USD)), ID: stripe.String("sapphire-elite"), - Interval: stripe.String(string(Month)), + Interval: stripe.String(string(stripe.PlanIntervalMonth)), Product: &stripe.ProductParams{ ID: stripe.String("plan_id"), Name: stripe.String("Sapphire Elite"), @@ -52,7 +52,7 @@ func TestPlanNewWithProductID(t *testing.T) { Amount: stripe.Int64(1), Currency: stripe.String(string(currency.USD)), ID: stripe.String("sapphire-elite"), - Interval: stripe.String(string(Month)), + Interval: stripe.String(string(stripe.PlanIntervalMonth)), ProductID: stripe.String("prod_12345abc"), }) assert.Nil(t, err) diff --git a/product.go b/product.go index 3b9d1baff7..d5b65f348c 100644 --- a/product.go +++ b/product.go @@ -6,12 +6,7 @@ import "encoding/json" type ProductType string const ( - // ProductTypeGood is a constant that indicates a product represents a physical good, - // which may be sold through the Stripe Relay API. - ProductTypeGood ProductType = "good" - - // ProductTypeService is a constant that indicates a product represents a service - // which is provided on a recurring basis and is priced with a Stripe plan. + ProductTypeGood ProductType = "good" ProductTypeService ProductType = "service" ) diff --git a/recipient.go b/recipient.go index 8f7cc5eac3..5aecaa8f3d 100644 --- a/recipient.go +++ b/recipient.go @@ -7,9 +7,13 @@ import ( ) // RecipientType is the list of allowed values for the recipient's type. -// Allowed values are "individual", "corporation". type RecipientType string +const ( + RecipientTypeIndividual RecipientType = "individual" + RecipientTypeCorp RecipientType = "corporation" +) + // RecipientParams is the set of parameters that can be used when creating or updating recipients. // For more details see https://stripe.com/docs/api#create_recipient and https://stripe.com/docs/api#update_recipient. type RecipientParams struct { diff --git a/recipient/client.go b/recipient/client.go index 3ae66964ac..4d2f3b390e 100644 --- a/recipient/client.go +++ b/recipient/client.go @@ -6,11 +6,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - Individual stripe.RecipientType = "individual" - Corp stripe.RecipientType = "corporation" -) - // Client is used to invoke /recipients APIs. type Client struct { B stripe.Backend diff --git a/recipienttransfer.go b/recipienttransfer.go index 92efe24647..d76a11f84c 100644 --- a/recipienttransfer.go +++ b/recipienttransfer.go @@ -5,42 +5,60 @@ import "encoding/json" // RecipientTransferDestinationType consts represent valid recipient_transfer destinations. type RecipientTransferDestinationType string -// RecipientTransferFailCode is the list of allowed values for the recipient_transfer's failure code. -// Allowed values are "insufficient_funds", "account_closed", "no_account", -// "invalid_account_number", "debit_not_authorized", "bank_ownership_changed", -// "account_frozen", "could_not_process", "bank_account_restricted", "invalid_currency". -type RecipientTransferFailCode string +const ( + RecipientTransferDestinationBankAccount RecipientTransferDestinationType = "bank_account" + RecipientTransferDestinationCard RecipientTransferDestinationType = "card" +) + +// RecipientTransferFailureCode is the list of allowed values for the recipient_transfer's failure code. +type RecipientTransferFailureCode string + +const ( + RecipientTransferFailureCodeAccountClosed RecipientTransferFailureCode = "account_closed" + RecipientTransferFailureCodeAccountFrozen RecipientTransferFailureCode = "account_frozen" + RecipientTransferFailureCodeBankAccountRestricted RecipientTransferFailureCode = "bank_account_restricted" + RecipientTransferFailureCodeBankOwnershipChanged RecipientTransferFailureCode = "bank_ownership_changed" + RecipientTransferFailureCodeDebitNotAuthorized RecipientTransferFailureCode = "debit_not_authorized" + RecipientTransferFailureCodeCouldNotProcess RecipientTransferFailureCode = "could_not_process" + RecipientTransferFailureCodeInsufficientFunds RecipientTransferFailureCode = "insufficient_funds" + RecipientTransferFailureCodeInvalidAccountNumber RecipientTransferFailureCode = "invalid_account_number" + RecipientTransferFailureCodeInvalidCurrency RecipientTransferFailureCode = "invalid_currency" + RecipientTransferFailureCodeNoAccount RecipientTransferFailureCode = "no_account" +) // RecipientTransferSourceType is the list of allowed values for the recipient_transfer's source_type field. -// Allowed values are "alipay_account", bank_account", "bitcoin_receiver", "card". type RecipientTransferSourceType string +const ( + RecipientTransferSourceTypeAlipayAccount RecipientTransferSourceType = "alipay_account" + RecipientTransferSourceTypeBankAccount RecipientTransferSourceType = "bank_account" + RecipientTransferSourceTypeBitcoinReceiver RecipientTransferSourceType = "bitcoin_receiver" + RecipientTransferSourceTypeCard RecipientTransferSourceType = "card" +) + // RecipientTransferStatus is the list of allowed values for the recipient_transfer's status. -// Allowed values are "paid", "pending", "in_transit", "failed". type RecipientTransferStatus string +const ( + RecipientTransferStatusFailed RecipientTransferStatus = "failed" + RecipientTransferStatusInTransit RecipientTransferStatus = "in_transit" + RecipientTransferStatusPaid RecipientTransferStatus = "paid" + RecipientTransferStatusPending RecipientTransferStatus = "pending" +) + // RecipientTransferType is the list of allowed values for the recipient_transfer's type. -// Allowed values are "bank_account" or "card". type RecipientTransferType string const ( - // RecipientTransferDestinationBankAccount is a constant representing a recipient_transfer destination - // which is a bank account. - RecipientTransferDestinationBankAccount RecipientTransferDestinationType = "bank_account" - - // RecipientTransferDestinationCard is a constant representing a recipient_transfer destination - // which is a card. - RecipientTransferDestinationCard RecipientTransferDestinationType = "card" + RecipientTransferTypeBank RecipientTransferType = "bank_account" + RecipientTransferTypeCard RecipientTransferType = "card" ) // RecipientTransferMethodType represents the type of recipient_transfer type RecipientTransferMethodType string const ( - // RecipientTransferMethodInstant is a constant representing an instant recipient_transfer - RecipientTransferMethodInstant RecipientTransferMethodType = "instant" - - // RecipientTransferMethodStandard is a constant representing a standard recipient_transfer + RecipientTransferMethodInstant RecipientTransferMethodType = "instant" RecipientTransferMethodStandard RecipientTransferMethodType = "standard" ) @@ -66,8 +84,8 @@ type RecipientTransfer struct { Currency Currency `json:"currency"` Date int64 `json:"date"` Description string `json:"description"` - Destination RecipientTransferDestination `json:"destination"` - FailureCode RecipientTransferFailCode `json:"failure_code"` + Destination string `json:"destination"` + FailureCode RecipientTransferFailureCode `json:"failure_code"` FailureMessage string `json:"failure_message"` ID string `json:"id"` Livemode bool `json:"livemode"` diff --git a/recipienttransfer/client.go b/recipienttransfer/client.go index 25a9e34333..e5b27c6e7a 100644 --- a/recipienttransfer/client.go +++ b/recipienttransfer/client.go @@ -1,35 +1,5 @@ // Package recipienttransfer provides the /recipient_transfers APIs package recipienttransfer -import ( - stripe "github.com/stripe/stripe-go" -) - -const ( - Failed stripe.RecipientTransferStatus = "failed" - Paid stripe.RecipientTransferStatus = "paid" - Pending stripe.RecipientTransferStatus = "pending" - Transit stripe.RecipientTransferStatus = "in_transit" - - Bank stripe.RecipientTransferType = "bank_account" - Card stripe.RecipientTransferType = "card" - - SourceAlipay stripe.RecipientTransferSourceType = "alipay_account" - SourceBank stripe.RecipientTransferSourceType = "bank_account" - SourceBitcoin stripe.RecipientTransferSourceType = "bitcoin_receiver" - SourceCard stripe.RecipientTransferSourceType = "card" - - AccountClosed stripe.RecipientTransferFailCode = "account_closed" - AccountFrozen stripe.RecipientTransferFailCode = "account_frozen" - BankAccountRestrict stripe.RecipientTransferFailCode = "bank_account_restricted" - BankOwnerChanged stripe.RecipientTransferFailCode = "bank_ownership_changed" - DebitNotAuth stripe.RecipientTransferFailCode = "debit_not_authorized" - CouldNotProcess stripe.RecipientTransferFailCode = "could_not_process" - InsufficientFunds stripe.RecipientTransferFailCode = "insufficient_funds" - InvalidAccountNumber stripe.RecipientTransferFailCode = "invalid_account_number" - InvalidCurrency stripe.RecipientTransferFailCode = "invalid_currency" - NoAccount stripe.RecipientTransferFailCode = "no_account" -) - // This object can only be returned/expanded on Balance Transactions // The API doesn't support retrieve/update/list for those. diff --git a/refund.go b/refund.go index 263a3e9ca2..97f2f96f11 100644 --- a/refund.go +++ b/refund.go @@ -2,15 +2,25 @@ package stripe import "encoding/json" -// RefundReason is, if set, the reason the refund is being made--allowed values -// are "fraudulent", "duplicate", and "requested_by_customer". +// RefundReason is, if set, the reason the refund is being made type RefundReason string +const ( + RefundReasonDuplicate RefundReason = "duplicate" + RefundReasonFraudulent RefundReason = "fraudulent" + RefundReasonRequestedByCustomer RefundReason = "requested_by_customer" +) + // RefundStatus is the status of the refund. -// For credit card refunds, this will always be "succeeded". -// For other types of refunds, it can be "pending", "succeeded", "failed", or "cancelled". type RefundStatus string +const ( + RefundStatusCanceled RefundStatus = "canceled" + RefundStatusFailed RefundStatus = "failed" + RefundStatusPending RefundStatus = "pending" + RefundStatusSucceeded RefundStatus = "succeeded" +) + // RefundParams is the set of parameters that can be used when refunding a charge. // For more details see https://stripe.com/docs/api#refund. type RefundParams struct { diff --git a/refund/client.go b/refund/client.go index b145ba1633..cb0bf3c39a 100644 --- a/refund/client.go +++ b/refund/client.go @@ -6,12 +6,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - RefundFraudulent stripe.RefundReason = "fraudulent" - RefundDuplicate stripe.RefundReason = "duplicate" - RefundRequestedByCustomer stripe.RefundReason = "requested_by_customer" -) - // Client is used to invoke /refunds APIs. type Client struct { B stripe.Backend diff --git a/refund/client_test.go b/refund/client_test.go index 7e5c3e4dcb..8a5f5c88a6 100644 --- a/refund/client_test.go +++ b/refund/client_test.go @@ -26,7 +26,7 @@ func TestRefundList(t *testing.T) { func TestRefundNew(t *testing.T) { refund, err := New(&stripe.RefundParams{ Charge: stripe.String("ch_123"), - Reason: stripe.String(string(RefundDuplicate)), + Reason: stripe.String(string(stripe.RefundReasonDuplicate)), }) assert.Nil(t, err) assert.NotNil(t, refund) diff --git a/review.go b/review.go index 8fd5c3c8e6..bcc84eb769 100644 --- a/review.go +++ b/review.go @@ -2,27 +2,25 @@ package stripe import "encoding/json" -// Reason describes the reason why the review is open or closed. -// Allowed values are "rule", "manual", "approved", "refunded", -// "refunded_as_fraud", "disputed". -type ReasonType string +// ReviewReasonType describes the reason why the review is open or closed. +type ReviewReasonType string const ( - ReasonApproved ReasonType = "approved" - ReasonDisputed ReasonType = "disputed" - ReasonManual ReasonType = "manual" - ReasonRefunded ReasonType = "refunded" - ReasonRefundedAsFraud ReasonType = "refunded_as_fraud" - ReasonRule ReasonType = "rule" + ReviewReasonApproved ReviewReasonType = "approved" + ReviewReasonDisputed ReviewReasonType = "disputed" + ReviewReasonManual ReviewReasonType = "manual" + ReviewReasonRefunded ReviewReasonType = "refunded" + ReviewReasonRefundedAsFraud ReviewReasonType = "refunded_as_fraud" + ReviewReasonRule ReviewReasonType = "rule" ) type Review struct { - Charge *Charge `json:"charge"` - Created int64 `json:"created"` - ID string `json:"id"` - Livemode bool `json:"livemode"` - Open bool `json:"open"` - Reason ReasonType `json:"reason"` + Charge *Charge `json:"charge"` + Created int64 `json:"created"` + ID string `json:"id"` + Livemode bool `json:"livemode"` + Open bool `json:"open"` + Reason ReviewReasonType `json:"reason"` } func (r *Review) UnmarshalJSON(data []byte) error { diff --git a/sku.go b/sku.go index fb19f125f4..b2d1f62018 100644 --- a/sku.go +++ b/sku.go @@ -2,6 +2,24 @@ package stripe import "encoding/json" +// SKUInventoryType describe's the possible value for inventory type +type SKUInventoryType string + +const ( + SKUInventoryTypeBucket SKUInventoryType = "bucket" + SKUInventoryTypeFinite SKUInventoryType = "finite" + SKUInventoryTypeInfinite SKUInventoryType = "infinite" +) + +// SKUInventoryValue describe's the possible value for inventory value +type SKUInventoryValue string + +const ( + SKUInventoryValueInStock SKUInventoryValue = "in_stock" + SKUInventoryValueLimited SKUInventoryValue = "limited" + SKUInventoryValueOutOfStock SKUInventoryValue = "out_of_stock" +) + type InventoryParams struct { Quantity *int64 `form:"quantity"` Type *string `form:"type"` @@ -23,9 +41,9 @@ type SKUParams struct { } type Inventory struct { - Quantity int64 `json:"quantity"` - Type string `json:"type"` - Value string `json:"value"` + Quantity int64 `json:"quantity"` + Type SKUInventoryType `json:"type"` + Value SKUInventoryValue `json:"value"` } type SKU struct { diff --git a/sku/client_test.go b/sku/client_test.go index 1e75b546d6..c81734da1d 100644 --- a/sku/client_test.go +++ b/sku/client_test.go @@ -37,8 +37,8 @@ func TestSKUNew(t *testing.T) { Price: stripe.Int64(499), Currency: stripe.String(string(currency.USD)), Inventory: &stripe.InventoryParams{ - Type: stripe.String("bucket"), - Value: stripe.String("limited"), + Type: stripe.String(string(stripe.SKUInventoryTypeBucket)), + Value: stripe.String(string(stripe.SKUInventoryValueLimited)), }, Product: stripe.String("prod_123"), Image: stripe.String("http://example.com/foo.png"), @@ -50,8 +50,8 @@ func TestSKUNew(t *testing.T) { func TestSKUUpdate(t *testing.T) { sku, err := Update("sku_123", &stripe.SKUParams{ Inventory: &stripe.InventoryParams{ - Type: stripe.String("bucket"), - Value: stripe.String("in_stock"), + Type: stripe.String(string(stripe.SKUInventoryTypeBucket)), + Value: stripe.String(string(stripe.SKUInventoryValueInStock)), }, }) assert.Nil(t, err) diff --git a/source.go b/source.go index 72c0631fd9..8ab2206edb 100644 --- a/source.go +++ b/source.go @@ -6,62 +6,86 @@ import ( "github.com/stripe/stripe-go/form" ) -// SourceStatus represents the possible statuses of a source object. -type SourceStatus string +// SourceCodeVerificationFlowStatus represents the possible statuses of a code verification flow. +type SourceCodeVerificationFlowStatus string const ( - // SourceStatusCanceled we canceled the source along with any side-effect - // it had (returned funds to customers if any were sent). - SourceStatusCanceled SourceStatus = "canceled" + SourceCodeVerificationFlowStatusFailed SourceCodeVerificationFlowStatus = "failed" + SourceCodeVerificationFlowStatusPending SourceCodeVerificationFlowStatus = "pending" + SourceCodeVerificationFlowStatusSucceeded SourceCodeVerificationFlowStatus = "succeeded" +) - // SourceStatusChargeable the source is ready to be charged (once if usage - // is `single_use`, repeatedly otherwise). - SourceStatusChargeable SourceStatus = "chargeable" +// SourceFlow represents the possible flows of a source object. +type SourceFlow string - // SourceStatusConsumed the source is `single_use` usage and has been - // charged already. - SourceStatusConsumed SourceStatus = "consumed" +const ( + SourceFlowCodeVerification SourceFlow = "code_verification" + SourceFlowNone SourceFlow = "none" + SourceFlowReceiver SourceFlow = "receiver" + SourceFlowRedirect SourceFlow = "redirect" +) - // SourceStatusFailed the source is no longer usable. - SourceStatusFailed SourceStatus = "failed" +// SourceMandateAcceptanceStatus represents the possible failure reasons of a redirect flow. +type SourceMandateAcceptanceStatus string - // SourceStatusPending the source is freshly created and not yet - // chargeable. The flow should indicate how to authenticate it with your - // customer. - SourceStatusPending SourceStatus = "pending" +const ( + SourceMandateAcceptanceStatusAccepted SourceMandateAcceptanceStatus = "accepted" + SourceMandateAcceptanceStatusRefused SourceMandateAcceptanceStatus = "refused" ) -// SourceFlow represents the possible flows of a source object. -type SourceFlow string +// SourceRedirectFlowFailureReason represents the possible failure reasons of a redirect flow. +type SourceRedirectFlowFailureReason string + +const ( + SourceRedirectFlowFailureReasonDeclined SourceRedirectFlowFailureReason = "declined" + SourceRedirectFlowFailureReasonProcessingError SourceRedirectFlowFailureReason = "processing_error" + SourceRedirectFlowFailureReasonUserAbort SourceRedirectFlowFailureReason = "user_abort" +) + +// SourceRedirectFlowStatus represents the possible statuses of a redirect flow. +type SourceRedirectFlowStatus string const ( - // FlowCodeVerification a verification code should be communicated by the - // customer to authenticate the source. - FlowCodeVerification SourceFlow = "code_verification" + SourceRedirectFlowStatusFailed SourceRedirectFlowStatus = "failed" + SourceRedirectFlowStatusNotRequired SourceRedirectFlowStatus = "not_required" + SourceRedirectFlowStatusPending SourceRedirectFlowStatus = "pending" + SourceRedirectFlowStatusSucceeded SourceRedirectFlowStatus = "succeeded" +) - // FlowNone no particular authentication is involved the source should - // become chargeable directly or asyncrhonously. - FlowNone SourceFlow = "none" +// SourceRefundAttributesMethod are the possible method to retrieve a receiver's refund attributes. +type SourceRefundAttributesMethod string - // FlowReceiver a receiver address should be communicated to the customer - // to push funds to it. - FlowReceiver SourceFlow = "receiver" +const ( + SourceRefundAttributesMethodEmail SourceRefundAttributesMethod = "email" + SourceRefundAttributesMethodManual SourceRefundAttributesMethod = "manual" +) + +// SourceRefundAttributesStatus are the possible status of a receiver's refund attributes. +type SourceRefundAttributesStatus string - // FlowRedirect a redirect is required to authenticate the source. - FlowRedirect SourceFlow = "redirect" +const ( + SourceRefundAttributesStatusAvailable SourceRefundAttributesStatus = "available" + SourceRefundAttributesStatusMissing SourceRefundAttributesStatus = "missing" + SourceRefundAttributesStatusRequested SourceRefundAttributesStatus = "requested" +) + +// SourceStatus represents the possible statuses of a source object. +type SourceStatus string + +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 const ( - // UsageReusable the source can be charged multiple times for arbitrary - // amounts. - UsageReusable SourceUsage = "reusable" - - // UsageSingleUse the source can only be charged once for the specified - // amount and currency. - UsageSingleUse SourceUsage = "single_use" + SourceUsageReusable SourceUsage = "reusable" + SourceUsageSingleUse SourceUsage = "single_use" ) type SourceOwnerParams struct { @@ -109,91 +133,35 @@ type SourceOwner struct { VerifiedPhone string `json:"verified_phone"` } -// RedirectFlowFailureReason represents the possible failure reasons of a redirect flow. -type RedirectFlowFailureReason string - -const ( - RedirectFlowFailureReasonDeclined RedirectFlowFailureReason = "declined" - RedirectFlowFailureReasonProcessingError RedirectFlowFailureReason = "processing_error" - RedirectFlowFailureReasonUserAbort RedirectFlowFailureReason = "user_abort" -) - -// RedirectFlowStatus represents the possible statuses of a redirect flow. -type RedirectFlowStatus string - -const ( - RedirectFlowStatusFailed RedirectFlowStatus = "failed" - RedirectFlowStatusNotRequired RedirectFlowStatus = "not_required" - RedirectFlowStatusPending RedirectFlowStatus = "pending" - RedirectFlowStatusSucceeded RedirectFlowStatus = "succeeded" -) - // ReceiverFlow informs of the state of a redirect authentication flow. type RedirectFlow struct { - FailureReason RedirectFlowFailureReason `json:"failure_reason"` - ReturnURL string `json:"return_url"` - Status RedirectFlowStatus `json:"status"` - URL string `json:"url"` + FailureReason SourceRedirectFlowFailureReason `json:"failure_reason"` + ReturnURL string `json:"return_url"` + Status SourceRedirectFlowStatus `json:"status"` + URL string `json:"url"` } -// RefundAttributesStatus are the possible status of a receiver's refund -// attributes. -type RefundAttributesStatus string - -const ( - // RefundAttributesAvailable the refund attributes are available - RefundAttributesAvailable RefundAttributesStatus = "available" - - // RefundAttributesMissing the refund attributes are missing - RefundAttributesMissing RefundAttributesStatus = "missing" - - // RefundAttributesRequested the refund attributes have been requested - RefundAttributesRequested RefundAttributesStatus = "requested" -) - -// RefundAttributesMethod are the possible method to retrieve a receiver's -// refund attributes. -type RefundAttributesMethod string - -const ( - // RefundAttributesEmail the refund attributes are automatically collected over email - RefundAttributesEmail RefundAttributesMethod = "email" - - // RefundAttributesManual the refund attributes should be collected by the user - RefundAttributesManual RefundAttributesMethod = "manual" -) - // 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 RefundAttributesMethod `json:"refund_attributes_method"` - RefundAttributesStatus RefundAttributesStatus `json:"refund_attributes_status"` + 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"` } -// CodeVerificationFlowStatus represents the possible statuses of a code verification -// flow. -type CodeVerificationFlowStatus string - -const ( - CodeVerificationFlowStatusFailed CodeVerificationFlowStatus = "failed" - CodeVerificationFlowStatusPending CodeVerificationFlowStatus = "pending" - CodeVerificationFlowStatusSucceeded CodeVerificationFlowStatus = "succeeded" -) - // CodeVerificationFlow informs of the state of a verification authentication flow. type CodeVerificationFlow struct { - AttemptsRemaining int64 `json:"attempts_remaining"` - Status CodeVerificationFlowStatus `json:"status"` + AttemptsRemaining int64 `json:"attempts_remaining"` + Status SourceCodeVerificationFlowStatus `json:"status"` } type SourceMandateAcceptance struct { - Date string `json:"date"` - IP string `json:"ip"` - Status string `json:"status"` - UserAgent string `json:"user_agent"` + Date string `json:"date"` + IP string `json:"ip"` + Status SourceMandateAcceptanceStatus `json:"status"` + UserAgent string `json:"user_agent"` } type SourceMandate struct { diff --git a/source/client_test.go b/source/client_test.go index e18ec65963..5425852b61 100644 --- a/source/client_test.go +++ b/source/client_test.go @@ -20,7 +20,7 @@ func TestSourceNew(t *testing.T) { Type: stripe.String("bitcoin"), Amount: stripe.Int64(1000), Currency: stripe.String(string(currency.USD)), - Flow: stripe.String(string(stripe.FlowReceiver)), + Flow: stripe.String(string(stripe.SourceFlowReceiver)), Owner: &stripe.SourceOwnerParams{ Email: stripe.String("jenny.rosen@example.com"), }, @@ -52,7 +52,7 @@ func TestSourceSharing(t *testing.T) { Type: stripe.String("card"), Customer: stripe.String("cus_123"), OriginalSource: stripe.String("src_123"), - Usage: stripe.String(string(stripe.UsageReusable)), + Usage: stripe.String(string(stripe.SourceUsageReusable)), } params.SetStripeAccount("acct_123") source, err := New(params) diff --git a/sub.go b/sub.go index a53731a2dc..6ab04185b5 100644 --- a/sub.go +++ b/sub.go @@ -7,13 +7,25 @@ import ( ) // SubscriptionStatus is the list of allowed values for the subscription's status. -// Allowed values are "trialing", "active", "past_due", "canceled", "unpaid", "all". type SubscriptionStatus string +const ( + SubscriptionStatusActive SubscriptionStatus = "active" + SubscriptionStatusAll SubscriptionStatus = "all" + SubscriptionStatusCanceled SubscriptionStatus = "canceled" + SubscriptionStatusPastDue SubscriptionStatus = "past_due" + SubscriptionStatusTrialing SubscriptionStatus = "trialing" + SubscriptionStatusUnpaid SubscriptionStatus = "unpaid" +) + // SubscriptionBilling is the type of billing method for this subscription's invoices. -// Currently supported values are "send_invoice" and "charge_automatically". type SubscriptionBilling string +const ( + SubscriptionBillingChargeAutomatically SubscriptionBilling = "charge_automatically" + SubscriptionBillingSendInvoice SubscriptionBilling = "send_invoice" +) + // SubscriptionParams is the set of parameters that can be used when creating or updating a subscription. // For more details see https://stripe.com/docs/api#create_subscription and https://stripe.com/docs/api#update_subscription. type SubscriptionParams struct { @@ -77,12 +89,12 @@ type SubscriptionItemsParams struct { // For more details see https://stripe.com/docs/api#list_subscriptions. type SubscriptionListParams struct { ListParams `form:"*"` - Billing SubscriptionBilling `form:"billing"` - Created int64 `form:"created"` - CreatedRange *RangeQueryParams `form:"created"` - Customer string `form:"customer"` - Plan string `form:"plan"` - Status SubscriptionStatus `form:"status"` + Billing string `form:"billing"` + Created int64 `form:"created"` + CreatedRange *RangeQueryParams `form:"created"` + Customer string `form:"customer"` + Plan string `form:"plan"` + Status string `form:"status"` } // Subscription is the resource representing a Stripe subscription. diff --git a/sub/client.go b/sub/client.go index 800023346c..09d6ab3e8a 100644 --- a/sub/client.go +++ b/sub/client.go @@ -8,15 +8,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - Trialing stripe.SubscriptionStatus = "trialing" - Active stripe.SubscriptionStatus = "active" - PastDue stripe.SubscriptionStatus = "past_due" - Canceled stripe.SubscriptionStatus = "canceled" - Unpaid stripe.SubscriptionStatus = "unpaid" - All stripe.SubscriptionStatus = "all" -) - // Client is used to invoke /subscriptions APIs. type Client struct { B stripe.Backend diff --git a/sub/client_test.go b/sub/client_test.go index 414e11bf87..567be7cc2a 100644 --- a/sub/client_test.go +++ b/sub/client_test.go @@ -34,11 +34,14 @@ func TestSubscriptionNew(t *testing.T) { subscription, err := New(&stripe.SubscriptionParams{ Customer: stripe.String("cus_123"), Items: []*stripe.SubscriptionItemsParams{ - {Plan: "plan_123", Quantity: stripe.Int64(10)}, + { + Plan: stripe.String("plan_123"), + Quantity: stripe.Int64(10), + }, }, TaxPercent: stripe.Float64(20.0), BillingCycleAnchor: stripe.Int64(time.Now().AddDate(0, 0, 12).Unix()), - Billing: stripe.String("send_invoice"), + Billing: stripe.String(string(stripe.SubscriptionBillingSendInvoice)), DaysUntilDue: stripe.Int64(30), }) assert.Nil(t, err) diff --git a/token.go b/token.go index 90732051f8..900513dcf3 100644 --- a/token.go +++ b/token.go @@ -1,9 +1,15 @@ package stripe // TokenType is the list of allowed values for a token's type. -// Allowed values are "card", "bank_account". type TokenType string +const ( + TokenTypeAccount TokenType = "account" + TokenTypeCard TokenType = "card" + TokenTypeBankAccount TokenType = "bank_account" + TokenTypePII TokenType = "pii" +) + // TokenParams is the set of parameters that can be used when creating a token. // For more details see https://stripe.com/docs/api#create_card_token and https://stripe.com/docs/api#create_bank_account_token. type TokenParams struct { diff --git a/token/client.go b/token/client.go index a85eafd3d0..36011cf750 100644 --- a/token/client.go +++ b/token/client.go @@ -6,12 +6,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - Card stripe.TokenType = "card" - Bank stripe.TokenType = "bank_account" - PII stripe.TokenType = "pii" -) - // Client is used to invoke /tokens APIs. type Client struct { B stripe.Backend diff --git a/transfer.go b/transfer.go index 3b287243f5..81c6e35891 100644 --- a/transfer.go +++ b/transfer.go @@ -3,9 +3,15 @@ package stripe import "encoding/json" // TransferSourceType is the list of allowed values for the transfer's source_type field. -// Allowed values are "alipay_account", bank_account", "bitcoin_receiver", "card". type TransferSourceType string +const ( + TransferSourceTypeAlipayAccount TransferSourceType = "alipay_account" + TransferSourceTypeBankAccount TransferSourceType = "bank_account" + TransferSourceTypeBitcoinReceiver TransferSourceType = "bitcoin_receiver" + TransferSourceTypeCard TransferSourceType = "card" +) + // TransferDestination describes the destination of a Transfer. // The Type should indicate which object is fleshed out // For more details see https://stripe.com/docs/api/go#transfer_object @@ -52,6 +58,7 @@ type Transfer struct { Reversals *ReversalList `json:"reversals"` Reversed bool `json:"reversed"` SourceTransaction *BalanceTransactionSource `json:"source_transaction"` + SourceType TransferSourceType `json:"source_type"` TransferGroup string `json:"transfer_group"` } diff --git a/transfer/client.go b/transfer/client.go index 259be7a88c..dfacdfb2cc 100644 --- a/transfer/client.go +++ b/transfer/client.go @@ -6,13 +6,6 @@ import ( "github.com/stripe/stripe-go/form" ) -const ( - SourceAlipay stripe.TransferSourceType = "alipay_account" - SourceBank stripe.TransferSourceType = "bank_account" - SourceBitcoin stripe.TransferSourceType = "bitcoin_receiver" - SourceCard stripe.TransferSourceType = "card" -) - // Client is used to invoke /transfers APIs. type Client struct { B stripe.Backend diff --git a/transfer/client_test.go b/transfer/client_test.go index aa1226b26e..1bff282a2c 100644 --- a/transfer/client_test.go +++ b/transfer/client_test.go @@ -30,7 +30,7 @@ func TestTransferNew(t *testing.T) { Currency: stripe.String(string(currency.USD)), Destination: stripe.String("acct_123"), SourceTransaction: stripe.String("ch_123"), - SourceType: stripe.String(string(SourceCard)), + SourceType: stripe.String(string(stripe.TransferSourceTypeCard)), }) assert.Nil(t, err) assert.NotNil(t, transfer) diff --git a/usage_record.go b/usage_record.go index 57c6c5e310..013a1a48a1 100644 --- a/usage_record.go +++ b/usage_record.go @@ -1,14 +1,8 @@ package stripe const ( - // UsageRecordParamsActionIncrement indicates that if two usage records conflict - // (i.E. are reported a the same timestamp), their Quantity will be summed - UsageRecordParamsActionIncrement string = "increment" - - // UsageRecordParamsActionSet indicates that if two usage records conflict - // (i.E. are reported a the same timestamp), the Quantity of the most recent - // usage record will overwrite any other quantity. - UsageRecordParamsActionSet string = "set" + UsageRecordActionIncrement string = "increment" + UsageRecordActionSet string = "set" ) // UsageRecord represents a usage record. diff --git a/usagerecord/client_test.go b/usagerecord/client_test.go index d112636ffb..9ed13fc9a1 100644 --- a/usagerecord/client_test.go +++ b/usagerecord/client_test.go @@ -14,7 +14,7 @@ func TestUsageRecordNew(t *testing.T) { usageRecord, err := New(&stripe.UsageRecordParams{ Quantity: stripe.Int64(123), Timestamp: stripe.Int64(now), - Action: stripe.String(stripe.UsageRecordParamsActionIncrement), + Action: stripe.String(stripe.UsageRecordActionIncrement), SubscriptionItem: stripe.String("si_123"), }) assert.Nil(t, err)