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

时间:2012-05-22 16:04:09

标签: android in-app-purchase in-app-billing

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

管理它的正确方法是什么?有没有办法创建一个我缺少的多阶段交易?

4 个答案:

答案 0 :(得分:5)

尝试使用针对InApp结算提供的Google Checkout机制而不是PayPal SDK,因为这是获取交易错误响应的最佳方式,以及RESTORE TRANSACTIONS如果应用是从设备中删除并重新安装。 Google在应用结算交易期间提供异步广播通知。购买类型可分为托管(每个用户帐户)和未管理。

Google在此处提供了相关信息:In App Billing Overview,如下所示:

1.一些应用内结算实施也可能使用私人远程服务器来提供内容或验证交易,但不需要远程服务器来实现应用内结算。

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

3.您也可以使用远程服务器来存储用户'交易记录或执行各种应用内结算安全任务,例如签名验证。

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

所以,最后,我想向您推荐Google InApp结算实施,而不是其他第三方付款流程。

答案 1 :(得分:3)

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

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

这使您的服务器成为付费交易的一部分(而不是像普通Checkout快递那样的PayPal网站)。

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

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

a)您可以在服务器上启动购买流程,并将其置于数据库中间的“未注册”状态。 您可以从服务器呼叫PayPal,以便PP可以处理您的呼叫,当您收到PP的响应时,如果响应意味着付款被接受,您就可以提交购买。这种方法的问题在于,您的应用程序需要在此时采取完成或拒绝事务的决定,而这不是现实世界购买交易的行为方式。 PayPal有时可能会回复一些不同的东西,而不仅仅是简单的OK /错误,付款可以等待,或者可以通过警告确定。

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

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

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

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

AFAIK,无法“回滚”交易。我认为谷歌的逻辑尽可能简单:如果你有产品(添加到开发者控制台),你可以卖掉它。
当Google的市场服务告诉您PURCHASE_STATE_CHANGED时,您应该确认交易。否则,应用程序将收到PURCHASE_STATE_CHANGED直到未确认,但事实是该用户已经收费。而且您无法回滚此交易 如果您的服务器可以拒绝事务,则应为此类情况实现其他逻辑,例如:

     
  • 在开始购买之前检查产品是否可用;  
  • 如果产品可用 - 对产品使用“预订”以确保在购买时存在;  
  • 等等;  
  • 否则您应该告诉用户联系支持部门以获得退款。
相关问题