【问题标题】:Verify Android in-app purchases with Google Checkout?使用 Google Checkout 验证 Android 应用内购买?
【发布时间】:2012-04-20 12:33:57
【问题描述】:

我正在 Google Play(fmr. Android Market)上发布一个应用程序,现在我正在开发应用程序内计费功能。 Android 文档说您应该通过使用您的公钥验证交易的签名来做到这一点,但我想知道使用 Google Checkout API 检索订单信息是否会更容易。类似于以下内容:

老路

  1. Android 客户在市场上购买商品
  2. 市场通过随机数、签名、交易 ID 等向手机发送响应
  3. Android 手机或远程服务器使用 nonce(之前生成的)和签名验证交易。
  4. 如果交易得到验证,则购买有效,向客户提供商品。

我的方式

  1. Android 客户在市场上购买商品
  2. 市场通过随机数、签名、交易 ID 等向手机发送响应
  3. Android 手机使用 transactionid 向远程服务器发送请求
  4. 远程服务器向 google checkout API 发送请求以获取带有 transactionid 的订单,并验证交易是否已清除。
  5. 如果交易已结清,则向客户贷记商品

这可能吗?

【问题讨论】:

    标签: android google-app-engine google-checkout in-app-billing


    【解决方案1】:

    大概吧。不过,Google Checkout API 并非随处可用。如果您有商家密钥,您应该可以使用它,但该密钥不适用于大多数国家/地区。您将需要再联系一台服务器,但听起来它应该可以工作。问题是,你为什么还没有尝试?

    【讨论】:

    • 嗯,这两种方法都需要大量工作。我使用 App Engine 作为我的远程服务器,它没有简单的方法来验证公钥的签名(m2crypto 不能在 AE 上运行,pyCrypto 有问题)。
    • 不确定关于生成随机数和验证签名的工作量很大。确定连接到 Google 结帐需要更多工作吗?有一段时间没有使用 pyCrypto,但我很确定它可以验证 RSA 签名。或者你可以用 Java 做后端。
    • 我不是 Android/Play 开发者 - Google Checkout API 仅适用于通过 Google Checkout 进行的交易(不适用于任何其他 API/Google 产品)。您的商家/卖家 ID 和密钥/密钥对于您的市场/产品 API 来说是唯一的(它不会与 Google Checkout 的“商家 ID/密钥”相同。订单号/ID 也会有所不同...
    • @EdSF 不确定您的意思是什么? Android Market/Play 确实使用 Google 结帐进行计费,并且订单号确实与传递给应用内计费库的相同。有些应用会使用商家密钥和 ID 显示 Android Market/Play 订单。
    • @NikolayElenkov 再次我不是 Android 开发人员,所以也许我的立场是正确的。也许Google Checkout API 也被用来表示其他东西。例如。 (不是 Android/Play)有In App Payments API。它有一个“卖家秘密”和“卖家 ID”(又名密钥/ID),订单流向与 GCO 订单相同的订单收件箱。我可以显示应用内订单,但它不使用“Google Checkout API”。
    【解决方案2】:

    对我来说,你的方式似乎很容易被欺骗。对于像计费这样重要的事情,我会采用推荐的方法。已经考虑好了。

    【讨论】:

    • 嗯,我想到这个的原因是因为 Facebook 信用是这样工作的(大部分情况下)。他们如何伪造交易 ID?
    • 我怀疑 Facebook 的家伙做了非常聪明的事情,他们已经深思熟虑,可能会或可能不会在你的方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多