2016-09-23 1 views
0

Ich habe eine Anforderung, E-Mail-Quittungen zu senden, wenn Stripe-Zahlung verwendet wird. Die E-Mails gehen nicht an die Kunden.Stripe sendet keine E-Mail, wenn Checkout.js verwendet wird

Wir https://checkout.stripe.com/checkout.js und in den E-Mail-Einstellungen verwenden richtig konfiguriert ist:

enter image description here

Die JavaScript-Aufruf Client-Seite-Streifen sind hier:

stripeHandler = StripeCheckout.configure({ 
     key: "{{stripe_key}}", 
     image: '/static/img/framework/logo.png', 
     token: function(token) { 
     $("#stripe_token").val(token.id); 
     $("#payment_form").submit() 
     } 
    }); 

    stripeHandler.open({ 
     name: 'My Company Inc.', 
     description: "{{order_description|escapejs}}", 
     email: "{{ order.user.email }}", 
     amount: parseInt(parseFloat($('#total_cost').text) * 100) 
    }); 

Antwort

2

Wenn Sie Kartendaten sammeln über Stripe Checkout, Stripe sendet Ihnen ein Karten-Token zurück mit einer ID wie dieser tok_XXX.

Das Karten-Token ist nur der erste Schritt in der Verarbeitung einer Zahlung. Sie müssen dann dieses Token an Ihren Server senden, wo Sie die Gebühr erstellen API verwenden, um eine Gebühr zu erstellen und eine Zahlung zu erhalten, oder Sie speichern die Karte für einen Kunden mit dem Create Customer API.

In beiden Fällen kennt Stripe die E-Mail-Adresse des Kunden nicht und wird nicht vom Token übernommen. Sie müssen es explizit an die API senden, wenn Sie diese E-Mail-Adresse verwenden möchten.

Wenn Sie einen Kunden erstellen, übergeben Sie ihn im Parameter email beim Erstellen. Diese E-Mail wird dann verwendet, um E-Mail-Quittungen an diesen Kunden zu senden, wenn Sie die gespeicherte Karte aufladen.

Wenn Sie eine Gebühr sofort erstellen, ohne zuerst einen Kunden zu erstellen, müssen Sie Stripe explizit mitteilen, dass der E-Mail-Beleg an diese Adresse gesendet werden soll. Dies geschieht, indem der Parameter receipt_email in der API wie dokumentiert here übergeben wird.

Das letzte Problem mit Ihrem Code ist, dass, obwohl Stripe sendet Ihnen die E-Mail-Adresse des Kunden zurück in den Rückruf token Sie nicht im Code verwenden. Das bedeutet, dass Sie, sobald das Token Ihren Server erreicht, keine E-Mail-Adresse mehr haben und Ihr Code einfach den leeren Wert ignorieren muss.

Sie wollen, um Ihren Handler zu ändern, so etwas zu tun:

stripeHandler = StripeCheckout.configure({ 
    key: "{{stripe_key}}", 
    image: '/static/img/framework/logo.png', 
    token: function(token) { 
    $("#stripe_token").val(token.id); 
    $("#stripe_email").val(token.email); 
    $("#payment_form").submit() 
    } 
}); 

Dies setzt voraus, dass das Formular bereits ein zweites verstecktes Eingabefeld mit der ID hat stripe_email, wo die E-Mail einzustellen. Sie können ein vollständiges Beispiel mit PHP here sehen.

Eine andere Lösung wäre, das Retrieve Token API serverseitig basierend auf der Token-ID aufzurufen, um die E-Mail in der email Eigenschaft andernfalls zu erhalten.

0

Ich hatte das gleiche Problem und erkannte, dass ich meinen serverseitigen Code nicht gesetzt hatte, um die E-Mail auszulösen. Stripe enthält einige Anweisungen unter Automatically send receipts using the API.

In meinem Fall hatte ich den quitture_email Parameter nicht eingestellt. Ich benutze PHP, so sieht mein Code so aus:

$token = $_POST['stripeToken']; 
$emailR = $_POST['stripeEmail']; 

$charge = \Stripe\Charge::create(array(
    "amount" => 30000, 
    "currency" => "usd", 
    "source" => $token, 
    "description" => "Awesome Widget", 
    "receipt_email" => $emailR, 
    "metadata" => array("Email" => $emailR) 
)); 
Verwandte Themen