2015-12-22 7 views
22

Im Testmodus, wenn ich einen neuen Kunden erstelle und versuche, eine Zahlung zu erhalten, habe ich diesen Fehler erhalten.Stripe Payment: Fehler als Kunde erhalten cus _ ***** hat keine verknüpfte Karte mit ID tok _ *****

Kunden cus_7Zz2BCnybIZLGw nicht über eine verknüpfte Karte mit ID tok_17Kp8GAwLkQPB7OqrrM73VVI

Im mit Kartennummer: 4242424242424242 exp_month: 12 exp_year 2016

Die Rückantwort ist,

Array 
(
    [charge_status] => 
    [error_info] => Array 
     (
      [type] => invalid_request_error 
      [message] => Customer cus_7Zz2BCnybIZLGw does not have a linked card with ID tok_17Kp8GAwLkQPB7OqrrM73VVI. 
      [param] => card 
      [code] => missing 
     ) 

    [message] => Customer cus_7Zz2BCnybIZLGw does not have a linked card with ID tok_17Kp8GAwLkQPB7OqrrM73VVI. 
) 

Ladedaten eingeben ist

,
$customer = Stripe_Customer::create(array(
     'account_balance' => 100, 
     'source' => $token, 
     'email' => strip_tags(trim($email)) 
    ) 
); 

$customer_id = $customer->id; 

$charge = array(
       'card'   => 4242424242424242, 
       'amount'  => 100, 
       'currency'  => 'cad', 
       'receipt_email' => [email protected], 
       'description' => 'my payment', 
       'customer'  => $customer_id 
      ); 

Antwort

47

Es gibt drei verschiedene Möglichkeiten, um create a charge:

  • mit dem source Parameter nur. In diesem Fall muss source eine token ID (erstellt von Checkout oder Stripe.js) sein, d. H. Eine Zeichenfolge, die mit tok_ beginnt.

  • mit dem Parameter customer nur. In diesem Fall muss customer eine customer ID sein, d. H. Eine Zeichenfolge, die mit cus_ beginnt. Die Standardkarte des Kunden wird belastet.

  • mit den beiden Parametern customer und source. In diesem Fall muss customer wie im vorherigen Fall eine Kunden-ID sein, aber source sollte eine Karten-ID sein, d. H. Eine Zeichenfolge, die mit card_ beginnt. Das Kartenobjekt sollte dem Kunden gehören.

In Ihrem Fall vorbei sind Sie ein Token-ID in den source Parametern zusammen mit einer Kunden-ID im customer Parameter.

Wenn dies eine neue Karte ist, sollten Sie zuerst das Token an create a card auf den Kunden verwenden, erstellen Sie dann die Ladung mit der Karte ID. Wenn die Karte für diesen Kunden bereits gespeichert wurde, müssen Sie die Karteninformationen nicht erneut sammeln (und müssen daher kein Token erstellen).

+1

Perfekt! Vielen Dank Ywain :) – Sree

+0

@Ywain Was ist bei Verwendung eines Apple Pay Tokens? Offenbar ist es nicht möglich, Apple Pay-Transaktionen mit einem Kundenkonto zu verknüpfen und jedes Mal das Preisblatt und die TouchID-Benutzeroberfläche zu verwenden. Entweder verwandle ich den Token in eine Karte und dann verhält er sich wie eine gespeicherte Karte und nicht wie Apple Pay, oder ich bekomme jedes Mal ein neues Token, und dem Kundenaccount ist kein Gebührenverlauf zugeordnet. – emkman

+2

@emkman: Ich nehme an, Sie könnten mit Apple Pay jedes Mal ein neues Token erstellen, das Token an das vorhandene Kundenobjekt anhängen, die Gebühr mit dem Kundenobjekt erstellen und dann die Karte aus dem Apple Pay-Token löschen. Auf diese Weise können Sie Apple Pay verwenden, um jede Transaktion zu authentifizieren und trotzdem eine Gebührenhistorie für das Kundenobjekt zu führen. – Ywain

0

Ich hatte "SourceToken" in StripeCustomerCreateOptions AND "SourceTokenOrExistingSourceId" in StripeChargeCreateOptions (SourceToken) für meine StripeCustomer.

Durch das Entfernen der Zuweisung von SourceTokenOrExistingSourceId wurde mein Problem für StripeCharge gelöst, da das Token Konflikte verursachende IDs erzeugte.