【问题标题】:Submit a form before redirecting to paypal在重定向到贝宝之前提交表格
【发布时间】:2013-05-06 17:04:55
【问题描述】:

我有一个提供导游服务的网站。每个旅游都有自己的价格,具体取决于参加的人。

用户必须填写表格,然后服务器必须验证表格,然后向客户和代理办公室发送一封电子邮件,其中包含预订旅行的详细信息(首选日期、人数等),然后将用户重定向到贝宝付款。

问题在于,paypal 提供的“立即购买”按钮有自己的表单,其中包含一些隐藏字段,因此同一页面上有两个表单。

我找到了树解决方案,但我不知道什么是最好的。

  1. 当用户按下提交时,进行验证,发送电子邮件,然后将用户重定向到一个页面,该页面有一个按钮,上面写着“继续付款”,该按钮提交带有支付者价格的贝宝表单隐藏字段

  2. 当用户按下提交按钮时,服务器会发出一个 ajax 调用来验证表单并发送电子邮件,然后在成功时提交 paypal 表单。

  3. 当用户按下提交时,进行验证,发送电子邮件,然后服务器将表单提交到贝宝

我正在阅读几个小时来寻找解决此问题的最佳方法。什么是最安全、最高效且不会给用户带来问题的。

对不起我的英语

【问题讨论】:

  • 我认为你最好阅读 PayPal Merchant API,它会变得简单很多

标签: php ajax forms paypal


【解决方案1】:

假设您对 Web 开发有一定的了解(因为您正在谈论表单、会话等),我建议您使用 PayPal Express Checkout API。您尝试做的事情很常见。以下是我的做法:

  1. 用户在第 1 页的表单中输入旅游信息,然后点击“提交”按钮。

  2. 您的服务器接收到调用,验证表单并调用 SetExpressCheckout 并将 PAYMENTACTION 设置为“授权”。这就像“预订酒店房间”或“租车”。您此时只是要求用户授权付款;还没向他收费。

  3. API 会返回一个令牌。您将此令牌与旅游信息一起存储在后端数据库中;并将此特定“预订”标记为“已收到预订请求”。

  4. 您将用户重定向到 paypal.com(并在 URL 中传递该令牌)以“授权”付款。

  5. 一旦用户完成授权,paypal 会将用户重定向到您的网站(在 paypal 术语中称为“成功页面”或“返回 URL”)。

  6. 您将数据库条目更新为“付款已授权”状态。此时,您向用户和代理发送电子邮件。

  7. 代理验证并确保游览中仍有可用空间等,让您知道用户已准备就绪。

  8. 此时,您使用该令牌调用 DoCapture API。这实际上“捕获”了付款。并且您使用“已处理付款”状态更新数据库条目。您还可以向用户发送另一封电子邮件,确认付款和预订。

在任何阶段,如果出现下降(比如用户从未完成授权),您会从数据库中得知,并且可以向用户发送后续电子邮件。或者如果他授权但后来代理说该特定旅行没有空间,您可以再次与用户跟进下一个可用日期,或取消付款等。

是的,这意味着它是“更多的编码”……但随后您将获得“更多的灵活性”,并希望您能够减少丢失。

希望这会有所帮助。这是快速结帐的文档:https://cms.paypal.com/cms_content/CA/en_US/files/developer/PP_ExpressCheckout_IntegrationGuide.pdf。有Java、PHP等SDK可用于帮助商家快速集成。

【讨论】:

  • 谢谢!很中肯的回答。您是否认为最好使用 PayPal IPN 并遵循您描述的逻辑,因为我唯一可用的付款方式是 paypal。所以我想如果有些客户没有贝宝账户,可以通过贝宝网站用信用卡支付。
  • 是的,您也可以使用 IPN 来执行此操作,但是您可以想象它会有点复杂(就像您提到的那样,您必须使用 ajax 来“记录预订请求”等...但是,如果您确实想走 IPN 路线,则将按钮中的 PaymentAction 设置为 Authorization。然后您可以通过登录您的 paypal 帐户或使用 API 来捕获付款。更多详细信息在这里:developer.paypal.com/webapps/developer/docs/classic/…
  • 谢谢!你可以想象你的帮助有多大!我希望我能投票。
【解决方案2】:

您将使用 PayPal 表单的所有值创建一个确认页面,但使用 <input type="hidden" balal /> rather than <input type="text" balal />

尝试分解流程,而不是让整个交易都停留在“立即购买”按钮上。也许在您的网站上创建一个基本的购物车系统,然后允许用户结帐,然后使用隐藏输入将购物车的内容发送到 PayPal。

这种方式可以让您将用户与预订相匹配。

【讨论】:

  • 我认为打破流程可能是最好的解决方案。虽然这会产生一个小问题。如果用户填写表格并按下提交,然后在另一个页面上用户由于某种原因没有单击继续,则会在代理办公室发送一封电子邮件,其中包含用户提交的详细信息。
  • 我建议使用 PayPal 的 IPN 回调(使用 return_url 字段设置)确认付款,然后处理数据/电子邮件。 IPN 回调仅在付款完成后发送。 paypal.com/au/cgi-bin/webscr?cmd=p/acc/ipn-info-outside
  • 感谢您的帮助!所以我必须将我的数据存储到会话中?然后当贝宝重定向到我来处理数据时?但是,如果用户付款,然后发生某些事情并且无法重定向,则用户将获得付款,但代理我们将不知道他预订的旅行的详细信息。很抱歉偏执:) 编辑
  • 感谢您推荐 Paypal 的 IPN。这是一个很大的帮助,我可以将它与 Gautam Tandon 的答案结合起来。
猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2012-11-27
  • 2014-10-22
  • 1970-01-01
  • 2016-04-03
相关资源
最近更新 更多