问题标签 [receipt-validation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
971 浏览

macos - 如何确定IAP的原始购买日期(通过结合购买日期和原始购买日期),只检查收据?

在我正在编写的 OS X 应用程序(10.9+)中,我想确定非消耗性应用内购买原始购买日期。这听起来很简单,但有两个相关领域,Apple 的文档似乎没有明确说明如何将它们结合起来。

Apple 的收据验证编程指南描述了两个相关的收据字段:

购买日期... 购买该项目的日期和时间... 对于恢复先前交易的交易,购买日期是恢复的日期。使用原始购买日期获取原始交易的日期。

原始购买日期... 对于恢复先前交易的交易,原始交易的日期。

我的麻烦在于“用于恢复先前交易的交易”。这意味着为了组合这两个字段,我需要知道交易是购买还是恢复。

这在我的方法中很容易<SKPaymentTransactionObserver> paymentQueue:updatedTransactions: ,因为在那里,我知道交易是SKPaymentTransactionStatePurchased还是SKPaymentTransactionStateRestored

但是......当应用程序启动时,它需要根据之前的事务知道是否启用功能。我认为这应该通过仅检查收据来完成(我似乎记得 WWDC 演示文稿中谈到收据是“单一事实来源”)。

在事务处理代码中,我可以将有关客户的应用内购买的信息填充到(例如)一个 plist 中以供以后使用,但这似乎增加了(但)更多的复杂性。

所以,如果我只检查收据(所以我不知道最近的交易是购买还是恢复),哪个字段包含原始购买日期

我正在使用Receigen来验证收据。这提供了宏<prefix>INAPP_ATTRIBUTETYPE_PURCHASEDATE<prefix>INAPP_ATTRIBUTETYPE_ORIGINALPURCHASEDATE,我相信这些提供了 C 字符串。

我能想到几种方法(伪代码):

...但是这种与客户付款相关的代码中的猜测让我担心:(

我将在沙盒中尝试一些实验来尝试验证这一点,但我看到评论说沙盒行为并不总是与生产环境匹配。

任何人都可以在这里确认正确的做法吗?

更新

为了获得更多信息,我使用了SCPStoreKitManager中的一些类(其中有一些可爱的清晰代码) ,将所有_MASReceipt/receipt文件的内容转储到 . 在我的机器上,输出包括:/Applications

在这种情况下,两者purchaseDateoriginalPurchaseDate都存在,并且具有相同的值。

这是我拥有的带有应用内购买的 OS X 收据的唯一示例。

谁能提供更多的例子?我特别有兴趣查看这些值不同或不存在的收据。

我已经上传了这个工具的二进制文件和源代码:DumpMASReceipt-v1.zip

0 投票
6 回答
20553 浏览

php - IOS收据验证错误21002

我正在尝试在我的服务器端使用收据验证。一切正常,但有时我看到奇怪:10 次验证是好的,但在 11 上我得到 21002 错误。我不知道该怎么办。有时我在启动应用程序后第一次验证收据时收到错误 21002。

应用端:

服务器端php脚本:

我所做的一切都基于示例http://www.brianjcoleman.com/tutorial-receipt-validation-in-swift/

所以,有时我觉得应用程序向服务器端发送错误的收据并且 php 脚本无法解析它,我收到 21002 错误状态。有什么建议吗?

0 投票
0 回答
210 浏览

php - 如何在服务器端识别苹果耗材购买(PHP)

我的服务器上有简单的 API 门,在那里我从 iOS 客户端应用程序接收有关 inApps 的信息。

我验证了来自 APNC 的收据并尝试检测已购买的产品。但我不明白如何做到这一点..

我收到这样的东西:

以及如何检测用户购买了哪些产品的问题?

0 投票
1 回答
878 浏览

ios - 在 iOS In-App-Purchases 收据验证上返回许多交易

我的应用程序包含消耗性 IAP 产品,当我使用以下代码调用验证收据时返回多个交易:

有没有办法只返回最后一笔交易

它与恢复交易有关吗?

我检查了此多次收据计数以进行 restoreCompletedTransaction 应用内购买,并且此iOS 应用内购买恢复返回许多交易

我试图恢复所有购买,但没有奏效。

我正在使用这些线路来电收据:

}

注意:此应用支持 iOS 8+。

0 投票
0 回答
492 浏览

ios - iOS 本地收据验证与 CommonCrypto 框架

简单的问题:是否有人设法使用CommonCrypto框架而不是执行本地收据验证,OpenSSL如果是的话 - 是否有任何示例代码可以做到这一点?

那么,用框架替换OpenSSLApple 文档(https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html)中的所有相关内容?CommonCrypto

OSX这里存在一些看起来像解决方案的东西https://gist.github.com/sazameki/3026845但我想知道是否有类似的东西可用于iOS.

提前感谢您提供任何类型的答案或建议。

0 投票
3 回答
28058 浏览

ios - 苹果收据_数据样本

我需要实现一个后端来验证Apple的应用内购买receipt_data,用于应用内积分的应用内购买(即不是订阅,也不是需要“记住”并重新验证的项目应用程序启动)。

我不精通iOS。我只需要开发后端,以便它可以与客户的移动应用程序集成。

我找到了用于验证的教程和示例代码,但我非常希望有一个实际的receipt_data来测试。

最好的办法是有两个receipt_data:一个沙箱和一个生产。

我知道有两种我需要支持的receipt_data变体——一种包含单次购买数据,另一种包含完整的购买历史记录。如果是这样的话,每个人都有一个样本会很棒......

我意识到这本身不是一个问题,但也许样本收据对其他开发人员也有用......

0 投票
1 回答
2412 浏览

ios - 如何为 iOS 应用实现 iOS 自动续订订阅收据验证

我想发布一个具有自动续订订阅的 iOS 应用。虽然有大量关于这方面的信息,但很多都已经过时了,所以我将说明我到目前为止所取得的成就。

  1. 我在 Swift 2.0 中工作,所以任何客观的 C 代码都对我没有帮助。

  2. 我不会使用我自己的服务器与 Apple 通信来验证收据,所以我相信我需要让应用程序直接与 Apple 服务器通信,或者我可以在设备上本地解析收据。

  3. 我已经能够使用以下代码在设备上找到一张收据(不确定是否有多个)

    /li>

但是,我无法弄清楚如何解码收据,以便确定到期日期和其他验证步骤,以确保它是有效的收据。

我不得不说非常令人沮丧的是,对开发人员来说非常重要和有用的东西却如此难以理解和定位。非常感谢任何帮助,希望对其他人有用。

0 投票
1 回答
795 浏览

ios - Apple 规范的自动更新订阅到期日期

我正在尝试验证 iOS 上的自动更新订阅。更具体地说,我想:

1) 验证签名是否正确[√]

2) 验证订阅没有过期[ X ]

当我将收据交给服务器时,我得到验证状态 0,这正是我所期望的,这没有错。

但是,当我尝试在沙盒环境中读取收据的到期日期时,到期日期偏离 Apple 文档中订阅的指定到期日期,这意味着,在 5 分钟后订阅到期而不是我们的 1 个月订阅,我们得到几个小时的到期时间!

如果您查看purchase_dateexpiration_date字段,您会很快注意到它们相隔近 3 小时!(它甚至不是一个偶数,这也增加了混乱......)。

我还没有看到其他人有这个问题,这就是为什么我基本上把头发拉出来了。

0 投票
4 回答
2996 浏览

ios - Understanding receipt validation and receipt refreshing in iOS

We have issues fully understanding the receipt validation flow in iOS.

Here is what we currently do (in development):

In applicationDidFinishLaunching and in applicationWillEnterForeground we validate the receipt on the server side, if there is no receipt or the receipt is invalid, we try to refresh the receipt and revalidate it.

Here are some issues/questions:

  1. What are the cases where there is no receipt available on the device ?

  2. Should we always issue a receipt refresh request when there is no receipt ?

  3. Why is this alert box sometimes shown on startup ? I understand this is shown on a receipt refresh request ?

Sign in required?

  1. When should a receipt verification happen ? We currently do it whenever a purchase is made to verify the purchase, is this correct usage ?
0 投票
1 回答
364 浏览

ios - 收据验证不正确

我已经在 Sandbox 环境中测试了 Consumable 类型的 IAP。我想确认我购买的商品是否有效。但结果总是返回状态“21004”。我对分享秘密什么都不做。所以你可以看一下我在成功购买商品时跟随苹果的示例代码:

我遇到了什么问题?请分享你的经验。谢谢