处理 Paypal 和 Local Datasase 之间的交易

2024-01-29

处理应用程序和贝宝之间交易的最佳实践是什么?

考虑:

  • 我是 Alice,我想汇款给 Bob
  • 在我的数据库中,我看到鲍勃有 200 美元,我想向他发送 150 美元。
  • 交易发送后,我想更新 Bob 的帐户,使其包含 50 美元。

现在根据 PayPal API 我可以发送付款并接收成功。然而发生了什么 例如,如果我发送 Pay 它会成功,但由于网络问题我无法收到响应。所以我假设发生了错误并重试,从技术上讲,我将向 Bob 发送 300 美元而不是 150 美元?

我如何处理保存帐户的本地数据库和远程 PayPal API 之间的此类交易?


最近,我对为客户完成的 ASP.NET MVC 项目产生了这样的担忧。

我学到了两件事:

  • Paypal 和你的数据库之间的通信不可信(好吧,并没有真正了解这一点,但它被完全强化了)

  • 我现在明白为什么这么多以 Paypal 作为交易类型的网站提到交易完成和产品运输/交付完成之间可能存在一个处理期。


您处理这种情况的方式类似于企业处理个人支票的方式:

  • 个人支票看起来像货币(通常也是如此),但许多企业希望在接受付款之前得到银行的某种资金可用验证,因此他们使用一台机器询问银行资金是否实际可用。
  • If the machine says the funds are available, the business trusts it and you complete the transaction. However, the machine can give an error message that typically means "the funds are not available or something went wrong" and the business has a decision to make:
    • 我们可以信任客户并接受支票,交付产品,并在稍后将支票存入银行时希望得到最好的结果。
    • 或者我们可以告诉客户,支票需要一段时间才能清算,存入支票,等待资金实际到达我们的帐户,并在企业收到资金后(如果成功)交付产品。

对于当今许多企业的运营方式来说,这听起来效率很低,但确实会出现这种情况。事实上,这就是为什么许多企业不接受个人支票的原因,与其他付款方式相比,它们不可靠。

现在这与处理 Paypal 付款有何关联?

  • Paypal 付款看起来像货币(通常也是如此),但许多企业希望在接受付款之前从 Paypal 进行某种资金可用的验证 - 因此他们使用 Paypal PDT、IPN 或其他方法来检查交易得到了妥善处理。
  • If Paypal properly responds to one of the verification requests, the business can trust it and complete the transaction. However, your website may throw an error of some sort (i.e. Paypal could reply with an IPN response of NOTVALID, or you could never get a reply from Paypal). The business has a decision to make:
    • 企业可以信任客户并接受他们已经进行了 Paypal 付款,一切都应该没问题(对于 Paypal 交易来说,这是一个非常糟糕的决定)
    • 或者商家可以在结帐时告诉客户 Paypal 付款可能有 72 小时的处理期。

这听起来可能不是经营业务的最佳方式,但这是我们应对不完善的互联网的方式。

我会设置类似于这样的 Paypal 付款流程:

  1. 用户 A 希望使用 Paypal 向另一个用户 B 发送 100 美元
  2. 用户 A 在“结帐字段”中输入值,并将其发送到 Paypal 以验证交易。
  3. UserA 从 Paypal 发送回您的网站,您的网站使用 Paypal 发布到您网站的详细信息执行 IPN 检查(在本例中我选择了 IPN - 就像我们使用的一样)与 Paypal 提供的其他支付网关相反)。
  4. 如果 IPN 是VALID,按预期处理交易。
  5. 如果 IPN 不是VALID,向客户提及处理可能会出现延迟,让您的应用程序向您发送可能发生 Paypal 交易问题的通知(您可能需要包含一个参考 ID,以便您可以快速找到此通知所引用的交易),并将交易标记为pending相对于complete或类似的东西。
  6. 处理这些通知的网站管理员将手动调查交易(或强制网站再次与 Paypal 核对 - 有关详细信息,请参阅 Paypal API 文档)并手动将交易标记为complete or failed.
  7. 通知相关人员交易的状态。

令人烦恼的是,我们必须采取额外的步骤来确保资金已转移,但是,正如前面提到的,我们使用的是一个不完善的系统,我们希望非常确定金融交易的成功/失败。

此过程的一个额外好处是,当有人篡改 Paypal 支付系统时,可能会收到通知 - 让您将来能够更好地应对邪恶之徒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 Paypal 和 Local Datasase 之间的交易 的相关文章

  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • 将 PayPal 返回 URL 设置为 localhost

    我正在尝试集成 Paypal 并且在此过程中使用沙箱 我按照以下问题中接受的答案的步骤进行操作 设置 PayPal 返回 URL 并使其自动返回 https stackoverflow com questions 7642895 setti
  • SQL 按计数排序

    如果我有一个表和这样的数据 ID Name Group 1 Apple A 2 Boy A 3 Cat B 4 Dog C 5 Elep C 6 Fish C 我希望根据 Group 的总和从小到大进行排序 例如 A 2条记录 B 1条记录
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • Riak 在 MapReduce 查询中失败。使用哪种配置?

    我正在与 riak riak js 结合开发一个 nodejs 应用程序 并遇到以下问题 运行此请求 db mapreduce add logs run 正确返回存储在存储桶日志中的所有 155 000 个项目及其 ID logs 1GXt
  • 如何重命名 MySQL 数据库(更改架构名称)?

    如何快速重命名 MySQL 数据库 更改其架构名称 通常我只是转储数据库并使用新名称重新导入它 对于非常大的数据库来说 这不是一个选项 显然RENAME DATABASE SCHEMA db name TO new db name 做了坏事
  • 我可以访问其他 Google App Engine 应用程序的数据存储区实体吗

    众所周知 在Google App引擎中 对于每个注册的电子邮件帐户 我们可以进行10个申请 现在 我需要在应用程序之间共享实体 这可能吗 如果有 是如何实施的 不 这是不可能的 然而 作为尼克 约翰逊 https stackoverflow
  • Spring Integration中的异常:如何记录但不拦截

    假设我有一个基本的 Spring 集成流程 例如
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 如何更新 pl/sql 中嵌套表的列? [复制]

    这个问题在这里已经有答案了 我正在尝试在表中创建一个可以存储多个值的列 如下所示 我有一个学生id std和一个名为marks可以采用几个值 例如2 3 4 我想更新此列表以添加另一个标记2 3 4 5但我不知道怎么做 我如何更新专栏mar
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 插入具有多个值的外键

    我想知道 是否有可能创建一个表 其中我有一个接受外键但同一行可能有多个值的表 例如 Employee id name skillid Skill Skillid skillname 这里 Employee 的一个例子可以是 Employee
  • 无法在 Zend Framework 中回滚事务

    我在 Zend Framework 中使用以下代码进行事务 但回滚功能不起作用 数据通过 insertSome data 插入数据库 怎么了 db gt beginTransaction try model gt insertSome da
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v
  • 如何迁移我的 Heroku 数据库?

    我试过了 heroku rake db migrate and heroku pg push 第一个给我一个 PGerror rake 中止错误 有没有办法用heroku完全重建 重置我的数据库 我似乎在他们的文档中找不到它 编辑 在此之前
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a

随机推荐