Android 在Google Play应用内账单上消费取消的购买

Android 在Google Play应用内账单上消费取消的购买,android,google-play,in-app-billing,google-play-services,Android,Google Play,In App Billing,Google Play Services,我正在开发一个应用程序,它利用Google Play In app Billing V3销售一个在一定时间内有效的商品。用户购买后,我将购买数据发送到服务器,如果成功,我会立即使用它。然后,服务器授予该特定用户对额外服务的访问权,直到该期间结束。注意:我没有使用应用内订阅 我在沙箱模式下与测试用户一起测试购买,不进行付款。它们中的大多数都是成功的,并且这个流程运行良好。然而,有时,我的购买被谷歌立即取消。在我的Google Checkout帐户的订单历史记录中,我看到一行: “为了保护你,谷歌取

我正在开发一个应用程序,它利用Google Play In app Billing V3销售一个在一定时间内有效的商品。用户购买后,我将购买数据发送到服务器,如果成功,我会立即使用它。然后,服务器授予该特定用户对额外服务的访问权,直到该期间结束。注意:我没有使用应用内订阅

我在沙箱模式下与测试用户一起测试购买,不进行付款。它们中的大多数都是成功的,并且这个流程运行良好。然而,有时,我的购买被谷歌立即取消。在我的Google Checkout帐户的订单历史记录中,我看到一行:

“为了保护你,谷歌取消了这个订单。交易被取消了 被视为欺诈。”

即使发生这种情况,我看到我在购买数据中收到一个
“purchaseState”:0
,表示成功。此外,尝试使用此产品也会成功(调用
IInAppBillingService.consumePurchase(版本、包、令牌)
返回0)。稍后查询我的库存显示我没有购买(因此没有退款/取消),并且我可以再次自由购买相同的物品。这与正常、未取消状态下的行为相同

  • 谷歌是否经常在测试沙箱之外以同样的方式取消订单
  • 由于开发商无法控制的原因,成功购买和消费的项目是否仍然可以取消(即退款)
  • 是否有可能了解已消费产品的取消情况
  • 谷歌是否经常在测试之外以同样的方式取消订单 沙箱

    谷歌有一个欺诈检测系统,可以帮助识别不可靠的支付。例如,如果有人使用被盗的信用卡或同一信用卡被多个帐户使用,等等。在这种情况下,支付交易甚至在开始之前(在与支付提供商联系之前)就会停止,并显示您的问题消息。在五月份,这个欺诈检测系统无法可靠地检测测试帐户,这就是为什么您可以看到这条消息。现在稍微好一点。在现实生活中,这种情况很少发生

    已成功购买和消费的项目是否仍可以继续 由于超出公司控制范围的原因取消(即退款) 开发商

    这是一个棘手的问题,因为取消的不是项目,而是与此项目相关联的支付交易。从理论上讲,交易也可以在以后取消,但这必须有一个很好的理由。同样的被盗信用卡的例子在这里也是有效的。在现实生活中,我以前从未见过它

    是否有可能了解已取消的产品的取消情况 已经被消费了吗

    虽然我自己从未尝试过,但我不相信消费品可以取消。正如我所说的,关联的支付交易可能会被取消,但不会被消费的产品取消。这是因为消费的产品可以再次出售,而且与付款没有任何联系。若产品未被消费,若分配给它的付款交易被取消,If将进入取消状态


    希望这有帮助。

    我正在设置相同类型的应用程序。
    用户可以购买一个项目,它将在我的服务器上跟踪,并最终消费,因此用户可以再次购买相同的项目

    我一直在跟踪有关购买的所有信息,并试图取消一个已消费的订单。我可以向您确认订单的状态将发生变化(大约10分钟后,您将收到关于取消的电子邮件)

    使用productId和purchaseToken调用PurchaseAPI的此url将返回购买信息:

    https://www.googleapis.com/androidpublisher/v2/applications/<app.package.name>/purchases/products/<productId>/tokens/<purchaseToken>?access_token=<myToken>
    
    取消后,purchaseState将发生变化:

    {
      "kind": "androidpublisher#productPurchase",
      "purchaseTimeMillis": "1458047931024",
      "purchaseState": 1,
      "consumptionState": 1,
      "developerPayload": "mypurchasetoken"
    }
    
    这与我第一次为产品验证所做的相同。

    最好定期检查购买物品的状态,如果取消,则在服务器上更新购买信息。

    如果您在服务器上跟踪购买物品,则购买的orderId也是付款交易的ID。即使物品已经被消费,也要由您进行某种验证。
    {
      "kind": "androidpublisher#productPurchase",
      "purchaseTimeMillis": "1458047931024",
      "purchaseState": 1,
      "consumptionState": 1,
      "developerPayload": "mypurchasetoken"
    }