Ai
2 Star 0 Fork 0

mirrors_sourcegraph/stripe-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
card.go 8.54 KB
一键复制 编辑 原始数据 按行查看 历史
package stripe
import (
"encoding/json"
"strconv"
"github.com/stripe/stripe-go/form"
)
// CardBrand is the list of allowed values for the card's brand.
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.
type CardFunding 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
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.
//
// Note that while form annotations are used for tokenization and updates,
// cards have some unusual logic on creates that necessitates manual handling
// of all parameters. See AppendToAsCardSourceOrExternalAccount.
type CardParams struct {
Params `form:"*"`
Account *string `form:"-"`
AddressCity *string `form:"address_city"`
AddressCountry *string `form:"address_country"`
AddressLine1 *string `form:"address_line1"`
AddressLine2 *string `form:"address_line2"`
AddressState *string `form:"address_state"`
AddressZip *string `form:"address_zip"`
CVC *string `form:"cvc"`
Currency *string `form:"currency"`
Customer *string `form:"-"`
DefaultForCurrency *bool `form:"default_for_currency"`
ExpMonth *string `form:"exp_month"`
ExpYear *string `form:"exp_year"`
Name *string `form:"name"`
Number *string `form:"number"`
Recipient *string `form:"-"`
Token *string `form:"-"`
// ID is used when tokenizing a card for shared customers
ID string `form:"*"`
}
// AppendToAsCardSourceOrExternalAccount appends the given CardParams as either a
// card or external account.
//
// It may look like an AppendTo from the form package, but it's not, and is
// only used in the special case where we use `card.New`. It's needed because
// we have some weird encoding logic here that can't be handled by the form
// package (and it's special enough that it wouldn't be desirable to have it do
// so).
//
// This is not a pattern that we want to push forward, and this largely exists
// because the cards endpoint is a little unusual. There is one other resource
// like it, which is bank account.
func (c *CardParams) AppendToAsCardSourceOrExternalAccount(body *form.Values, keyParts []string) {
form.AppendToPrefixed(body, c.Params, keyParts)
if c.DefaultForCurrency != nil {
body.Add(form.FormatKey(append(keyParts, "default_for_currency")), strconv.FormatBool(BoolValue(c.DefaultForCurrency)))
}
if c.Token != nil {
if c.Account != nil {
body.Add(form.FormatKey(append(keyParts, "external_account")), StringValue(c.Token))
} else {
body.Add(form.FormatKey(append(keyParts, cardSource)), StringValue(c.Token))
}
}
if c.Number != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "object")), "card")
body.Add(form.FormatKey(append(keyParts, cardSource, "number")), StringValue(c.Number))
}
if c.CVC != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "cvc")), StringValue(c.CVC))
}
if c.Currency != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "currency")), StringValue(c.Currency))
}
if c.ExpMonth != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "exp_month")), StringValue(c.ExpMonth))
}
if c.ExpYear != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "exp_year")), StringValue(c.ExpYear))
}
if c.Name != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "name")), StringValue(c.Name))
}
if c.AddressCity != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "address_city")), StringValue(c.AddressCity))
}
if c.AddressCountry != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "address_country")), StringValue(c.AddressCountry))
}
if c.AddressLine1 != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "address_line1")), StringValue(c.AddressLine1))
}
if c.AddressLine2 != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "address_line2")), StringValue(c.AddressLine2))
}
if c.AddressState != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "address_state")), StringValue(c.AddressState))
}
if c.AddressZip != nil {
body.Add(form.FormatKey(append(keyParts, cardSource, "address_zip")), StringValue(c.AddressZip))
}
}
// CardListParams is the set of parameters that can be used when listing cards.
// For more details see https://stripe.com/docs/api#list_cards.
type CardListParams struct {
ListParams `form:"*"`
Account *string `form:"-"`
Customer *string `form:"-"`
Recipient *string `form:"-"`
}
// 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 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.
//
// Please note that this field is for internal use only and is not returned
// as part of standard API requests.
Description string `json:"description"`
DynamicLast4 string `json:"dynamic_last4"`
ExpMonth uint8 `json:"exp_month"`
ExpYear uint16 `json:"exp_year"`
Fingerprint string `json:"fingerprint"`
Funding CardFunding `json:"funding"`
ID string `json:"id"`
// IIN is the card's "Issuer Identification Number".
//
// Please note that this field is for internal use only and is not returned
// as part of standard API requests.
IIN string `json:"iin"`
// Issuer is a bank or financial institution that provides the card.
//
// Please note that this field is for internal use only and is not returned
// 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 CardTokenizationMethod `json:"tokenization_method"`
}
// CardList is a list object for cards.
type CardList struct {
ListMeta
Data []*Card `json:"data"`
}
// UnmarshalJSON handles deserialization of a Card.
// This custom unmarshaling is needed because the resulting
// property may be an id or the full struct if it was expanded.
func (c *Card) UnmarshalJSON(data []byte) error {
if id, ok := ParseID(data); ok {
c.ID = id
return nil
}
type card Card
var v card
if err := json.Unmarshal(data, &v); err != nil {
return err
}
*c = Card(v)
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_sourcegraph/stripe-go.git
git@gitee.com:mirrors_sourcegraph/stripe-go.git
mirrors_sourcegraph
stripe-go
stripe-go
master

搜索帮助