我需要在使用Stripe付款时发送电子邮件收据。电子邮件不会发给客户。
我们正在使用https://checkout.stripe.com/checkout.js,并且在电子邮件设置中配置正确:
调用客户端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)
});
答案 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)
));