问题标签 [receipt]

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 投票
4 回答
1109 浏览

xcode - Mavericks 下的 Cocoa Receipt Verification 测试 - 问题

0 投票
2 回答
1944 浏览

printing - 是否可以将热敏收据打印机连接到 Google Open print?

我正在考虑将热敏收据打印机连接到 Google Open Print,这可能吗?如果是这样,您知道我可以购买任何热敏打印机吗?

上面的原因是我有一家带网店的外卖店。下订单后,订单将在 A4 Injet 打印机上打印。这浪费了我大量的纸张和墨水,理想情况下,我希望使用热敏打印机来完成。我知道该网站可以使用此功能,我只需要确保我可以使用热敏打印机来使用 Google Open print。

0 投票
0 回答
1409 浏览

ios - 使用 RMStore 库获取 originalAppVersion

我有一个仅限 iOS 7 的产品,我想阅读 App Store 收据并检查原始应用购买日期。我一直在使用 RMStore 库 ( https://github.com/robotmedia/RMStore ) 来读取应用收据并返回该信息,如下所示:

注意:我目前没有使用 RMStore 库的任何其他部分

在大多数情况下,这很有效。问题是对于我的一些用户,appReceipt.originalAppVersion 是一个空字符串。其他字段,例如当前的 appVersion,都很好。执行 SKReceiptRefreshRequest 后,仍然没有运气。事实上,SKReceiptRefreshRequest 有时会通过将 appReceipt.originalAppVersion 从有效字符串更改为空字符串来使情况变得更糟。

对于遇到此问题的客户,我已指示他们删除该应用程序并从应用程序商店重新下载。在大多数情况下,这确实可以解决问题,但并非总是如此。显然,我想在不要求我的用户重新安装的情况下防止该问题。

整个应用商店收据功能对我来说非常模糊,我对所有正在进行的加密和解密一无所知,这就是为什么我希望依靠 RMStore 为我完成这项工作。我想要一个不错的小型本地图书馆来完成这项工作,而无需使用服务器,而 RMStore 符合要求。

我不知道这是 RMStore 库中的错误,还是应用商店收据系统的一些固有怪癖,其中可能存在解决方法。使用 RMStore 的其他人是否遇到过空 appReceipt.originalAppVersion 的问题?

====== 更新:经过进一步调查,这似乎是 StoreKit 工作方式的一个怪癖。我用另一个库 DHAppleReceiptParser 复制了这个问题。当问题情况出现时,苹果服务器似乎没有返回原始应用程序版本号,因此库不接受它。但是,另一个未记录的字段又回来了, original_purchase_date (仅记录在应用程序购买收据中,而不是应用程序收据中)。我能够直接查询 iTunes 服务器 (buy.itunes.apple.com/verifyReceipt) 进行验证,这对调试很有用,但不推荐用于发货产品。这些是结果:

问题情况。这发生在我的大约 1% 的客户身上,或者在执行 SKReceiptRefreshRequest 之后经常发生。没有“original_application_version”字段!

删除应用程序并从 iCloud 购买进行全新安装后。“original_application_version”现在在那里!

“original_purchase_date”似乎更可靠地检查产品的购买时间,但 Apple 文档并未提及基本应用收据(仅限 IAP)。

0 投票
1 回答
55 浏览

barcode - 包含交易金额信息的条码

是否可以让 POS 在条码中包含交易金额?我需要创建(我是开发人员)一个系统,商家可以在收据上打印礼品卡,然后,当买家将条形码扫描到他的专有移动应用程序时,他的帐户将记入收据上的金额。

您知道使用标准收银机操作/插件是否“可行”吗?

非常感谢!

0 投票
1 回答
2523 浏览

ios - 没有 /verifyReceipt 请求的后端 iOS iap 收据验证

我想在我的后端代码中验证 iOS 应用内购买收据。

Apple 使用外部 /verifyReceipt 请求执行此操作的设计决策显然很愚蠢:它会导致延迟并增加网络错误处理的复杂性。更重要的是,收据中的数据看起来可以通过公钥验证。

在对signature收据字段进行一些分析后,它似乎包含一个经过 PK 验证的 SHA1 哈希:

输出:

现在的问题仍然是哪些数据是散列。以上包含此收据的实际签名:

或者,在 base64 中:

要验证的最简单的数据是purchase-info字段。不幸的是,此(base64 编码或不透明)数据的 sha1 总和与签名中的数据不匹配。

看过相当多的 Apple 文件格式后,我猜它可能是"{$purchaseData}\x00\x00{$environment}\x00\x00{$pod}". 不过,运气不好,他们添加了一个秘密字符串,这会使整个练习变得徒劳(但我不明白他们为什么会......)

有什么见解吗?

更新

向 /verifyReceipt 端点发送不同收据的更多实验表明pod/environment字段无关紧要。更重要的是,收据结构中的字段顺序无关紧要。但是,更改数据中的单个字节会purchase-info直接产生无效的收据。这一切都会加强这样的假设,即只有purchase-info值是散列的一部分——但它可能带有前缀/后缀的秘密。任何人都可以验证(双关语)吗?

0 投票
2 回答
692 浏览

c# - 在 POS 系统中,将新记录放在首位是常见的做法吗?

在 POS 系统中,有添加项目的发票。通常,结帐操作员可以将此发票视为带有项目的 DataGridView。但我需要知道:

  1. 在 POS 系统中,将新添加的记录放在数据网格的顶部是一种常见的做法吗?
  2. 打印收据时,通常的做法是按照首先添加收据顶部和最后添加收据行最后的顺序将项目打印到收据上?

谢谢

0 投票
1 回答
1408 浏览

ruby-on-rails - Apple Receipt Validation 21002 From Ruby on Rails with Typhoeus Gem

我有一些 Rails 代码,它从 Apple 获得应用内购买收据,并针对沙盒或生产验证它。这工作得很好,但最近我在我的日志中看到了一些 21002(receipt-data 属性中的数据格式错误)错误。我可以看到这些来自生产中的应用程序。

下面是我验证收据的 RoR 代码,您是否看到任何会导致 21002 的内容?

非常感谢!

0 投票
1 回答
373 浏览

in-app-purchase - 验证应用内购买

我正在构建一个提供应用内购买的 Windows 应用商店应用。从可用的文档中我不明白这如何与多个安装或设备一起工作。我希望我的用户能够在不同设备上使用多个安装的 IAP(购买一次,在任何设备上使用)。

以下是使用收据验证购买的摘录:

在某些情况下,您可能需要验证用户是否购买了您的应用,或者是否购买了应用内内容。例如,想象一个提供下载内容的游戏。如果购买游戏内容的用户想要在不同的 Windows 8 设备上玩游戏,您需要验证用户是否已经拥有该内容。

并且还可以保护您的 Windows 应用商店应用程序免遭未经授权的使用

为防止用户采用此策略非法使用您的应用程序,我们提供了收据功能,可让您验证用户对您的应用程序和服务的访问权限。您的应用能够获得通过 Windows 应用商店进行的任何与应用相关的交易的签名收据,例如应用的初始购买和任何应用内购买。然后,您的应用可以使用此信息来确定该用户可以访问哪些服务或功能。[...] 每个收据元素的 ID 对于每个用户(和设备)都是唯一的,您可以在服务器上对其进行验证,以确认该交易对该用户而言是合法的,而不是欺诈性交易。当您的应用程序有自己的身份验证机制时,这尤其有价值,因为它允许您验证似乎购买了您的应用程序的每个用户实际上是

我的问题是:

  1. 什么时候需要有一个后端来存储收据?
  2. 我何时检查后端的收据(应用程序启动时)?
  3. 每个设备的收据都是唯一的。这对多个设备有何帮助?如果我的用户购买了一次,我希望我的用户能够在多个设备上使用 IAP。
  4. 如果收据用于验证合法交易,这是否意味着CurrentApp组件提供的信息可能不是真实的,而是受到黑客攻击?如果是这样,我为什么要首先信任原始收据?
0 投票
1 回答
922 浏览

ios - 如何防止损害应用内购买收据?

购买成功后,我将收据+交易 ID 保存到NSUserDefaults. 相同的信息被发送到服务器以保持记录。

稍后(按需)当用户想要从我自己的服务器下载内容时,我的应用程序会将收据 + 交易 ID 发送到服务器。它将通过应用程序发送的交易 ID 查找存储的收据,并与 Apple 验证存储的收据和新的收据。如果某些键匹配,则提供可下载的内容。

但是,现在获取NSUserDefaults和提取receipt+transactionID 并不难。即使我将信息放在钥匙串中,也可以从互联网连接中获取收据。

现在,如果有人拥有收据+交易 ID,可以向我的服务器发送请求并从任何 PC 获取内容。如何在不使用密码学的情况下修补此逻辑?

0 投票
1 回答
99 浏览

ios - 提交到 App Store 时应使用哪个收据验证 URL?

我的应用程序使用 Auto Renewable 订阅,并且收据验证是从设备完成的。提交到 App Store 时,我应该使用沙盒收据验证 URL 还是生产收据验证 URL?