使用Checkout.js时,Stripe不会发送电子邮件

时间:2016-09-23 22:10:41

标签: stripe-payments

我需要在使用Stripe付款时发送电子邮件收据。电子邮件不会发给客户。

我们正在使用https://checkout.stripe.com/checkout.js,并且在电子邮件设置中配置正确:

enter image description here

调用客户端Stripe的JavaScript在这里:

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)
    });

2 个答案:

答案 0 :(得分:2)

每当您通过Stripe Checkout收集卡片详细信息时,Stripe会向您发送一张卡片令牌,其ID为tok_XXX

获取卡片令牌只是处理付款过程的第一步。然后,您需要将该令牌发送到您使用创建费用API的服务器来创建费用并接收付款,或者使用创建客户API将卡保存在客户身上。

在这两种情况下,Stripe都不知道客户的电子邮件地址,也不会从令牌中获取。如果您想要使用该电子邮件地址,则必须将其明确发送给API。

如果您创建了一个客户,那么您将在创建时在email参数中传递它。每当您为保存的卡充电时,该电子邮件将用于向该客户发送电子邮件收据。

如果您在未先创建客户的情况下立即创建费用,则必须明确告知Stripe将电子邮件收据发送到该地址。这是通过在API中传递receipt_email参数来完成的,记录为here

您的代码的最后一个问题是,即使Stripe在token回调中向您发送客户的电子邮件地址,您也不会在代码中使用它。这意味着一旦令牌到达您的服务器,您就不再拥有该电子邮件地址,您的代码必须忽略空值。

您需要更改处理程序以执行以下操作:

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()
  }
});

这假设您的表单已经有第二个隐藏的输入字段,其ID为stripe_email,用于设置电子邮件。您可以看到PHP here的完整示例。

另一种解决方案是根据令牌ID调用Retrieve Token API服务器端,以获取email属性中的电子邮件。

答案 1 :(得分:0)

我遇到了同样的问题,并意识到我没有设置我的服务器端代码来触发电子邮件。 Stripe在Automatically send receipts using the API列出了一些说明。

就我而言,我没有设置 receipt_email 参数。我使用PHP,所以我的代码如下:

$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)
));