2016-11-29 2 views
0

Ich versuche, ein Perl-Skript einzurichten, das Kreditkartenladungen über Stripe mit Net::Stripe verarbeiten wird."Ungültige Zeichenfolge" Verwendung von Net :: Stripe

ich in der Lage bin zu beantragen erfolgreich ein Token, aber wenn ich das Token verwenden, um die Ladung zu schreiben, erhalte ich diesen Fehler:

Error: invalid_request_error - Invalid string: {"exp_month"=>"12", "exp_year"=>"2021", "object"=>"card"} at Stripe.pm line 637

Hier ist mein Code

$API_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 

my $stripe = Net::Stripe->new(
    api_key  => $API_KEY, 
    debug   => '1', 
    debug_network => '1' 
); 

my $card_token = $stripe->post_token(
    card => { 
     number => $FORM{'Credit Card #'}, 
     exp_month => $FORM{'Expiration Month'}, 
     exp_year => $FORM{'Expiration Year'}, 
     cvc  => $FORM{'Credit Card Security Code'} 
    } 
); 

print Dumper($card_token); 

try { 
    my $charge = $stripe->post_charge(
     amount  => $amount_of_charge_in_cents, 
     currency => 'usd', 
     card  => $card_token, 
     description => 'ABC Charge', 
     customer => $FORM{'Name'} 
    ); 
} 
catch { 
    warn "caught error: $_"; # not [email protected] 
} 

Soll ich etwas anderes als $card_token als Kartenwert verwenden?

+0

Ist das Token ein Objekt oder enthält es eine ID? Um eine Gebühr zu erheben, interessiert man sich nur für die ID (z. B. "tok_xxx"). – korben

Antwort

0

Die Dokumentation für die Stripe-API-Aufruf Create a card token (die von post_token gewickelt wird) sagt, dass die folgenden Felder sind erforderlich

exp_month 
exp_year 
number 
currency 
cvc 

Aber Sie sind nur vier dieser

+0

Derselbe Fehler mit der Währung in der Token-Anfrage ... – Diane

0

Dank Versorgen Korben Ich habe meinen Code so modifiziert, dass er funktioniert, indem ich nur die zurückgegebene Token-ID verwende:

$API_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 

my $stripe = Net::Stripe->new(
    api_key  => $API_KEY, 
    debug   => '1', 
    debug_network => '1' 
); 

my $card_token = $stripe->post_token(
    card => { 
     number => $FORM{'Credit Card #'}, 
     exp_month => $FORM{'Expiration Month'}, 
     exp_year => $FORM{'Expiration Year'}, 
     cvc  => $FORM{'Credit Card Security Code'}, 
     name  => $FORM{'Name on Card'}, 
    } 
); 
print Dumper($card_token); 

$token_id = $card_token->{id}; 

try { 
    my $charge = $stripe->post_charge(
     amount  => $amount_of_charge_in_cents, 
     currency => 'usd', 
     card => $token_id, 
     description => 'ABC Charge' 
    ); 
} catch { 
    warn "caught error: $_"; # not [email protected] 
} 

Ich habe auch den "Kunden" -Wert entfernt, da dies die ID eines bestehenden Kunden ist, und dem Karten-Token-Code "Name" hinzugefügt.

Verwandte Themen