我们有一个接受 Stripe 付款的网页,一旦付款完成,Stripe 可以调用我们服务器上的 webhook。
此时,我们可以将订单标记为完成并完成任何其他附加任务。
我们如何让订单网页更新/将用户移动到订单完成?
我们是否应该始终在 AJAX 中访问服务器以检查它现在是否已完成,或者是否有更好的方法来执行此操作。
我们有一个接受 Stripe 付款的网页,一旦付款完成,Stripe 可以调用我们服务器上的 webhook。
此时,我们可以将订单标记为完成并完成任何其他附加任务。
我们如何让订单网页更新/将用户移动到订单完成?
我们是否应该始终在 AJAX 中访问服务器以检查它现在是否已完成,或者是否有更好的方法来执行此操作。
问:我们如何让订单网页更新/将用户移动到订单完成?
大多数支付引擎会将支付会话重定向到您选择的带有结果代码的 URL 或每个结果代码的不同 URL。这些通常可以在发出请求时进行配置,也可以在一般配置中针对整个站点进行配置。实际付款不应依赖这些结果,因为这是网络挂钩的工作。他们可以得到足够的信任,让您的网站显示一般的成功/失败错误消息,并让用户继续做任何事情。
Stripe 也允许这样做,您可以指定一个success_url
(或successUrl
在客户端集成)。
有关如何将此 URL 传递给请求的信息,请参阅在您的服务器上创建结帐会话。您还可以包含一个cancel_url
. 请参阅下面代码示例中的最后 2 个参数:
curl https://api.stripe.com/v1/checkout/sessions \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d payment_method_types[]=card \ -d line_items[][name]=T-shirt \ -d line_items[][description]="Comfortable cotton t-shirt" \ -d line_items[][images][]="https://example.com/t-shirt.png" \ -d line_items[][amount]=500 \ -d line_items[][currency]=usd \ -d line_items[][quantity]=1 \ -d success_url="https://example.com/success" \ -d cancel_url="https://example.com/cancel"
另请参阅结帐购买履行。
当您的客户使用 Checkout 成功完成付款或启动订阅时,Stripe 会将他们重定向到您在 success_url 参数中指定的 URL(或客户端集成中的 successUrl)。通常,这是您网站上的一个页面,用于通知您的客户他们的付款已成功。
并且如上所述,如果付款成功,请不要将此作为实际指标。您应该为此使用网络挂钩。
不要依赖重定向到
success_url
单独来完成购买,因为:
- 恶意用户无需付费即可直接访问
success_url
您的商品或服务。success_url
客户可能并不总是在成功付款后到达。他们可能会在重定向发生之前关闭浏览器选项卡。
好问题,您可以处理条带支付结果以在您的页面上产生新的效果
var cardholderName = document.getElementById('cardholder-name');
var cardButton = document.getElementById('card-button');
var clientSecret = cardButton.dataset.secret;
cardButton.addEventListener('click', function(ev) {
stripe.handleCardPayment(
clientSecret, cardElement, {
payment_method_data: {
billing_details: {name: cardholderName.value}
}
}
).then(function(result) {
if (result.error) {
// Display error.message in your UI.
} else {
// The payment has succeeded. update your front-end
}
});
});
我们是否应该始终在 AJAX 中访问服务器以检查它现在是否已完成,或者是否有更好的方法来执行此操作。
我们是否应该始终在 AJAX 中访问服务器以检查它现在是否已完成,或者是否有更好的方法来执行此操作。
不,你不应该,是的,有更好的方法。如果您没有处理事务的 asp.net 服务器,回调页面/webhook 将是有意义的,但在这里它们不是必需的。
我们如何让订单网页更新/将用户移动到订单完成?
条带支付过程只需几秒钟即可响应状态码。它与将用户定向到 Paypal 站点然后返回您的站点的 Paypal 不同。
该过程应该进行:
用户将他们的付款信息输入到您页面上的条带生成元素中。
Stripe 为您的前端 javascript 提供了一个表示客户支付数据的令牌。
您使用 ajax 甚至是常规的老式表单请求将该信息发布到您的服务器。
根据需要将事务结果保存到您的数据库中。
一个。如果条带响应包括“状态”:“成功”,那么您可以为客户提供带有已付款收据的新页面。
湾。如果由于某种原因失败,您可以重新加载支付页面并使用“failure_message”告诉客户为什么他们的卡不好。
让用户等到 stripe 回复有关付款成功或失败的消息并发送给他,因为它只需要一秒钟。
/* SAMPLE RESPONSE FROM STRIPE
{
"id": "ch_1D658SDJ46dzUiasdfsdfaDq",
"object": "charge",
"amount": 2125,
"amount_refunded": 0,
"application": null,
"application_fee": null,
"balance_transaction": "txn_1D658SDJ46dzUilftNXRCz64",
"captured": true,
"created": 1565431460,
"currency": "usd",
"customer": null,
"description": "856 addresses",
"destination": null,
"dispute": null,
"failure_code": null,
"failure_message": null,
"fraud_details": {},
"invoice": null,
"livemode": false,
"metadata": {},
"on_behalf_of": null,
"order": null,
"outcome": {
"network_status": "approved_by_network",
"reason": null,
"risk_level": "normal",
"seller_message": "Payment complete.",
"type": "authorized"
},
"paid": true,
"receipt_email": null,
"receipt_number": null,
"refunded": false,
"refunds": {
"object": "list",
"data": [],
"has_more": false,
"total_count": 0,
"url": "/v1/charges/ch_1D658SDJ46dzUilfalFFraDq/refunds"
},
"review": null,
"shipping": null,
"source": {
"id": "card_1D658RDJ46dzUilfbkLSOIwp",
"object": "card",
"address_city": "test",
"address_country": "US",
"address_line1": "123 test",
"address_line1_check": "pass",
"address_line2": "",
"address_state": null,
"address_zip": "32121",
"address_zip_check": "pass",
"brand": "Visa",
"country": "US",
"customer": null,
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 12,
"exp_year": 2033,
"fingerprint": "fNMgYIntTkOnLVzk",
"funding": "credit",
"last4": "4242",
"metadata": {},
"name": "Test",
"tokenization_method": null
},
"source_transfer": null,
"statement_descriptor": null,
"status": "succeeded",
"transfer_group": null
}