我们是否应该一直在 AJAX 中访问服务器以检查它现在是否已完成,或者是否有更好的方法来执行此操作。
不,您不应该这样做,是的,有更好的方法。如果您没有处理事务的 asp.net 服务器,回调页面/webhook 将是有意义的,但在这里它们不是必需的。
我们如何让订单网页更新/将用户移动到订单
完成了吗?
条带支付过程只需几秒钟即可响应状态码。这与将用户定向到 Paypal 网站然后返回您的网站的 Paypal 不同。
这个过程应该去:
用户将他们的支付信息输入到生成的条带中
页面上的元素。
Stripe 为您的前端 javascript
代表客户支付数据的令牌。
您使用 ajax 甚至是常规的老式表单请求将该信息发布到您的服务器。
- 处理呼叫的服务器端脚本使用asp.net stripe library 发送付款并获得如下回复。
-
根据需要将交易结果保存到您的数据库中。
一个。如果条带响应包括“状态”:“成功”,那么您可以为客户提供带有已付款收据的新页面。
b.如果由于某种原因失败,您可以重新加载支付页面并使用“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
}