Android 应用内购买有效订单但 Google Play 商店中不存在
Android in-app-purchase valid order but not exist in Google play store
我有一个应用发布在Google play store,它的名字叫PainterSVG,主要目的是帮助SVG设计师create/edit SVG矢量图。
应用中的一个项目被设计为付费功能(使用下载的字体),因此用户需要通过 Google 应用内购买来购买它。我设计了所有的应用内购买代码并测试成功。
一周前,同一个用户在很短的时间内突然爆发了购买。购买状态全部变为Purchase.PurchaseState.PURCHASED。 jason中的原始数据和签名都是用我的应用程序的public密钥验证的。
但是在Googleplay商店里,没有这些购买的信息,根本不存在,当然我也没有收入。
这是我记录的一个购买示例:
原始数据:
{"orderId":"1788684269051654849.8163737331748355","packageName":"p.svg","productId":"paintersvg_point_100","purchaseTime":1622106599816,"purchaseState":0,"purchaseToken":" kslypocwqdttgxzhetcdskic.AO-J1OXwNhKHOWYKxGAGFZvXgslNtkhqCrpQBaxvFSzgcuE-ZLLKCev_hpKJTGlFEFCsXkWuJOXswCzOvadVljYnHiJkIygNoxawFQPaKePZppvbRZZUNToExOfEycRjxTsulwPClSAi"}
签名:
bVYGfzqbt6uWKnmw5xSW5tQek+tSwP0GgUKXz6fNXBCmGEedUrffpKPOXaG2RyfVtYvICThcxumD7kVWNSVxvE9DBJrVDjo+ipTPB9hkYebVQKib1LMBFbSMTpaA9Av2ioP+T/pBQt2EuvRLKUpnZaz5C/2uX7OvOcJtjwYniH/I7oRHvNRBxD6R78Tp6DNySotp41XUwDPmeebC6A38PVM5MhtaY9czWNaa3j3OG7rPAp0j2V5nWsdmmahu8HqBxTyqWdfmf83m3oaHrTvH7vATaKJPMcXdm1aavYAsyHCPzhFGeglU7/KRgUCkzyZ8edcA81F/x9hUVC2QL+cd=Xw]==[=12
可以使用我的应用程序的 public 密钥验证原始数据和签名对于我的应用程序是否正确。仅当购买状态为 PURCHASED 时才会记录原始数据和签名。而且所有的订单id都不一样。
我不知道这里发生了什么 -- 命令来自哪里,发生了什么?用户真的付款了吗?并支付了很多次?我应该给他退款吗?谁能帮帮我?
非常感谢!
您看到的是欺诈企图
我不会在此处放置链接,但在 Android 上,恶意用户可以修补 Play 商店应用程序以绕过应用程序内购买。因此,当用户尝试购买商品时,系统会向您的应用返回一张伪造(但有效)的收据,该收据默认认为是有效的。
幸运的是,您不信任收据,而是通过调用不知道收据的 Google API 来验证它。
欺诈企图示例
这是我们最近在 Purchasely 看到的一个例子(我们管理应用程序的应用内购买,所以我们经常看到这种事情):
所有这些欺诈企图都是由同一用户进行的。
如您所见:
- 他们在短时间内做出不同的尝试
- 退回的收据是随机生成的:价格不正确。更糟糕的是,每月发送的价格 ($1400) 高于每年的价格 ($500),这没有任何意义 ^^'
结论
别担心:)
我有一个应用发布在Google play store,它的名字叫PainterSVG,主要目的是帮助SVG设计师create/edit SVG矢量图。
应用中的一个项目被设计为付费功能(使用下载的字体),因此用户需要通过 Google 应用内购买来购买它。我设计了所有的应用内购买代码并测试成功。
一周前,同一个用户在很短的时间内突然爆发了购买。购买状态全部变为Purchase.PurchaseState.PURCHASED。 jason中的原始数据和签名都是用我的应用程序的public密钥验证的。
但是在Googleplay商店里,没有这些购买的信息,根本不存在,当然我也没有收入。
这是我记录的一个购买示例:
原始数据: {"orderId":"1788684269051654849.8163737331748355","packageName":"p.svg","productId":"paintersvg_point_100","purchaseTime":1622106599816,"purchaseState":0,"purchaseToken":" kslypocwqdttgxzhetcdskic.AO-J1OXwNhKHOWYKxGAGFZvXgslNtkhqCrpQBaxvFSzgcuE-ZLLKCev_hpKJTGlFEFCsXkWuJOXswCzOvadVljYnHiJkIygNoxawFQPaKePZppvbRZZUNToExOfEycRjxTsulwPClSAi"}
签名: bVYGfzqbt6uWKnmw5xSW5tQek+tSwP0GgUKXz6fNXBCmGEedUrffpKPOXaG2RyfVtYvICThcxumD7kVWNSVxvE9DBJrVDjo+ipTPB9hkYebVQKib1LMBFbSMTpaA9Av2ioP+T/pBQt2EuvRLKUpnZaz5C/2uX7OvOcJtjwYniH/I7oRHvNRBxD6R78Tp6DNySotp41XUwDPmeebC6A38PVM5MhtaY9czWNaa3j3OG7rPAp0j2V5nWsdmmahu8HqBxTyqWdfmf83m3oaHrTvH7vATaKJPMcXdm1aavYAsyHCPzhFGeglU7/KRgUCkzyZ8edcA81F/x9hUVC2QL+cd=Xw]==[=12
可以使用我的应用程序的 public 密钥验证原始数据和签名对于我的应用程序是否正确。仅当购买状态为 PURCHASED 时才会记录原始数据和签名。而且所有的订单id都不一样。
我不知道这里发生了什么 -- 命令来自哪里,发生了什么?用户真的付款了吗?并支付了很多次?我应该给他退款吗?谁能帮帮我?
非常感谢!
您看到的是欺诈企图
我不会在此处放置链接,但在 Android 上,恶意用户可以修补 Play 商店应用程序以绕过应用程序内购买。因此,当用户尝试购买商品时,系统会向您的应用返回一张伪造(但有效)的收据,该收据默认认为是有效的。
幸运的是,您不信任收据,而是通过调用不知道收据的 Google API 来验证它。
欺诈企图示例
这是我们最近在 Purchasely 看到的一个例子(我们管理应用程序的应用内购买,所以我们经常看到这种事情):
所有这些欺诈企图都是由同一用户进行的。
如您所见:
- 他们在短时间内做出不同的尝试
- 退回的收据是随机生成的:价格不正确。更糟糕的是,每月发送的价格 ($1400) 高于每年的价格 ($500),这没有任何意义 ^^'
结论
别担心:)