File Coverage

lib/Net/API/Stripe/Connect/ExternalAccount/Card.pm
Criterion Covered Total %
statement 19 84 22.6
branch n/a
condition n/a
subroutine 7 72 9.7
pod 59 65 90.7
total 85 221 38.4


line stmt bran cond sub pod time code
1             ##----------------------------------------------------------------------------
2             ## Stripe API - ~/lib/Net/API/Stripe/Connect/ExternalAccount/Card.pm
3             ## Version v0.203.0
4             ## Copyright(c) 2020 DEGUEST Pte. Ltd.
5             ## Author: Jacques Deguest <jack@deguest.jp>
6             ## Created 2019/11/02
7             ## Modified 2022/10/29
8             ## All rights reserved
9             ##
10             ## This program is free software; you can redistribute it and/or modify it
11             ## under the same terms as Perl itself.
12             ##----------------------------------------------------------------------------
13             ## https://stripe.com/docs/api/external_account_cards/object
14             package Net::API::Stripe::Connect::ExternalAccount::Card;
15             BEGIN
16             {
17 3     3   21481780 use strict;
  3         17  
  3         100  
18 3     3   16 use warnings;
  3         7  
  3         85  
19 3     3   16 use parent qw( Net::API::Stripe::Generic );
  3         11  
  3         17  
20 3     3   248 use vars qw( $VERSION );
  3         7  
  3         204  
21 3     3   64 our( $VERSION ) = 'v0.203.0';
22             };
23              
24 3     3   20 use strict;
  3         7  
  3         63  
25 3     3   14 use warnings;
  3         6  
  3         4227  
26              
27 0     0 1   sub id { return( shift->_set_get_scalar( 'id', @_ ) ); }
28              
29 0     0 1   sub object { return( shift->_set_get_scalar( 'object', @_ ) ); }
30              
31 0     0 1   sub account { return( shift->_set_get_scalar_or_object( 'account', 'Net::API::Stripe::Connect::Account', @_ ) ); }
32              
33 0     0 1   sub address { return( shift->_address_populate( @_ ) ); }
34              
35 0     0 1   sub address_city { return( shift->_set_get_scalar( 'address_city', @_ ) ); }
36              
37 0     0 1   sub address_country { return( shift->_set_get_scalar( 'address_country', @_ ) ); }
38              
39 0     0 1   sub address_line1 { return( shift->_set_get_scalar( 'address_line1', @_ ) ); }
40              
41 0     0 1   sub address_line1_check { return( shift->_set_get_scalar( 'address_line1_check', @_ ) ); }
42              
43 0     0 1   sub address_line2 { return( shift->_set_get_scalar( 'address_line2', @_ ) ); }
44              
45 0     0 1   sub address_state { return( shift->_set_get_scalar( 'address_state', @_ ) ); }
46              
47 0     0 1   sub address_zip { return( shift->_set_get_scalar( 'address_zip', @_ ) ); }
48              
49 0     0 1   sub address_zip_check { return( shift->_set_get_scalar( 'address_zip_check', @_ ) ); }
50              
51 0     0 1   sub amount_authorized { return( shift->_set_get_number( 'amount_authorized', @_ ) ); }
52              
53 0     0 1   sub available_payout_methods { return( shift->_set_get_array( 'available_payout_methods', @_ ) ); }
54              
55 0     0 0   sub bank_code { return( shift->_set_get_scalar( 'bank_code', @_ ) ); }
56              
57 0     0 0   sub branch_code { return( shift->_set_get_scalar( 'branch_code', @_ ) ); }
58              
59             # Card brand name, e.g. American Express, Diners Club, Discover, JCB, MasterCard, UnionPay, Visa, or Unknown
60              
61 0     0 1   sub brand { return( shift->_set_get_scalar( 'brand', @_ ) ); }
62              
63 0     0 1   sub capture_before { return( shift->_set_get_datetime( 'capture_before', @_ ) ); }
64              
65 0     0 0   sub capture_method { return( shift->_set_get_scalar( 'capture_method', @_ ) ); }
66              
67 0     0 1   sub cardholder_name { return( shift->_set_get_scalar( 'cardholder_name', @_ ) ); }
68              
69 0     0 1   sub checks { return( shift->_set_get_hash( 'checks', @_ ) ) };
70              
71 0     0 1   sub country { return( shift->_set_get_scalar( 'country', @_ ) ); }
72              
73 0     0 1   sub currency { return( shift->_set_get_scalar( 'currency', @_ ) ); }
74              
75 0     0 1   sub customer { return( shift->_set_get_scalar_or_object( 'customer', 'Net::API::Stripe::Customer', @_ ) ); }
76              
77 0     0 1   sub cvc { return( shift->_set_get_scalar( 'cvc', @_ ) ); }
78              
79 0     0 1   sub cvc_check { return( shift->_set_get_scalar( 'cvc_check', @_ ) ); }
80              
81 0     0 1   sub default_for_currency { return( shift->_set_get_scalar( 'default_for_currency', @_ ) ); }
82              
83 0     0 1   sub description { return( shift->_set_get_scalar( 'description', @_ ) ); }
84              
85 0     0 1   sub dynamic_last4 { return( shift->_set_get_scalar( 'dynamic_last4', @_ ) ); }
86              
87 0     0 1   sub emv_auth_data { return( shift->_set_get_scalar( 'emv_auth_data', @_ ) ); }
88              
89 0     0 1   sub exp_month { return( shift->_set_get_number( 'exp_month', @_ ) ); }
90              
91 0     0 1   sub exp_year { return( shift->_set_get_number( 'exp_year', @_ ) ); }
92              
93 0     0 1   sub fingerprint { return( shift->_set_get_scalar( 'fingerprint', @_ ) ); }
94              
95 0     0 1   sub funding { return( shift->_set_get_scalar( 'funding', @_ ) ); }
96              
97 0     0 1   sub generated_card { return( shift->_set_get_scalar( 'generated_card', @_ ) ); }
98              
99 0     0 1   sub generated_from { return( shift->_set_get_object( 'generated_from', 'Net::API::Stripe::Payment::GeneratedFrom', @_ ) ); }
100              
101 0     0 1   sub iin { return( shift->_set_get_scalar( 'iin', @_ ) ); }
102              
103 0     0 1   sub incremental_authorization_supported { return( shift->_set_get_boolean( 'incremental_authorization_supported', @_ ) ); }
104              
105 0     0 1   sub installments { return( shift->_set_get_object( 'installments', 'Net::API::Stripe::Payment::Installment', @_ ) ); }
106              
107 0     0 1   sub issuer { return( shift->_set_get_scalar( 'issuer', @_ ) ); }
108              
109 0     0 1   sub last4 { return( shift->_set_get_scalar( 'last4', @_ ) ); }
110              
111 0     0 1   sub mandate { return( shift->_set_get_scalar( 'mandate', @_ ) ); }
112              
113 0     0 1   sub mandate_options { return( shift->_set_get_object( 'mandate_options', 'Net::API::Stripe::Mandate::Options', @_ ) ); }
114              
115 0     0 1   sub metadata { return( shift->_set_get_hash( 'metadata', @_ ) ); }
116              
117             # Cardholder name
118              
119 0     0 1   sub name { return( shift->_set_get_scalar( 'name', @_ ) ); }
120              
121             # Preview features says Stripe API
122              
123 0     0 1   sub network { return( shift->_set_get_scalar( 'network', @_ ) ); }
124              
125             sub networks
126             {
127 0     0 1   return( shift->_set_get_class( 'networks',
128             {
129             available => { type => 'array_as_object' },
130             preferred => { type => 'scalar_as_object' },
131             }, @_ ) );
132             }
133              
134 0     0 1   sub overcapture_supported { return( shift->_set_get_boolean( 'overcapture_supported', @_ ) ); }
135              
136 0     0 1   sub preferred_locales { return( shift->_set_get_array( 'preferred_locales', @_ ) ); }
137              
138 0     0 1   sub read_method { return( shift->_set_get_scalar( 'read_method', @_ ) ); }
139              
140 0     0 1   sub receipt { return( shift->_set_get_class( 'receipt',
141             {
142             account_type => { type => 'scalar' },
143             application_cryptogram => { type => 'scalar' },
144             application_preferred_name => { type => 'scalar' },
145             authorization_code => { type => 'scalar' },
146             authorization_response_code => { type => 'scalar' },
147             cardholder_verification_method => { type => 'scalar' },
148             dedicated_file_name => { type => 'scalar' },
149             terminal_verification_results => { type => 'scalar' },
150             transaction_status_information => { type => 'scalar' },
151             }, @_ ) ); }
152              
153 0     0 1   sub recipient { return( shift->_set_get_scalar_or_object( 'recipient', 'Net::API::Stripe::Connect::Account', @_ ) ); }
154              
155 0     0 1   sub reference { return( shift->_set_get_scalar( 'reference', @_ ) ); }
156              
157 0     0 1   sub request_extended_authorization { return( shift->_set_get_boolean( 'request_extended_authorization', @_ ) ); }
158              
159 0     0 1   sub request_incremental_authorization_support { return( shift->_set_get_boolean( 'request_incremental_authorization_support', @_ ) ); }
160              
161 0     0 1   sub request_three_d_secure { return( shift->_set_get_scalar( 'request_three_d_secure', @_ ) ); }
162              
163 0     0 0   sub setup_future_usage { return( shift->_set_get_scalar( 'setup_future_usage', @_ ) ); }
164              
165 0     0 0   sub statement_descriptor_suffix_kana { return( shift->_set_get_scalar( 'statement_descriptor_suffix_kana', @_ ) ); }
166              
167 0     0 0   sub statement_descriptor_suffix_kanji { return( shift->_set_get_scalar( 'statement_descriptor_suffix_kanji', @_ ) ); }
168              
169 0     0 1   sub status { return( shift->_set_get_scalar( 'status', @_ ) ); }
170              
171 0     0 1   sub three_d_secure { return( shift->_set_get_class( 'three_d_secure',
172             {
173             authenticated => { type => 'boolean' },
174             authentication_flow => { type => 'scalar' },
175             result => { type => 'scalar' },
176             result_reason => { type => 'scalar' },
177             succeeded => { type => 'boolean' },
178             version => { type => 'scalar' },
179             }, @_ ) ); }
180              
181             # sub three_d_secure_usage { return( shift->_set_get_hash_as_object( 'three_d_secure_usage', 'Net::API::Stripe::Payment::3DUsage', @_ ) ); }
182              
183 0     0 1   sub three_d_secure_usage { return( shift->_set_get_class( 'three_d_secure_usage',
184             { supported => { type => "boolean" } }, @_ ) ); }
185              
186 0     0 1   sub tokenization_method { return( shift->_set_get_scalar( 'tokenization_method', @_ ) ); }
187              
188             ## sub wallet { return( shift->_set_get_hash_as_object( 'wallet', 'Net::API::Stripe::Payment::Wallet', @_ ) ); }
189              
190 0     0 1   sub url { return( shift->_set_get_uri( 'url', @_ ) ); }
191              
192 0     0 1   sub wallet { return( shift->_set_get_class( 'wallet',
193             {
194             amex_express_checkout => { type => "hash" },
195             apple_pay => { type => "hash" },
196             dynamic_last4 => { type => "scalar" },
197             google_pay => { type => "hash" },
198             masterpass => {
199             definition => {
200             billing_address => { package => "Net::API::Stripe::Address", type => "object" },
201             email => { type => "scalar" },
202             name => { type => "scalar" },
203             shipping_address => { package => "Net::API::Stripe::Address", type => "object" },
204             },
205             type => "class",
206             },
207             samsung_pay => { type => "hash" },
208             type => { type => "scalar" },
209             visa_checkout => {
210             definition => {
211             billing_address => { package => "Net::API::Stripe::Address", type => "object" },
212             email => { type => "scalar" },
213             name => { type => "scalar" },
214             shipping_address => { package => "Net::API::Stripe::Address", type => "object" },
215             },
216             type => "class",
217             },
218             }, @_ ) ); }
219              
220             1;
221              
222             __END__
223              
224             =encoding utf8
225              
226             =head1 NAME
227              
228             Net::API::Stripe::Connect::ExternalAccount::Card - A Stripe Card Account Object
229              
230             =head1 SYNOPSIS
231              
232             my $card = $stripe->card({
233             account => 'acct_fake123456789',
234             # Or you can also simply pass a Net::API::Stripe::Address object
235             # address => $address_object
236             address_line1 => '1-2-3 Kudan-Minami, Chiyoda-ku',
237             address_line2 => 'Big bldg. 12F',
238             address_city => 'Tokyo',
239             address_zip => '123-4567',
240             address_country => 'jp',
241             brand => 'visa',
242             country => 'jp',
243             currency => 'jpy',
244             customer => $customer_object,
245             cvc => 123,
246             # Boolean
247             default_for_currency => 1,
248             exp_month => 12,
249             exp_year => 2030,
250             funding => 'debit',
251             metadata => { transaction_id => 123, customer_id => 456 },
252             name => 'John Doe',
253             });
254              
255             See documentation in L<Net::API::Stripe> for example to make api calls to Stripe to create those objects. For example:
256              
257             my $stripe = Net::API::Stripe->new( conf_file => 'settings.json' ) | die( Net::API::Stripe->error );
258             my $stripe_card = $stripe->cards( create =>
259             {
260             account => 'acct_fake123456789',
261             external_account =>
262             {
263             object => 'card',
264             exp_month => 12,
265             exp_year => 2030,
266             number => '012345678',
267             },
268             default_for_currency => $stripe->true,
269             metadata => { transaction_id => 123, customer_id => 456 },
270             }) || die( $stripe->error );
271              
272             =head1 VERSION
273              
274             v0.203.0
275              
276             =head1 DESCRIPTION
277              
278             These External Accounts are transfer destinations on Account objects for Custom accounts (L<https://stripe.com/docs/connect/custom-accounts>). They can be bank accounts or debit cards.
279              
280             Bank accounts (L<https://stripe.com/docs/api#customer_bank_account_object>) and debit cards (L<https://stripe.com/docs/api#card_object>) can also be used as payment sources on regular charges, and are documented in the links above.
281              
282             =head1 CONSTRUCTOR
283              
284             =head2 new( %ARG )
285              
286             Creates a new L<Net::API::Stripe::Connect::ExternalAccount::Card> object.
287             It may also take an hash like arguments, that also are method of the same name.
288              
289             =head1 METHODS
290              
291             =head2 id string
292              
293             Unique identifier for the object.
294              
295             =head2 object string, value is "card"
296              
297             String representing the object’s type. Objects of the same type share the same value.
298              
299             =head2 account custom only string (expandable)
300              
301             The account this card belongs to. This attribute will not be in the card object if the card belongs to a customer or recipient instead.
302              
303             When expanded, this is a L<Net::API::Stripe::Connect::Account> object.
304              
305             =head2 address L<Net::API::Stripe::Address> object or hash
306              
307             This is a helper method. Provided with either a L<Net::API::Stripe::Address> object or a hash with same properties, this will assign all the address_* properties by calling its method.
308              
309             =head2 address_city string
310              
311             City/District/Suburb/Town/Village.
312              
313             =head2 address_country string
314              
315             Billing address country, if provided when creating card.
316              
317             =head2 address_line1 string
318              
319             Address line 1 (Street address/PO Box/Company name).
320              
321             =head2 address_line1_check string
322              
323             If address_line1 was provided, results of the check: pass, fail, unavailable, or unchecked.
324              
325             =head2 address_line2 string
326              
327             Address line 2 (Apartment/Suite/Unit/Building).
328              
329             =head2 address_state string
330              
331             State/County/Province/Region.
332              
333             =head2 address_zip string
334              
335             ZIP or postal code.
336              
337             =head2 address_zip_check string
338              
339             If address_zip was provided, results of the check: pass, fail, unavailable, or unchecked.
340              
341             =head2 amount_authorized integer
342              
343             The authorized amount
344              
345             =head2 available_payout_methods array
346              
347             A set of available payout methods for this card. Will be either ["standard"] or ["standard", "instant"]. Only values from this set should be passed as the method when creating a transfer.
348              
349             =head2 brand string
350              
351             Card brand. Can be American Express, Diners Club, Discover, JCB, MasterCard, UnionPay, Visa, or Unknown.
352              
353             =head2 capture_before timestamp
354              
355             When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured.
356              
357             =head2 cardholder_name string
358              
359             The cardholder name as read from the card, in L<ISO 7813|https://en.wikipedia.org/wiki/ISO/IEC_7813> format. May include alphanumeric characters, special characters and first/last name separator (C</>).
360              
361             =head2 checks
362              
363             =over 4
364              
365             =item I<address_line1_check> string
366              
367             If a address line1 was provided, results of the check, one of ‘pass’, ‘failed’, ‘unavailable’ or ‘unchecked’.
368              
369             =item I<address_postal_code_check> string
370              
371             If a address postal code was provided, results of the check, one of ‘pass’, ‘failed’, ‘unavailable’ or ‘unchecked’.
372              
373             =item I<cvc_check> string
374              
375             If a CVC was provided, results of the check, one of ‘pass’, ‘failed’, ‘unavailable’ or ‘unchecked’.
376              
377             =back
378              
379             =head2 country string
380              
381             Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you’ve collected.
382              
383             =head2 currency custom only currency
384              
385             Three-letter ISO code for currency. Only applicable on accounts (not customers or recipients). The card can be used as a transfer destination for funds in this currency.
386              
387             =head2 customer string (expandable)
388              
389             The customer that this card belongs to. This attribute will not be in the card object if the card belongs to an account or recipient instead.
390              
391             When expanded, this is a L<Net::API::Stripe::Customer> object.
392              
393             =head2 cvc string
394              
395             Card security code. Highly recommended to always include this value, but it's required only for accounts based in European countries.
396              
397             This is used when creating a card object on Stripe API. See here: L<https://stripe.com/docs/api/cards/create>
398              
399             =head2 cvc_check string
400              
401             If a CVC was provided, results of the check: pass, fail, unavailable, or unchecked.
402              
403             =head2 default_for_currency custom only boolean
404              
405             Whether this card is the default external account for its currency.
406              
407             =head2 description string
408              
409             A high-level description of the type of cards issued in this range
410              
411             =head2 dynamic_last4 string
412              
413             (For tokenized numbers only.) The last four digits of the device account number.
414              
415             =head2 emv_auth_data string
416              
417             Authorization response cryptogram.
418              
419             =head2 exp_month integer
420              
421             Two-digit number representing the card’s expiration month.
422              
423             =head2 exp_year integer
424              
425             Four-digit number representing the card’s expiration year.
426              
427             =head2 fingerprint string
428              
429             Uniquely identifies this particular card number. You can use this attribute to check whether two customers who’ve signed up with you are using the same card number, for example.
430              
431             =head2 funding string
432              
433             Card funding type. Can be credit, debit, prepaid, or unknown.
434              
435             =head2 generated_card string
436              
437             ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod.
438              
439             =head2 generated_from hash
440              
441             Details of the original PaymentMethod that created this object.
442              
443             =head2 iin string
444              
445             Issuer identification number of the card
446              
447             =head2 incremental_authorization_supported boolean
448              
449             Whether this L<PaymentIntent|https://stripe.com/docs/api/payment_intents> is eligible for incremental authorizations. Request support using L<requestI<incremental>authorization_support|https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support>.
450              
451             =head2 installments hash
452              
453             If present, this is a L<Net::API::Stripe::Payment::Installment> object. As of 2019-02-19, this is only used in Mexico though. See here for more information: L<https://stripe.com/docs/payments/installments>
454              
455             =head2 issuer string
456              
457             The name of the card's issuing bank
458              
459             =head2 last4 string
460              
461             The last four digits of the card.
462              
463             =head2 mandate string
464              
465             ID of the mandate used to make this payment.
466              
467             =head2 mandate_options
468              
469             Additional fields for Mandate creation
470              
471             This is just a property with an empty hash. There are a few instances of this on Stripe api documentation.
472              
473             =head2 metadata hash
474              
475             Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
476              
477             =head2 name string
478              
479             Cardholder name.
480              
481             =head2 network string preview feature
482              
483             Identifies which network this charge was processed on. Can be amex, diners, discover, interac, jcb, mastercard, unionpay, visa, or unknown.
484              
485             =head2 networks hash
486              
487             Contains information about card networks that can be used to process the payment.
488              
489             =over 4
490              
491             =item I<available> array containing strings
492              
493             All available networks for the card.
494              
495             =item I<preferred> string
496              
497             The preferred network for the card.
498              
499             =back
500              
501             =head2 overcapture_supported boolean
502              
503             Defines whether the authorized amount can be over-captured or not
504              
505             =head2 preferred_locales string_array
506              
507             EMV tag 5F2D. Preferred languages specified by the integrated circuit chip.
508              
509             =head2 read_method string
510              
511             How were card details read in this transaction. Can be contact_emv, contactless_emv, magnetic_stripe_fallback, magnetic_stripe_track2, or contactless_magstripe_mode
512              
513             =head2 receipt hash
514              
515             A collection of fields required to be displayed on receipts. Only required for EMV transactions.
516              
517             =over 4
518              
519             =item I<account_type> string
520              
521             The type of account being debited or credited
522              
523             =item I<application_cryptogram> string
524              
525             EMV tag 9F26, cryptogram generated by the integrated circuit chip.
526              
527             =item I<application_preferred_name> string
528              
529             Mnenomic of the Application Identifier.
530              
531             =item I<authorization_code> string
532              
533             Identifier for this transaction.
534              
535             =item I<authorization_response_code> string
536              
537             EMV tag 8A. A code returned by the card issuer.
538              
539             =item I<cardholder_verification_method> string
540              
541             How the cardholder verified ownership of the card.
542              
543             =item I<dedicated_file_name> string
544              
545             EMV tag 84. Similar to the application identifier stored on the integrated circuit chip.
546              
547             =item I<terminal_verification_results> string
548              
549             The outcome of a series of EMV functions performed by the card reader.
550              
551             =item I<transaction_status_information> string
552              
553             An indication of various EMV functions performed during the transaction.
554              
555             =back
556              
557             =head2 recipient string (expandable)
558              
559             The recipient that this card belongs to. This attribute will not be in the card object if the card belongs to a customer or account instead.
560              
561             Since 2017, Stripe recipients have been replaced by Stripe accounts: L<https://stripe.com/docs/connect/recipient-account-migrations>
562              
563             So this is a Stripe account id, or if expanded, a L<Net::API::Stripe::Connect::Account> object.
564              
565             =head2 reference string
566              
567             The unique reference of the mandate.
568              
569             =head2 request_extended_authorization
570              
571             Request ability to capture this payment beyond the standard L<authorization validity window|https://stripe.com/docs/terminal/features/extended-authorizations#authorization-validity>
572              
573             =head2 request_incremental_authorization_support
574              
575             Request ability to increment this PaymentIntent if the combination of MCC and card brand is eligible. Check L<incremental_authorization_supported|https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported> in the L<Confirm|https://stripe.com/docs/api/payment_intents/confirm> response to verify support.
576              
577             =head2 request_three_d_secure string
578              
579             We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and other requirements. However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Permitted values include: C<automatic> or C<any>. If not provided, defaults to C<automatic>. Read our guide on manually requesting 3D Secure for more information on how this configuration interacts with Radar and our SCA Engine.
580              
581             =head2 status string
582              
583             For external accounts, possible values are C<new> and C<errored>. If a transfer fails, the status is set to C<errored> and transfers are stopped until account details are updated.
584              
585             =head2 three_d_secure hash
586              
587             Populated if this transaction used 3D Secure authentication.
588              
589             This is an objectified hash reference, ie its key / value pairs can be accessed as virtual methods. It uses the virtal package L<Net::API::Stripe::Payment::3DSecure>
590              
591             =over 4
592              
593             =item I<authenticated> boolean
594              
595             Whether or not authentication was performed. 3D Secure will succeed without authentication when the card is not enrolled.
596              
597             =item I<authentication_flow> string
598              
599             For authenticated transactions: how the customer was authenticated by the issuing bank.
600              
601             =item I<result> string
602              
603             Indicates the outcome of 3D Secure authentication.
604              
605             =item I<result_reason> string
606              
607             Additional information about why 3D Secure succeeded or failed based on the C<result>.
608              
609             =item I<succeeded> boolean
610              
611             Whether or not 3D Secure succeeded.
612              
613             =item I<version> string
614              
615             The version of 3D Secure that was used for this payment.
616              
617             =back
618              
619             =head2 three_d_secure_usage hash
620              
621             Contains details on how this Card maybe be used for 3D Secure authentication.
622              
623             This is a virtual L<Net::API::Stripe::Payment::3DUsage> object ie whereby each key can be accessed as methods.
624              
625             =over 4
626              
627             =item I<supported> boolean
628              
629             Whether 3D Secure is supported on this card.
630              
631             =back
632              
633             =head2 tokenization_method string
634              
635             If the card number is tokenized, this is the method that was used. Can be apple_pay or google_pay.
636              
637             =head2 url string
638              
639             The URL of the mandate. This URL generally contains sensitive information about the customer and should be shared with them exclusively.
640              
641             =head2 wallet hash
642              
643             If this Card is part of a card wallet, this contains the details of the card wallet.
644              
645             It has the following properties:
646              
647             =over 4
648              
649             =item I<amex_express_checkout> hash
650              
651             If this is a C<amex_express_checkout> card wallet, this hash contains details about the wallet.
652              
653             =over 8
654              
655             =item I<amex_express_checkout>
656              
657             This is an empty hash.
658              
659             =back
660              
661             =item I<apple_pay> hash
662              
663             If this is a C<apple_pay> card wallet, this hash contains details about the wallet.
664              
665             =over 8
666              
667             =item I<apple_pay>
668              
669             This is an empty hash.
670              
671             =back
672              
673             =item I<dynamic_last4> string
674              
675             (For tokenized numbers only.) The last four digits of the device account number.
676              
677             =item I<google_pay> hash
678              
679             If this is a C<google_pay> card wallet, this hash contains details about the wallet.
680              
681             =over 8
682              
683             =item I<google_pay>
684              
685             This is an empty hash.
686              
687             =back
688              
689             =item I<masterpass> hash
690              
691             If this is a C<masterpass> card wallet, this hash contains details about the wallet.
692              
693             =over 8
694              
695             =item I<billing_address> hash
696              
697             Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
698              
699             When expanded, this is a L<Net::API::Stripe::Address> object.
700              
701             =item I<email> string
702              
703             Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
704              
705             =item I<name> string
706              
707             Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
708              
709             =item I<shipping_address> hash
710              
711             Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
712              
713             When expanded, this is a L<Net::API::Stripe::Address> object.
714              
715             =back
716              
717             =item I<samsung_pay> hash
718              
719             If this is a C<samsung_pay> card wallet, this hash contains details about the wallet.
720              
721             =over 8
722              
723             =item I<samsung_pay>
724              
725             This is an empty hash.
726              
727             =back
728              
729             =item I<type> string
730              
731             The type of the card wallet, one of C<amex_express_checkout>, C<apple_pay>, C<google_pay>, C<masterpass>, C<samsung_pay>, or C<visa_checkout>. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type.
732              
733             =item I<visa_checkout> hash
734              
735             If this is a C<visa_checkout> card wallet, this hash contains details about the wallet.
736              
737             =over 8
738              
739             =item I<billing_address> hash
740              
741             Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
742              
743             When expanded, this is a L<Net::API::Stripe::Address> object.
744              
745             =item I<email> string
746              
747             Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
748              
749             =item I<name> string
750              
751             Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
752              
753             =item I<shipping_address> hash
754              
755             Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
756              
757             When expanded, this is a L<Net::API::Stripe::Address> object.
758              
759             =back
760              
761             =back
762              
763             =head1 API SAMPLE
764              
765             {
766             "id": "card_fake123456789",
767             "object": "card",
768             "address_city": null,
769             "address_country": null,
770             "address_line1": null,
771             "address_line1_check": null,
772             "address_line2": null,
773             "address_state": null,
774             "address_zip": null,
775             "address_zip_check": null,
776             "brand": "Visa",
777             "country": "US",
778             "customer": null,
779             "cvc_check": null,
780             "dynamic_last4": null,
781             "exp_month": 8,
782             "exp_year": 2020,
783             "fingerprint": "lkavkajndvkdvnj",
784             "funding": "credit",
785             "last4": "4242",
786             "metadata": {},
787             "name": null,
788             "tokenization_method": null
789             }
790              
791             =head1 HISTORY
792              
793             =head2 v0.1
794              
795             Initial version
796              
797             =head2 v0.2
798              
799             Added the method B<address> to make it easy to pass a L<Net::API::Stripe::Address> object or an hash reference to populate automatically the properties I<address_line1>, I<address_line2>, I<address_city>, I<address_zip> and I<address_country>
800              
801             =head1 STRIPE HISTORY
802              
803             =head2 2018-01-23
804              
805             When being viewed by a platform, cards and bank accounts created on behalf of connected accounts will have a fingerprint that is universal across all connected accounts. For accounts that are not connect platforms, there will be no change.
806              
807             =head1 AUTHOR
808              
809             Jacques Deguest E<lt>F<jack@deguest.jp>E<gt>
810              
811             =head1 SEE ALSO
812              
813             Stripe API documentation:
814              
815             L<https://stripe.com/docs/api/external_account_cards/object>, L<https://stripe.com/docs/connect/payouts>
816              
817             =head1 COPYRIGHT & LICENSE
818              
819             Copyright (c) 2019-2020 DEGUEST Pte. Ltd.
820              
821             You can use, copy, modify and redistribute this package and associated
822             files under the same terms as Perl itself.
823              
824             =cut