Android 使用服务器进行应用内购买

Android 使用服务器进行应用内购买,android,in-app-purchase,in-app-billing,Android,In App Purchase,In App Billing,我想实现一个应用内购买机制,它支持Google checkout和PayPal在我的一个Android应用中购买虚拟物品。我阅读了这两种机制的参考文献,但我仍然有一个问题,即如何正确处理此类购买。 问题是,我想在购买事务中管理对自己服务器的调用,以防该调用无法取消/回滚整个事务。如果我第一次执行采购交易,并且只有在确认后我才调用我自己的服务,如果它失败了,我该怎么办?如果我第一次调用我的服务,然后尝试处理事务,但它失败了,我需要回滚我的调用(如果回滚失败会发生什么?) 正确的管理方法是什么?有没

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


正确的管理方法是什么?有没有什么方法可以创建我缺少的多阶段事务

我以前从未使用过谷歌结账,只有贝宝

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

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

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

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

a) 您可以在服务器上启动购买过程,并使其在数据库中处于中间“未限制”状态。 您可以从服务器上呼叫PayPal,以便PP可以处理您的呼叫。当您收到PP的响应时,如果响应意味着付款已被接受,则您可以提交您的购买。这种方法的问题在于,您的应用程序需要在此时做出完成或拒绝事务的决定,而现实世界中的购买事务可能不会这样做。PayPal有时可能会做出不同的响应,而不仅仅是简单的“确定/错误”,付款可能是挂起的,也可能是带有警告的“确定”

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

您可以通过更改来实现与前面描述的相同的流程。一旦PayPal处理付款并给您一个肯定的回答,您就可以将交易ID存储在数据库中,但不提交任何内容。只告诉用户交易已完成

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

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

这非常重要,因为挂起的事务可能会被接受或拒绝。即使是已接受的交易也可能会被您或您的买家向PayPal提出的索赔要求回滚


如果您需要有关如何实现PP IPN侦听器的更多信息,请与我联系。

如果您仍在寻找一种实现由谷歌处理的支付方法的方法,您可以在此处找到关于如何实现应用内计费的安卓市场的详细说明:


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

谷歌在这里提供的信息如下:

1.一些应用内计费实施也可能使用专用远程服务器交付内容或验证交易,但不要求远程服务器实施应用内计费。

2.如果您正在销售需要发送到用户设备的数字内容,例如媒体文件或照片,则远程服务器可能非常有用。

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

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


因此,最后,我想向您推荐Google InApp计费实现,而不是其他第三方支付流程。

好吧,不可能“回滚”交易。我认为谷歌的逻辑尽可能简单:如果你有产品(添加到开发者控制台),你就可以销售它。
当谷歌的市场服务告诉你购买状态改变时,你应该确认交易。否则,应用程序将收到购买状态更改,直到未确认为止,但事实是,用户已付费。您无法回滚此事务。
如果您的服务器可以拒绝事务,则应针对此类情况实施其他逻辑,例如:

  • 开始购买前检查产品是否可用;
  • 如果产品可用-使用产品的“预订”,以确保在购买时该产品存在;
  • 等等;
  • 否则,您应该告诉用户联系支持以获得退款。
感谢您的回答,但由于我可能会使用适用于Android的PayPal SDK,因此交易由SDK处理,我得到的只是设备上的确定/取消/错误指示,甚至服务器上都没有。如果我使用服务器端事务,我将错过在应用程序中使用Android本机SDK的所有好处,因为应用程序的用户数量要多得多-friendly@muzikant当然,最好使用Android的本机SDK,但这并不意味着您也不能将PayPal商户帐户配置为使用IPN。由于您可以将此参数配置为api帐户中所有事务的全局设置,因此此IPN功能