我在next.js应用程序中使用stripe来接受一次性付款,到目前为止,我一直在遵循stripe Elements的标准教程。
它的工作方式是,我在第一次渲染时创建一个PaymentIntent
:
useEffect(() => {
// Create PaymentIntent as soon as the page loads
// using nextjs api route here:
fetch('http://localhost:3001/api/create-payment-intent', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
.then((res) => res.json())
.then((data) => setClientSecret(data.clientSecret));
}, []);
这给了我一个clientSecret,它是存储状态。然后,条纹支付元素组件正在显示,在提交时,我调用confirmPayment
:
const { error } = await stripe.confirmPayment({
elements,
confirmParams: {
// Make sure to change this to your payment completion page
return_url:
'http://localhost:3001/confirm'
}
});
我的问题是,我也想获取用户的姓名和电子邮件地址,但我不知道我会在哪里捕获这些信息,也不知道该把它们发送到哪里?
我想在stripe中创建一个新客户并将name
和email
添加到该客户对象中是最有意义的。但由于几乎所有的事情都发生在前端(或者至少不是在我的后端(,我不明白该怎么做?当我创建PaymentIntent
并发回clientSecret
时,我可以这样做,但之后我可能会创建客户,即使他们没有完成付款意向。
PS:我知道这个问题以前被问过几次,但从那以后,Stripes API发生了很大的变化
您需要在前端为客户的姓名和电子邮件地址创建自己的输入字段。
如果你不想在成功付款之前创建客户,一种方法是:
- 将输入值传递到stripe.confirmPayment.confirmParams.payment_method_data.billing_details中的
name
和email
中
示例
stripe.confirmPayment({
elements,
confirmParams: {
return_url: 'https://example.com/',
payment_method_data : {
billing_details : {
name : "jenny rosen",
email : "test@example.com"
}
}
},
});
- 当您收到
payment_intent.succeeded
webhook事件时,该事件将包含您传入的计费详细信息
payment_intent.successed示例事件
...
"charges": {
"object": "list",
"data": [
{
"id": "ch_...",
"object": "charge",
"amount": 200000,
"amount_captured": 200000,
"amount_refunded": 0,
"amount_updates": [
],
"application": null,
"application_fee": null,
"application_fee_amount": null,
"balance_transaction": "txn_...",
"billing_details": {
"address": {
"city": null,
"country": "US",
"line1": null,
"line2": null,
"postal_code": null,
"state": null
},
"email": "test@example.com",
"name": "jenny rosen",
"phone": null
},
...
- 然后您可以创建客户