6

我想实现一种应用内购买机制,支持 Google 结帐和 PayPal,以便在我的一个 Android 应用中购买虚拟物品。我阅读了这些机制的两个参考资料,但我仍然有一个问题,即处理此类购买的正确方法是什么。问题是我想管理对我自己服务器的调用作为购买交易的一部分,以防该调用无法取消/回滚整个交易。如果我第一次执行购买交易并且只有在确认后才调用我自己的服务,如果它失败了我该怎么办?如果我第一次调用我的服务并且尝试处理事务并且它失败了,我需要回滚我的调用(如果回滚失败会发生什么????)

管理它的正确方法是什么?有什么方法可以创建我缺少的多阶段交易吗?

4

4 回答 4

4

尝试使用Google Checkout为 InApp Billing 提供的机制而不是PayPalSDK,因为它是获取交易错误响应以及RESTORE TRANSACTIONS从设备中删除并重新安装应用程序的最佳方式。Google 在应用计费交易期间提供异步广播通知。购买类型可以分为托管(每个用户帐户)和非托管。

谷歌在此处提供信息:在 App Billing Overview中,如下所示:

1.一些应用内计费实现也可能使用私有远程服务器来交付内容或验证交易,但不需要远程服务器来实现应用内计费。

2. 如果您要销售需要传送到用户设备的数字内容,例如媒体文件或照片,远程服务器会很有用。

3.您还可以使用远程服务器来存储用户的交易历史或执行各种应用内计费安全任务,例如签名验证。

4.虽然您可以在应用程序中处理所有与安全相关的任务,但建议在远程服务器上执行这些任务,因为它有助于使您的应用程序不易受到安全攻击。

所以,最后我想向您推荐 Google InApp Billing Implementation 而不是其他第三方支付流程。

于 2012-06-04T12:59:17.720 回答
3

如果您仍在寻找一种实施由 Google 处理的付款方式的方法,您可以在此处找到有关如何实施 Android 电子市场应用内结算的详细说明:

http://developer.android.com/guide/market/billing/index.html

于 2012-06-04T08:48:07.847 回答
3

我以前从未使用过 Google Checkout,只使用过 PayPal。

您可能正在寻找的是 PayPal Payments Pro SDK。

这让您的服务器成为支付交易的代言人(而不是像普通 Checkout 快递那样的 PayPal 网站)。

您需要实现两阶段提交机制。

我可以推荐两种不同的方法:

a) 您可以在您的服务器上启动购买过程,并将其留在数据库中的中间“未提交”状态。您从您的服务器调用 PayPal,以便 PP 可以处理您的呼叫,当您收到 PP 的响应时,如果响应意味着付款已被接受,则您提交购买。这种方法的问题在于,您的应用程序需要在此时决定完成或拒绝交易,而这不是现实世界购买交易的行为方式。PayPal 有时可能会响应与简单的 OK/Error 不同的响应,付款可能处于待处理状态,或者可能会出现警告。

b) 更可靠的是让 PayPal 通知您付款状态。

您可以进行与之前描述的相同的流程,但需要进行更改。一旦 PayPal 处理了付款并给您一个肯定的答复,您将交易 ID 存储在您的数据库中,但不提交任何内容。只告诉用户交易已经完成。

作为调用 PayPal 服务器的一部分,您可以使用一个参数,该参数称为 IPN 侦听器 URL。

IPN 表示即时付款通知,是对您的服务器的回调,由 PayPal 发起,您的应用程序将在其中获得有关您的付款状态的即时信息。

这非常重要,因为待处理的交易可能会被接受或拒绝。即使是已接受的交易也可能会被您或您的购买者向 PayPal 提出的索赔回滚。

如果您需要有关如何实施 PP IPN 侦听器的更多信息,请告诉我。

于 2012-05-30T23:12:43.213 回答
0

AFAIK,不可能“回滚”事务。我认为 Google 的逻辑尽可能简单:如果您确实有产品(添加到开发者控制台),那么您就可以出售它。
当 Google 的市场服务告诉您 PURCHASE_STATE_CHANGED 您应该确认交易。否则应用程序将收到 PURCHASE_STATE_CHANGED 直到它未被确认,但事实是用户已经收费。而且你不能回滚这个事务。
如果你的服务器可以拒绝交易,你应该为这种情况实现额外的逻辑,例如:

  • 在开始购买之前检查产品是否可用;
  • 如果产品可用 - 对产品使用“预订”以确保在购买完成时它存在;
  • 等等;
  • 否则你应该告诉用户联系支持退款。
于 2013-07-04T10:33:05.023 回答