标签: receipt-validation

如何使用Apples Receipt Validation Endpoint查看非消费类应用内购买是否有效

我最近根据Apples文档设置了一项服务来验证和记录我的iOS购买 .经过一些购买后,我查看了我的桌子,发现我有45次购买,状态代码为0,根据Apple的文档,这意味着它们是有效的.问题是,当我登录我的iTunes帐户时,它只记录了22次有效购买.仔细检查Apple的JSON响应状态为0后,我发现了两个变体:

{
    "status": 0,
    "environment": "Production",
    "receipt": {
        "receipt_type": "Production",
        "adam_id": 888310447,
        "app_item_id": 888310447,
        "bundle_id": "com.studioName.gameName",
        "application_version": "1.4",
        "download_id": 62010318102259,
        "version_external_identifier": 810789159,
        "request_date": "2014-12-16 15:34:17 Etc/GMT",
        "request_date_ms": "1418744057267",
        "request_date_pst": "2014-12-16 07:34:17 America/Los_Angeles",
        "original_purchase_date": "2014-07-08 18:04:28 Etc/GMT",
        "original_purchase_date_ms": "1404842668000",
        "original_purchase_date_pst": "2014-07-08 11:04:28 America/Los_Angeles",
        "original_application_version": "1.1",
        "in_app": []
    }
}
Run Code Online (Sandbox Code Playgroud)
{
    "status": 0,
    "environment": "Production",
    "receipt": {
        "receipt_type": "Production",
        "adam_id": 888310447,
        "app_item_id": 888310447,
        "bundle_id": "com.studioName.gameName",
        "application_version": "1.4",
        "download_id": 39011903209949,
        "version_external_identifier": 810789159,
        "request_date": "2014-12-16 15:11:10 Etc/GMT",
        "request_date_ms": "1418742670718",
        "request_date_pst": "2014-12-16 …
Run Code Online (Sandbox Code Playgroud)

transactions objective-c in-app-purchase ios receipt-validation

6
推荐指数
0
解决办法
1064
查看次数

如何将openssl添加到swift项目中

我正在学习如何在我的iOS/OSX项目中添加应用内购买收据验证.

有一个很好的概述这里和WWDC14对这个话题好影片.

大量的示例代码,但每个人都跳了一步.如何导入openSSL标头.swift编译器抱怨没有这样的模块.

import Foundation
import StoreKit
import openssl  //no such module ???
Run Code Online (Sandbox Code Playgroud)

在编写一行代码之前,我已经陷入困境.openssl框架隐藏在哪里?

openssl storekit in-app-purchase receipt-validation swift

6
推荐指数
1
解决办法
5892
查看次数

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

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

[[NSBundle mainBundle] appStoreReceiptURL];
Run Code Online (Sandbox Code Playgroud)

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

它与恢复交易有关吗?

我检查了restoreCompletedTransaction inapp purchase的多次收据计数,这个iOS应用内购买恢复返回了许多交易.

我试图恢复所有购买但它没有用.

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

- (void) checkReceipt {

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
if(!receipt) {

}
NSError *error;
NSDictionary *requestContents = @{@"receipt-data": [receipt base64EncodedStringWithOptions:0]};
NSLog(@"requestContents:%@", requestContents);
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
                                                      options:0
                                                        error:&error];

if (!requestData) {  }

NSURL *storeURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];

NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];
[storeRequest setHTTPMethod:@"POST"];
[storeRequest setHTTPBody:requestData];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:storeRequest …
Run Code Online (Sandbox Code Playgroud)

storekit in-app-purchase ios receipt-validation

6
推荐指数
1
解决办法
680
查看次数

提交到 Mac 应用商店时的收据验证错误

在 Mac App Store 提交时,我的应用程序被拒绝,原因如下:-

“安装有效收据后,应用程序在启动时退出。控制台报告应用程序“ Exited with exit code: 173”,操作系统声明应用程序“ is damaged and can't be opened”。这通常表明应用程序未正确验证其收据。

我根本没有在我的代码中进行任何收据验证,所以我该怎么做才能解决这个问题?它只发生在审查中,而不是在我这边。这是一个简单的 swift ui + Objective-C+ 一些用于逻辑 OS X 应用程序的 C++。使用其他应用程序(Objective-C + CPP)一切正常。

macos mac-app-store receipt-validation swift

5
推荐指数
1
解决办法
383
查看次数

iOS 应用内购买验证消耗品收据

在 iOS 中进行应用内购买时,需要验证订阅的收据。消耗品也需要核对收据吗?

in-app-purchase ios receipt-validation in-app-subscription

5
推荐指数
1
解决办法
2589
查看次数

Apple IAP 收据验证 Node.js

我尝试使用此处的 Node.js进行 IAP 收据验证,但它总是在服务器日志上返回错误:“收据数据属性中的数据格式错误。”

\n\n

有人可以帮助我正确地将 Base64 字符串发送到 Node.js 并将其解码为相同的 Base64 字符串以进行收据验证吗?我对 javascript 的经验为零,并且已经尝试让这个简单的代码工作两天了,但没有成功。

\n\n

这是我的 Swift 代码:

\n\n
let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)         \nlet receiptString = receiptData.base64EncodedString(options: [])\n\n\nvar request = URLRequest(url: URL(string: "https://us-central1-calendizer-6a849.cloudfunctions.net/receiptValidation")!)\nrequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")\n  request.httpMethod = "POST"\n\n// attach receipt data to a request\nrequest.httpBody = receiptString.data(using: .utf8)\n\nprint("httpBody: \\(request.httpBody?.base64EncodedString())")\n\nLogs.log("\xe2\x9c\x89\xef\xb8\x8f Receipt Validation -> sending request ...")\nlet task = URLSession.shared.dataTask(with: request) { data, response, error in\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的 Node.js 代码(Firebase Cloud Functions):

\n\n
const functions = require(\'firebase-functions\');\nvar …
Run Code Online (Sandbox Code Playgroud)

javascript node.js ios receipt-validation swift

5
推荐指数
1
解决办法
2897
查看次数

验证来自 macOS 应用扩展的收据?

macOS应用扩展如何如何验证应用商店收据?即验证应用内购买是否有效(并且持续有效)

\n\n

显然,主捆绑包指向应用程序扩展的捆绑包,因此appStoreReceiptURL属性Bundle也会返回不存在的收据文件 \xe2\x80\x94 。

\n\n

例如,以下代码分别打印出主包和应用程序商店收据路径。

\n\n
let mainBundle = Bundle.main\nprint("main bundle path: \\(mainBundle.bundleURL)")\nprint("receipt path: \\(String(describing: mainBundle.appStoreReceiptURL))")\n
Run Code Online (Sandbox Code Playgroud)\n\n

当放置在应用程序扩展视图控制器内时viewDidLoad,它返回如下结果:

\n\n
main bundle path: file:///Users/${userName}/Library/Developer/Xcode/DerivedData/${projectBuild}/Build/Products/Debug/${mainAppName}.app/Contents/PlugIns/${appExtensionName}.appex/\nreceipt path: Optional(Contents/_MASReceipt/receipt -- file:///Users/${userName}/Library/Developer/Xcode/DerivedData/${projectBuild}/Build/Products/Debug/${mainAppName}.app/Contents/PlugIns/${appExtensionName}.appex/)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,看看.appex捆绑包的内部,文件夹Contents/_MASReceipt/不存在。

\n

macos receipt-validation swift macos-app-extension

5
推荐指数
0
解决办法
191
查看次数

Mac App Store 测试收据验证(来自receigen)“应用程序已损坏且无法打开。”

我正在使用 Receigen ( http://receigen.etiemble.com/ ) 为我的一款 MacOS 应用程序进行收据验证。多年来,这种方法一直运作良好,但有些事情发生了变化。我已经有一年左右没有对此应用程序进行更新并提交了更改,但由于收据验证不起作用而被拒绝。

\n\n

当我尝试在本地测试收据时,它会弹出应用程序商店登录,我输入我的电子邮件+密码,然后收到“应用程序已损坏”消息。

\n\n

我使用 Receigen 代码助手生成验证代码(它生成收据验证代码并尽可能随机化,这样您就不能轻松破解每个使用 receigen 的应用程序)。

\n\n

我正在使用 macOS 10.14.3 和 Xcode 10.2。

\n\n

这是我的 receiveigen 生成代码的标头:

\n\n
//    \n// This code was generated by RECEIGEN 4.0.4 on 2019-04-08 15:54:01 and will use:    \n//    \n// Bundle Identifier            : com.inadaydevelopment.mac10biiFinancialCalculator    \n// Bundle Version               : 2.1.0    \n// Receipt Identifier           : com.inadaydevelopment.mac10biiFinancialCalculator    \n// Receipt Version              : 2.1.0    \n//    \n// Language                     : ObjC    \n// Platform                     : OSX    \n// Code Prefix                  : ReceiptValidation    \n// Success …
Run Code Online (Sandbox Code Playgroud)

macos mac-app-store receipt-validation receigen

5
推荐指数
1
解决办法
1474
查看次数

Sandbox StoreKit 收据中缺少交易

我目前正在开发的应用程序混合了非消耗性产品和自动更新订阅。看起来一两天后,购买的非消耗性产品将从沙盒收据中删除。恢复后,产品由 StoreKit 观察者回调提供,但收据中仍然缺少它们。

我已经尝试过通过 OpenSSL 进行本地验证和解析,以及通过 Apple 服务器进行远程验证,结果匹配:这些产品总是丢失。请注意,订阅永远不会发生这种情况,收据中始终存在过期和有效的订阅。另一个有趣的细节:产品不会一下子全部丢失,它们会随着采购订单逐渐消失,因为沙盒测试用户正在被“清理”。

由于 Apple 文档 在这里 声明“非消耗品、自动续订订阅项目和非续订订阅项目无限期地保留在收据中”,我希望它们在那里。

有人知道这是否是预期的沙箱行为吗?是否有任何官方的 Apple 资源说明一旦应用程序投入生产就可以了?

编辑:在此处的开发论坛中找到了某人发布的完全相同的问题。

sandbox storekit ios receipt-validation swift

5
推荐指数
1
解决办法
409
查看次数

不推荐使用 App Store 验证收据

App Store 验证收据何时被弃用?

\n

这什么时候会停止工作?我\xe2\x80\x99找不到任何关于此的信息吗?

\n

https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

\n

buy.itunes.apple.com/verifyReceipt

\n

app-store in-app-purchase ios receipt-validation in-app-purchase-receipt

5
推荐指数
1
解决办法
4327
查看次数