iOS中In app购买的服务器端验证的最佳实践

8su*_*has 12 payment transactions storekit in-app-purchase ios

我们正在使用付款的服务器端验证,如此 -

  1. 用户付款.
  2. Store kit API将交易收据发送给App.
  3. 应用程序将base64编码的事务收据发送到我们的服
  4. 我们的服务器调用https://buy.itunes.apple.com/verifyReceipt并验证事务接收器.
  5. 用户被标记为已付款.

对于特定用户,我们未在服务器上获得交易收据,因此无法验证收据.我们猜测在步骤2和3中出现了问题.如果在向服务器发送收据时出现连接问题,应用程序将在后续应用程序恢复时重试.

现在我们有一个丢失的交易收据和愤怒的用户.你怎么建议我们前进?我们怎样才能防止这种情况发生?我们可以遵循哪些指导方针或最佳做法来防止这种情况发生?

谢谢.

DrC*_*DrC 4

根据我的经验,可能的问题是

  • Base64 数据一路上进行了 url 编码,因此 + 和 / 变得混乱 - 在传输之前用更安全的字符替换它们
  • 整个交易都是假的。

检查第二种情况的方法是查看您的帐户,看看是否有匹配的购买记录。不幸的是,除非您的购买量较低,否则该网站可能有点难以审查。

为了正确处理服务器上的错误或 Apple 端的错误(如果发生),您需要在代码中执行以下两件事。

  1. 在与服务器成功通信之前,不要调用 finishTransaction: (在这种情况下它没有帮助,但值得注意)
  2. 在 SKPaymentQueue defaultQueue 上有一个“重新加载购买”按钮或调用 RestoreCompletedTransactions: 的操作。对于非消耗品/权利对象,这将重新发送带有可以在您的服务器上重新验证的收据的所有交易。

如果您面临的问题是非消耗品/权利,那么第二项就是出路。