我是否需要创建 2 个表单来集成付款处理 API?

Do I need to create 2 forms to integrate a payment processing API?

我正在关注Braintree Payments docs。要设置信用卡付款方式,它表示表单代码如下所示:

<form id="checkout" action="/your/server/endpoint" method="post">
  <input data-braintree-name="number" value="4111111111111111">
  <input data-braintree-name="expiration_date" value="10/20">
  <input type="submit" id="submit" value="Pay">
</form>

但我已经设置了一个表单,它接受所有其他必要的输入(它基本上是一个向用户收费的问答网站)并将其提交到数据库。我应该把 Braintree 文档给出的表单代码放在哪里?您可以将一个表单嵌套在另一个表单中吗?这是推荐的做法吗?我应该将表格分开并在另一页上处理付款吗?理想情况下,我想在一个页面上完成整个过程,如果他们 select 该方法,我可能会调出信用卡付款方式表格。

完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support.

根据 working HTML5 specification<form> 元素不应包含其他 <form> 元素,因此嵌套表单在技术上实际上是无效的 HTML。考虑到这一点,我们可以有把握地说这不是推荐的做法。 :)

但是,一个页面可以包含多个表单。请记住,由于表单的性质(它将数据发送到端点并加载该端点),您将无法从同一页面同时提交多个表单。一种常见的模式是使用专门用于以单一形式收集付款数据的结帐页面。

如果您只想使用一页和一种表格,Braintree 可以满足。 Braintree 数据输入元素不必是表单中的唯一元素。例如,您可以包含询问用户姓名、出生地或其他任何内容的输入元素。当您将 braintree.setup 指向您的表单时,它只会关注您用 "data-braintree-name" 标记的输入字段,而您所有的常规命名字段仍将在您的 $_POST 中变量。