问题标签 [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 投票
1 回答
175 浏览

ios - 远程验证 ios 7.0+ 应用收据返回 21002,但适用于交易收据

在尝试检查应用收据时,我不断收到 21002 错误(格式错误)。但是使用相同的 php 代码检查交易收据可以正常工作。

在 Xamarin C#(与 Objective-C 中的代码相同)的 RestoreTransaction 回调中,我得到沙盒应用收据:

php:

之前 7.0 风格的交易收据:

使用相同的 php 代码,Apple 返回成功。我花了一整天的时间在这里阅读 SO 和 Apple 文档,但一切看起来都不错,但新的应用收据总是返回 21002。

0 投票
0 回答
114 浏览

ios - 将 iOS 应用内购买收据与用户的购买历史记录匹配

我们在我们的应用程序中使用应用程序内购买并在服务器端验证收据。

作为验证的结果,我们得到了这里Receipt描述的对象。我们将其作为购买的唯一标识符存储在我们的记录中。transaction_id

然后,在购买后一段时间,在我们的应用程序中进行购买的用户查看iTunes 应用程序中的购买历史并看到以下标识符:

iTunes 购买标识符

问题: 我们如何将此标识符与经过验证的收据匹配?

例如,当用户通过支持渠道与我们联系并希望恢复他们的帐户时,它很有用。

0 投票
0 回答
343 浏览

ios - 苹果自动订阅开发中如何检测续订状态?

有一种方法,如果服务器验证收据,苹果将返回包含自动订阅的 expires_date 的 latest_receipt_info。但是什么时间和什么方法来做这个检查?每天服务器执行此检查或应用程序在打开时执行此操作,我是否应该始终将第一张购买收据张贴http://buy.itunes.apple.com/veriryreceipt以获取最新的收据信息?

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html

有没有检查续订状态的好方法?

0 投票
1 回答
1325 浏览

ios - iOS 应用收据何时不可用?

我想从应用程序的收据中读取原始应用程序版本。

在开发中,该应用程序不包含收据,因为它不是从商店安装的。我需要启动一个SKReceiptRefreshRequest才能获得沙盒收据。但这会提示用户登录。

那么问题来了:如果应用程序是在生产环境中从商店下载的,它是否保证包含收据?因为如果不是,我需要启动一个刷新请求,提示用户输入他们的凭据。我不想在没有上下文的情况下这样做。

如果它不可用,这种情况下的最佳做法是什么?将其SKReceiptRefreshRequest纳入“恢复购买”程序?

PS:该应用程序仅适用于 iOS 9+。

0 投票
6 回答
19128 浏览

ios - 在 Swift 3 中实现收据验证

我正在使用 Swift 3 开发 iOS 应用程序,并尝试按照本教程实施收据验证:http: //savvyapps.com/blog/how-setup-test-auto-renewable-subscription-ios-app。但是,该教程似乎是使用早期版本的 Swift 编写的,所以我不得不进行一些更改。这是我的receiptValidation() 函数:

当我尝试调用 expireDateFromResponse() 方法时,问题就出现了。事实证明,传递给此方法的 jsonResponse 仅包含:status = 21002;。我查了一下,它的意思是“receipt-data 属性中的数据格式错误或丢失。” 但是,我正在测试的设备具有该产品的有效沙盒订阅,并且订阅似乎除了这个问题之外可以正常工作。我还需要做些什么来确保正确读取和编码receiptData值,或者其他可能导致此问题的问题吗?

编辑:

我尝试了另一种设置 storeRequest.httpBody 的方法:

但是,当我使用此代码运行应用程序时,它会在到达 line 时挂起jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)。它甚至没有到达 catch 块,它只是停止做任何事情。从我在网上看到的情况来看,其他人似乎无法使用 JSONSerialization.data 在 Swift 3 中设置请求 httpBody。

0 投票
1 回答
151 浏览

ios - iOS:跟踪付费用户,同时通过应用内购买将付费 iOS 应用程序转换为免费应用程序

我们目前在 AppStore 中有一个付费的 iOS 应用程序。我们计划将其转换为带有应用内购买的免费应用程序。我们希望向已在先前版本中为应用程序付费的用户免费提供应用内购买。我认为这可以通过 App Receipt Validation 来完成。但是,一旦应用程序从付费转换为免费,收据会更新吗?购买细节会丢失吗?

0 投票
5 回答
4155 浏览

ios - 是否有必要在 iOS 启动时验证/刷新应用商店收据?

Apple 收据验证文档说在启动后立即执行收据验证。这相当于检查由返回的路径中的数据,如果不存在则通过[[NSBundle mainBundle] appStoreRecieptURL]刷新并验证它。SKReceiptRefreshRequest前面链接的文档同时引用了 iOS 和 macOS。

在 iOS 上真的有必要吗?如果是这样,为什么?是为了防止用户在越狱设备上使用我的应用程序,还是没有从应用程序商店购买它(在这种情况下,我可能不在乎我的应用程序是否免费)?或者它对恢复或验证应用内购买等其他操作有影响吗?例如,收据数据是否必须已经存在才能验证应用内购买的交易?

注意:我没有使用应用内订阅。我有应用内购买,但在验证并记录购买服务器端后,我不使用他们的收据。

0 投票
1 回答
452 浏览

ios - 在这种情况下如何测试收据验证?

我正在努力将应用程序从付费转换为免费,其中包含 IAP 下的一些以前的功能。因此,现有用户需要拥有 IAP 的副本。为了做到这一点,我正在使用来自Apple 网站的收据验证码。在这种情况下,我的目标不是实际验证收据的合法性,而是取回用户购买的版本号,以便我可以检测他们是否是付费用户(感谢这个问题的建议)。

这是我用来获取用户收据的代码。它与上述苹果官方网站上的代码几乎相同。但是,我仍然想测试它和它后面的代码,它授予用户他们的 IAP。

但是,如果我在模拟器中、通过 Xcode 在我的 iPhone 上或通过 TestFlight 在我的 iPhone 上运行程序,上面的代码将记录“未找到收据”并返回。我安装了当前的 App Store 版本,然后尝试了 TestFlight,它仍然给出了同样的 no-receipt 错误。

我如何获得收据副本以进行测试,此外,我将如何测试这种形式的收据验证?

0 投票
2 回答
2398 浏览

ios - 检测用户是否退还了应用购买项目中的“消耗品”(应用购买系统中的 Apple 应用商店)

到目前为止,我在网上阅读到,检测用户是否取消应用内购买的唯一方法是使用从用户 iPhone 获得的收据数据并检查该项目是否存在 cancel_date,但据我所知,此字段仅在自动续订订阅项目中可用。

(至少我在网上看到的每一篇文章都谈到了应用程序购买,根本没有提到消耗品。)

因为它们始终存储在收据数据中,而消耗品则存储在收据数据中,直到应用程序本身完成交易,一旦完成,该物品的购买交易在完成过程后将永远从收据数据中消失iPhone。

所以我的问题是,如果用户请求取消从 Apple 购买的应用内购买,这是一种消耗品,我是否还会在带有 canceling_date 字段的收据数据中取回相同的商品交易?

我从未见过有人证实这一点。

如果有人可以提供带有 cancel_date 示例的收据数据库 base64 字符串,那就太好了(如果这样做是合法的)。

0 投票
1 回答
654 浏览

ios - 无法将不可变值作为 inout 参数传递:来自 'UnsafePointer 的隐式转换? 到'不安全指针?需要一个临时的

我已经编写了一个解析 in 的 Receipt 的方法InAppPurchaseSwift2.3现在我将它转换为Swift3. 所以我收到了这个错误。任何人都有想法,如何解决这个问题?

Swift 3 中的收据解析错误